沒有涉及太多細節,我正在使用javascript清理表格內部的空白。我需要刪除大量的文本節點。這似乎是我的腳本中涉及到IE9的瓶頸。從DOM中有效刪除文本節點
以下所有方法都可以完成這項工作,但會導致巨大的減速。
domNode.removeNode(true);
domNode.nodeValue = "";
domNode.parentNode.removeChild(domNode);
有沒有辦法做一個批量刪除或一種方法來隱藏他們在dom或這樣的。快一點。
我也試過這對textnodes:
domNode.innerHTML = '';
雖然它迅速執行,該textnodes似乎是由它矢志不渝。
此外,我需要保留事件綁定,因此整個表上的.innerHTML替換看起來並不是一個真正的選項。雖然它運行速度快了5倍。
更新: 上建議的解決方案粗糙基準:
//around 480ms
stripWhitespaceTextNodes(domNode);
//around 640ms
parent.removeChild(domNode);
stripWhitespaceTextNodes(domNode);
parent.insertBefore(domNode, nextNode);
//around 700ms
tables[i].style.visibility = 'hidden';
stripWhitespaceTextNodes(domNode);
tables[i].style.visibility = 'visible';
//around 1140ms
tables[i].style.display = 'none';
stripWhitespaceTextNodes(domNode);
tables[i].style.display = 'block';
這是在4桌進行具有1500行的一個表。
stripWhitespaceTextNodes()函數的關鍵是刪除文本節點,這似乎是瓶頸,這是我對它的各種嘗試。
domNode.parentNode.removeChild(domNode);
domNode.removeNode(true);
domNode.nodeValue = ""; // <-- CURRENTLY THIS ONE IS THE TOP RUNNER
domNode.replaceWholeText('');
domNode.deleteData(0, domNode.length);
var txtNode = document.createTextNode("");
domNode.parentNode.replaceChild(txtNode, domNode);
parent.insertBefore(domNode, nextNode);
//fast but doesn't work
domNode.innerHTML = '';
我會對細節感興趣。爲什麼你需要從表格中刪除whitespace-textNodes,它們不會影響顯示? – Bergi
他們在IE9中做。有關這些詳細信息,請參閱此問題。 http://stackoverflow.com/questions/9895095/wanted-ie9-table-cell-ghost-alive-and-without-js至於爲什麼我無法修復它在服務器端,這是另一個長長的故事。 .. – Serhiy
您是否嘗試過使用domNode.innerText =''或domNode.textContent =''來刪除文本節點? – tjscience