我想刪除具有的「標籤」標籤名稱的所有元素。我有以下代碼。它在某種程度上起作用,但它只能刪除1個標籤。其他5個仍然存在。如何更改代碼以刪除所有「標籤」標籤?
element = document.getElementsByTagName("label");
for (index = 0; index < element.length; index++) {
element[index].parentNode.removeChild(element[index]);
}
我想刪除具有的「標籤」標籤名稱的所有元素。我有以下代碼。它在某種程度上起作用,但它只能刪除1個標籤。其他5個仍然存在。如何更改代碼以刪除所有「標籤」標籤?
element = document.getElementsByTagName("label");
for (index = 0; index < element.length; index++) {
element[index].parentNode.removeChild(element[index]);
}
var element = document.getElementsByTagName("label"), index;
for (index = element.length - 1; index >= 0; index--) {
element[index].parentNode.removeChild(element[index]);
}
當您從文檔中刪除節點,你剛剛從getElementsByTagName()
獲得的節點列表被更新過,以避免揮之不去的引用,所以你應該保持除去第一點,直到沒有剩餘。
var nodes = document.getElementsByTagName("label");
for (var i = 0, len = nodes.length; i != len; ++i) {
nodes[0].parentNode.removeChild(nodes[0]);
}
這裏,緩存nodes.length
的值;否則它會繼續下降,你最終只能刪除一半:)
問題是,document.getElementsByTagName()
返回NodeList
,而不是Array
。當您從NodeList
中的DOM中刪除元素時,NodeList
的內容和長度會更新。因此,當您刪除第一個元素時,NodeList
變短,並且新的第一個元素佔用index
0.因此,在循環中更新index
因此會使您錯過至少一個元素,可能更多取決於結果的長度。
嘗試是這樣的:
var elements = document.getElementsByTagName('label')
while (elements[0]) elements[0].parentNode.removeChild(elements[0])
「問題」 是.getElementsByTagName()
返回直播節點列表。因此,當您移除頭部(第一個)入口時,尾部填滿並且向左移動,可以這麼說。
它不是一個真實的JavaScript數組這將按預期工作。要創建這樣的凍結陣列我們可以去像
var element = Array.prototype.slice.call(document.getElementsByTagName("label"),0);
for (var index = 0, len = element.length; index < len; index++) {
element[index].parentNode.removeChild(element[index]);
}
爲什麼不使用jQuery?然後,它只是
$("label").remove();
我已經扭轉了計數器,因爲如果你增加它,它永遠不會停止:-) – AlfonsoML
@Alfonso感謝您的編輯,這就是我其實是當然的。 :) – Tomalak