删除HTML表格中的所有行


99

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


2
必须有一个循环,没有“删除多个元素”命令,该方法removeChild仅使用单个DOM元素。
森达维达斯

@SLaks假设他的意思是包含标题行的行
Eonasdan 2011年

Answers:


92

将该<th>行保留在a中<thead>,将其他行保留在a中,<tbody>然后将其替换为<tbody>一个新的空白行。

var new_tbody = document.createElement('tbody');
populate_with_new_rows(new_tbody);
old_tbody.parentNode.replaceChild(new_tbody, old_tbody)

轻松实现最有效的解决方案,当然要允许JavaScript开发人员修改HTML。
Blazemonger's

1
请注意,如果要使用innerHTML属性替换tbody,则在IE中将无法使用它,但是有一种解决方法。
aziz punjani 2011年

2
@Eonasdan-这有点主观。如果有这个问题的人想用其中一个解决这个问题,那里有很多图书馆(我个人最近倾向于使用YUI 3)。不管您希望包括哪个巨大的第三方代码块,其原理都将相同。
昆汀

3
对此进行document.getElementById('tbody').innerHTML = '';
整顿

2
@ Trees4theForest对我来说很好。可能在OP时代是不可能的。
Mabu

94

这将删除所有行:

$("#table_of_items tr").remove(); 

40
如果您不想删除标题:$(“#table_of_items tbody tr”)。remove();
TTT

1
很好的简单答案。我在CoffeeScript中使用过-我喜欢单行解决方案$("tbody#id tr").remove()
n2o

我认为这是比公认的更好的答案,尽管它取决于您是否要使用JQuery。但是,.remove无法以某种方式在Chrome上运行。
Milind Thakkar,2015年

TTT,使用<thead> <th> </ th> </ thead>标记创建表格的标题。然后$(“#table_of_items tr”)。remove(); 对您来说效果很好,因为它仅删除<tr>标记。
凯特

TTT,请将您的评论添加到答案中。您的答案是完美的!
Khorshid

57

非常粗糙,但这也可以:

var Table = document.getElementById("mytable");
Table.innerHTML = "";

9
不幸的是,这并没有按照OP的要求保留标题<th>。
JoSeTe4ever

1
如果他们将标头<th> 嵌套在中则可以<thead>。无论如何,这可能是在语法上最正确的构建表的方式。
乔恩·布莱克

效果很好。我认为这仅适用于像我这样的人,他们在JQuery中创建了表头,行,单元格,主体。
Shamsul Arefin Sajib

这对于清除tbody中的html效果很好:)
RudyOnRails

我只清理了一下身体,对此做了些微修改 var bodyRef = document.getElementById('myTable').getElementsByTagName('tbody')[0]; bodyRef.innerHTML = '';
azyth

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]);
}

这将删除除第一行以外的所有行。

干杯!


9
更短(更快):var rowCount = myTable.rows.length; while(-rowCount)myTable.deleteRow(rowCount);
佩塔尔2014年

上面的注释中的代码不会删除第一行
PrfctByDsgn '18年

16

注意要注意的常见错误

如果您的起始索引为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);
}

笔记

1. deleteRow的参数是固定的,
这是必需的,因为当我们删除一行时,行数会减少。
即 到我到达(rows.length-1)的时间,或者甚至在该行已被删除之前,所以您将遇到一些错误/异常(或无提示的异常)。

2. rowCount是在for循环开始之前进行的, 因为当我们删除“ table.rows.length”时,它会不断变化,因此又遇到了一些问题,只有奇数或偶数的行才被删除。

希望能有所帮助。


10

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

$("tbody").children().remove()

除此以外:

$("table").children().remove()

希望能帮助到你!


7

我需要删除所有行,除了由@strat发布的第一行和解决方案之外,但这会导致未捕获的异常(在不存在的上下文中引用Node)。以下为我工作。

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

7

如果可以声明IDtbody,则可以简单地运行以下函数:

var node = document.getElementById("tablebody");
while (node.hasChildNodes()) {
  node.removeChild(node.lastChild);
}

5

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

document.querySelectorAll("table tbody tr").forEach(function(e){e.remove()})

5

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

$("#Your_Table tr>td").remove();

3
等等,这是jQuery的答案,原始问题并没有专门针对jQuery解决方案!

4

将一些ID关联到tbody标签。即。此后,以下行应保留表的页眉/页脚并删除所有行。

document.getElementById("yourID").innerHTML="";

而且,如果您希望擦除整个表格(页眉/行/页脚),请在表格一级设置ID,即


3

如果您不希望删除th而只希望删除其中的行,则此方法非常有效。

var tb = document.getElementById('tableId');
  while(tb.rows.length > 1) {
  tb.deleteRow(1);
}

3

这个怎么样:

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

var myTable = document.getElementById("myTable");
myTable.oldHTML=myTable.innerHTML;

然后,当您想清除表格时:

myTable.innerHTML=myTable.oldHTML;

如果这就是您开始的全部,那么结果将是您的标题行,其性能比循环快得多。


非常优雅的解决方案
揭露

2

如果<th>行数比非<th>行数少得多,则可以将所有<th>行收集到一个字符串中,删除整个表,然后写出<table>thstring</table>该表以前的位置。

编辑:显然,“ thstring”是<th>s的所有行的html 。


1
而是将<th>s作为DOM元素收集,清除表的innerHTML,然后将<th>s再次附加到表中。
entonio 2011年

请注意,如果您要使用innerHTML属性替换透明的tbody,则它在IE中将无法使用,不过有一种解决方法。
aziz punjani 2011年

2

这在IE中有效,甚至不必为表声明var并将删除所有行:

for(var i = 0; i < resultsTable.rows.length;)
{   
   resultsTable.deleteRow(i);
}

1

这是我为解决该问题而编写的简单代码,而没有删除标题行(第一个)。

var Tbl = document.getElementById('tblId');
while(Tbl.childNodes.length>2){Tbl.removeChild(Tbl.lastChild);}

希望对你有帮助!!。


1

为您的肢体分配一个ID或一个类。

document.querySelector("#tbodyId").remove();
document.querySelectorAll(".tbodyClass").remove();

你能说出你的ID或类,你怎么想的,不一定#tbodyId还是.tbodyClass


0

只要清除表主体。

$("#tblbody").html("");

2
html()实际上是jQuery方法。
2014年

-1

const table = document.querySelector('table'); table.innerHTML ===''?null:table.innerHTML =''; 上面的javascript对我来说很好。它检查表是否包含任何数据,然后清除所有内容,包括标题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.