删除HTML表中的所有行

K''*_*K'' 88 html javascript html-table

如何删除HTML表的所有行,除了<th>使用Javascript,并且不循环遍历表中的所有行?我有一个非常庞大的表,我不想在我循环删除它们时冻结UI

App*_*rao 83

这将删除所有行:

$("#table_of_items tr").remove(); 
Run Code Online (Sandbox Code Playgroud)

  • 如果您不想删除标题:$("#table_of_items tbody tr").remove(); (28认同)
  • 错误的答案 - 这不是 JavaScript - 那是 JQuery (不是 OP 要求的)。我认为这**也只能工作一次** - 如果您尝试*第二次*执行此操作(例如添加更多行后),我会看到错误“未捕获的类型错误:无法读取 null 的属性(读取“删除”) )” - 所以对于任何寻找 JavaScript 解决方案的人来说(就像OP要求的那样): .remove() 可能是错误的想法?(至少不需要额外的步骤来放回可以稍后再次删除的新内容)。设置为 '' 比 .remove() 更安全:例如 `document.getElementById('mytbody').innerHTML = ''; ` (11认同)
  • 非常好的简单答案。我在 CoffeeScript 中使用 - 我喜欢单行解决方案 `$("tbody#id tr").remove()` (2认同)

Que*_*tin 79

<th>行保留在a <thead>和其他行中,<tbody>然后用<tbody>新的空行替换.

var new_tbody = document.createElement('tbody');
populate_with_new_rows(new_tbody);
old_tbody.parentNode.replaceChild(new_tbody, old_tbody)
Run Code Online (Sandbox Code Playgroud)

  • @Eonasdan - 这有点主观.那里有很多图书馆(我个人喜欢这些天使用YUI 3)如果有这个问题的人想用其中一个解决这个问题.无论您希望包含哪一大块第三方代码,原则都将是相同的. (2认同)
  • 对此进行细化...... document.getElementById('tbody')。innerHTML ='';是什么问题? (2认同)
  • @Trees4theForest 这对我来说效果很好。可能在OP的时候这是不可能的。 (2认同)

小智 49

非常粗糙,但这也有效:

var Table = document.getElementById("mytable");
Table.innerHTML = "";
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这并没有像OP那样保留标题<th>. (8认同)
  • 这个答案解决方案对我不起作用(它删除了 thead 和 tbody)。我丢失了标题。但@azyth 的解决方案(在评论中)效果非常好。已编辑错字。 (4认同)
  • 如果他们将标题 `&lt;th&gt;` 嵌套在 `&lt;thead&gt;` 中,就会发生这种情况。无论如何,这可能是构建表格的最语法正确的方法。 (2认同)

cst*_*rat 17

这是一个老问题,但我最近遇到了类似的问题.
我写了这段代码来解决它:

var elmtTable = document.getElementById('TABLE_ID_HERE');
var tableRows = elmtTable.getElementsByTagName('tr');
var rowCount = tableRows.length;

for (var x=rowCount-1; x>0; x--) {
   elmtTable.removeChild(tableRows[x]);
}
Run Code Online (Sandbox Code Playgroud)

这将删除除第一行之外的所有行.

干杯!

  • 更短(和更快):var rowCount = myTable.rows.length; while( - rowCount)myTable.deleteRow(rowCount); (9认同)

Man*_*ddy 14

注意事项,关于常见错误:

如果你喜欢代码从0开始索引(或从开始的某个索引),

那么,正确的解决方案是:

var tableHeaderRowCount = 1;
var table = document.getElementById('WRITE_YOUR_HTML_TABLE_NAME_HERE');
var rowCount = table.rows.length;
for (var i = tableHeaderRowCount; i < rowCount; i++) {
    table.deleteRow(tableHeaderRowCount);
}
Run Code Online (Sandbox Code Playgroud)

1. deleteRow的参数是固定的

这是必需的,因为当我们删除一行时,行数减少.
即; 到达(rows.length - 1)时,甚至在该行已被删除之前,您将有一些错误/异常(或一个无声的).

2.在for循环开始之前获取rowCount

因为当我们删除"table.rows.length"将继续改变,所以再次你有一些问题,只有奇数或偶数行才会被删除.

注意这些,节省时间,祝你好运.


Fra*_*cho 10

假设您只有一个表,那么您可以仅使用类型引用它.如果您不想删除标题:

$("tbody").children().remove()
Run Code Online (Sandbox Code Playgroud)

除此以外:

$("table").children().remove()
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!


小智 8

下面给出的代码效果很好。它删除除标题行之外的所有行。所以这段代码真的很棒

$("#Your_Table tr>td").remove();
Run Code Online (Sandbox Code Playgroud)

  • 等等,这是 jQuery 的答案,原来的问题并没有专门针对 jQuery 解决方案提出! (6认同)

小智 7

我需要删除除@strat发布的第一个和解决方案之外的所有行,但这会导致未捕获的异常(在不存在的情况下引用节点).以下对我有用.

var myTable = document.getElementById("myTable");
var rowCount = myTable.rows.length;
for (var x=rowCount-1; x>0; x--) {
   myTable.deleteRow(x);
}
Run Code Online (Sandbox Code Playgroud)


Len*_*ite 7

这个怎么样:

当页面首次加载时,执行以下操作:

var myTable = document.getElementById("myTable");
myTable.oldHTML=myTable.innerHTML;
Run Code Online (Sandbox Code Playgroud)

然后当你想清除表时:

myTable.innerHTML=myTable.oldHTML;
Run Code Online (Sandbox Code Playgroud)

如果您一开始就是这样,结果将是您的标题行,性能比循环快得多。

  • 非常优雅的解决方案 (2认同)

小智 6

如果你可以声明一个IDfor,tbody你可以简单地运行这个函数:

var node = document.getElementById("tablebody");
while (node.hasChildNodes()) {
  node.removeChild(node.lastChild);
}
Run Code Online (Sandbox Code Playgroud)


小智 6

为 tbody 标签分配一些 id。IE 。此后,以下行应保留表页眉/页脚并删除所有行。

document.getElementById("yourID").innerHTML="";
Run Code Online (Sandbox Code Playgroud)

并且,如果您希望清除整个表(页眉/行/页脚),请在表级别设置 id,即


小智 5

这将在本机的 HTML 表中进行迭代删除

document.querySelectorAll("table tbody tr").forEach(function(e){e.remove()})
Run Code Online (Sandbox Code Playgroud)