2010-02-19 137 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 

感謝

相關問題