14

我在使用 javascript 中的函数时遇到问题,不知道为什么。这真的很简单。我正在尝试删除 html 表中的所有行。所以我写道:

function delete_gameboard(){
   var table = document.getElementById("gameboard");
   var rowCount = table.rows.length;
   for (var i = 0; i < rowCount; i++) {
      table.deleteRow(i);
   }
}

然而,它只会删除其中的一半。谁能看到导致这种奇怪行为的原因?

4

8 回答 8

34

因为当你删除第一行时,第二行会变成第一行,它是动态的。

你可以这样做:

while(table.rows.length > 0) {
  table.deleteRow(0);
}
于 2013-04-28T01:39:05.837 回答
5

考虑一下:

index 0:  row #1
index 1:  row #2
index 2:  row #3
index 3:  row #4
index 4:  row #5

你删除了索引 #2(第 3 行),所以 DOM 引擎会调整索引键,你最终会得到:

index 0:  row #1
index 1:  row #2
index 2:  row #4   <---hey! index #2 is still there
index 3:  row #5

你基本上是在你站立的地方挖一个洞,所以当你挖得越深,你自然会越陷越深,永远看不到任何进展......直到你在表格中用完要删除的行。

于 2013-04-28T01:40:28.393 回答
4
function delete_gameboard(){
var table = document.getElementById("gameboard");
var rowCount = table.rows.length;
for (var i=rowcount-1; i >=0; i--) {
    table.deleteRow(i);
}
}

当你删除它时,行的索引会改变。使用反向循环。如果您使用任何条件删除行,这也会很有帮助。如果要删除所有行,请使用以下

while(table.rows.length) {
  table.deleteRow(0);
}
于 2013-04-28T01:40:07.483 回答
3

如果删除第一行,则第二行将成为新的第一行。

我更喜欢这样做:

while(table.rows[0]) table.deleteRow(0);
于 2013-04-28T01:39:09.123 回答
2

这些table行是活动的,也就是说,如果你删除第 0 行,那么下一行变成第 0 行,只是不断地删除第 0 行

function delete_gameboard(){
    var table = document.getElementById("gameboard");
    var rowCount = table.rows.length;
    for (var i=0; i < rowCount; i++) {
        table.deleteRow(0);
    }
}
于 2013-04-28T01:38:52.617 回答
1

你可以去:

    document.getElementById("gameboard").innerHTML = "";
于 2017-01-01T07:13:16.457 回答
0
function delRow()
  {
    var current = window.event.srcElement;
    //here we will delete the line
    while ( (current = current.parentElement)  && current.tagName !="TR");
    current.parentElement.removeChild(current);
  }
于 2014-12-04T07:38:26.983 回答
-2

如果您在代码中使用 JQuery,那么删除行的最简单方法是使用以下代码:

$('#myTable tbody').html('');
于 2014-10-28T02:20:34.953 回答