jquery - 从非常大的表中删除所有行的最快方法

mor*_*des 87 javascript jquery dom

我认为这可能是一种快速删除非常大的表(3000行)内容的方法:

$jq("tbody", myTable).remove();
Run Code Online (Sandbox Code Playgroud)

但是在firefox中完成大约需要5秒钟.我做的事情是愚蠢的(除了尝试将3000行加载到浏览器中)?有更快的方法吗?

Seb*_*Seb 202

$("#your-table-id").empty();
Run Code Online (Sandbox Code Playgroud)

这和你一样快.

  • 是的,嗯...... HTML不是为了在页面中显示3k行而创建的:)你能不能想到任何分页解决方案?那样会更快.当然它需要更多的工作,但它将是一个更丰富的用户体验. (10认同)
  • 这个很好.问题是这也将删除表头. (6认同)
  • 这将删除表中的所有内容,包括标题。我假设 @morgancodes 想要删除内容,也就是行,而不是标题。对于后来发现这个问题的人来说,解决方案是“$('#mytable tbody').empty();”。这确保只有 tbody 被清空。 (6认同)
  • 删除标题:( (2认同)

gra*_*vic 78

最好避免任何类型的循环,只需直接删除所有元素,如下所示:

$("#mytable > tbody").html("");
Run Code Online (Sandbox Code Playgroud)

  • 对我来说很好的解决方案,因为它不会删除表的标题.谢谢! (8认同)
  • `html("")`在内部调用`empty()` (6认同)

小智 11

$("#myTable > tbody").empty();
Run Code Online (Sandbox Code Playgroud)

它不会触及标题。


Dre*_*rew 5

使用分离比这里的任何其他答案要快很多:

$('#mytable').find('tbody').detach();
Run Code Online (Sandbox Code Playgroud)

不要忘了将tbody元素放回表中,因为detach删除了它:

$('#mytable').append($('<tbody>'));  
Run Code Online (Sandbox Code Playgroud)

另请注意,说话时的效率$(target).find(child)语法比快$(target > child)。为什么? 嘶嘶声!

清空3,161表格行所用的时间

使用Detach()方法 (如上面的示例所示):

  • Firefox:0.027秒
  • 铬:0.027秒
  • 边缘:1.73秒
  • IE11:4.02s

使用empty()方法:

  • Firefox:0.055秒
  • 铬:0.052s
  • 边缘:137.99秒(可能会冻结)
  • IE11:冻结,再也不会返回