deleteRow()是原生DOM删除表格行的最快方法,索引从0开始且动态前移,省略参数删最后一行;批量删除须倒序遍历,避免索引错乱,并需同步清理数据源。

deleteRow() 是最快、最直接的方式,但必须注意索引是动态变化的——删掉第 2 行后,原第 3 行就变成新第 2 行了。
用 deleteRow() 删除指定索引行
这是原生 DOM 提供的表格专用方法,不触发重排(相比 remove()),性能好,兼容性全(IE6+ 都支持)。
-
deleteRow()只能作用于<table>元素,不能用于<tbody>或<tr> - 参数是整数索引,从
0开始;省略参数则删最后一行 - 索引基于当前
rows集合长度,删完一行后后续行索引自动前移 - 如果传入负数或超出范围(如
table.rows.length),会抛错:IndexSizeError
示例:删第 1 行(即索引 1,第二行)
const table = document.getElementById('myTable');
table.deleteRow(1);
点击按钮删所在行,别只删 <td>
常见错误是写 button.parentElement.remove(),结果只删了单元格,<tr> 还在,表格结构就乱了。
立即学习“前端免费学习笔记(深入)”;
- 按钮通常在
<td>里,<td>的父级是<tr>,所以得往上找两层 - 推荐用
closest():它不依赖固定层级,即使按钮外层加了<div>也不怕 - 不要用
parentNode.parentNode.remove()—— DOM 结构一变就失效
正确写法:
document.addEventListener('click', e => {
if (e.target.classList.contains('del-btn')) {
e.target.closest('tr').remove();
}
});
批量删多行时,为什么倒序遍历更安全?
比如要删索引 5 到 10 的行,如果正序删,删完第 5 行,原第 6 行变成新第 5 行,接着删“第 6 行”实际删的是原第 7 行……漏删 + 错删。
- 用
for (let i = 10; i >= 5; i--) table.deleteRow(i)就不会偏移 - 如果用
remove()批量删,建议先收集所有目标<tr>元素再统一删,避免 DOM 实时更新干扰索引 - 大数据量(>100 行)时,先
table.style.display = 'none'再操作,完后再恢复,能减少重绘次数
删行后数据没同步?别忘了清理对应的数据源
DOM 行删了,但 JS 里存的数组或对象可能还留着,下次渲染或计算就会出错。
- 给每行加
data-id或data-index,删 DOM 的同时用它定位并 splice 数组 - 避免靠
rowIndex或sectionRowIndex反查数据 —— 它们是只读属性,且受<thead>/<tbody>影响,不稳定 - 如果用了框架(React/Vue),直接改 state,让视图自动同步,别手动操作 DOM
真正容易被忽略的不是怎么删,而是删完之后——DOM 和数据模型是否还对得上。尤其当表格支持排序、筛选或分页时,错位一条数据,后面全乱。



















