2010-02-19 197 views
9

我正在使用jQuery,并有一个包含几百行的表元素。我想删除所有的行,然后添加一组新的行。我通过调用remove来完成,然后追加到父元素上。什么是从IE中删除DOM元素的最快方法?

我追加的逻辑是相当快的,并遵循这里给出的建议是:http://www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctly

但是,单呼,除去需要5倍,只要追加。清除dom元素的孩子的最快方法是什么?

编辑:这里是我使用的代码的压缩版本:

var table = $('#mytable'); 
$('tbody', table).remove(); 
table.append(tBodyContents.join('')); 

tBodyContents是一个字符串数组,该组合将形成在TBODY的行的的HTML时。

+0

你能告诉我们你的代码的提示? – Sampson 2010-02-19 19:20:57

+0

你可以发布你用来删除所有行的代码吗? – SBUJOLD 2010-02-19 19:22:12

+0

把它放在那里;对不起,我以前没有收录它! – bluemoo 2010-02-19 19:25:14

回答

6
function emptyElement(element){ 
    var i = element.childNodes.length; 
    while(i--){ 
    element.removeChild(element.lastChild); 
    } 
} 

这个实际上比innerHTML技巧快,可以更快,取决于您的浏览器。有几个测试在jsperf上使用类似的功能,会给你一些基准...

+2

例如http://jsperf.com/jquery-empty-vs-html/14 – 2013-02-05 14:22:56

+0

我不确定为什么接受的答案是.html(''),而这实际上是一个更快的解决方案。由于其性能,将innerHTML或.html()设置为空字符串实际上被认为是不好的做法。要备份我的话,这里是一个测试: http:// jsperf。COM/innerHTML的-VS-removeChild之/ 239 – boyomarinov 2014-11-25 12:33:19

7

我通常做

$('#myTableToEmpty').html(''); 

然后在需要的地方重新添加行。

+0

可能比$('#myTableToEmpty tr')快。remove() – ryanulit 2010-02-19 19:28:54

+0

我也做同样的事情。它简单快捷。 +1 – 2010-02-19 19:31:18

+3

此方法是否清除绑定事件和jQuery数据?这是(根据文档)remove()函数所做的一件事。编辑:从文档 - *除了元素本身,所有绑定的事件和与元素相关的jQuery数据都被删除。* – user113716 2010-02-19 19:36:01

1

如果速度是非常非常重要的,你最好使用的innerHTML的。 $('tbody',table)[0] .innerHTML ='';

我个人会忽略jQuery全部,给身体一个ID,只是去document.getElementById('id')。innerHTML =''选项。而且,仍然使用jQuery进行添加。

+0

当我尝试这样做时,我收到“未知运行时错误”。我会看看我能否弄清楚我做错了什么。 – bluemoo 2010-02-19 20:29:17

0

我确认innerHTML是非常快速的从单个元素中删除大量的html。 在我的情况:

$('#main').html(''); // --> approx 5-6 seconds 

$('#main').innerHTML=''; // --> a few milliseconds 

感谢

相关问题