2017-08-31 111 views
0

我期待獲得具有特定標記的元素列表,以及是否存在多個循環並移除其他元素。刪除重複的頁面元素 - Javascript

目前我做的:

if (document.getElementsByName("description")[0]) { 
    document.getElementsByName("description")[0].setAttribute("content", "My Description"); 
} else { 
    var meta = document.createElement('meta'); 
    meta.name = "description"; 
    meta.content = "My Description"; 
    document.getElementsByTagName('head')[0].appendChild(meta); 
} 

但我想刪除任何東西,是第一要素之後?我會怎麼做?

+0

是你的問題的循環或者是有關如何刪除元素?你試圖解決這個問題? –

回答

1

,你可以這樣做:

[...document.getElementsByTagName('span')].slice(1).forEach(e=>e.parentNode.removeChild(e)); 
[...document.getElementsByTagName('div')].slice(1).forEach(e=>e.parentNode.removeChild(e)); 

首先選擇與特定標籤名的所有元素。將它轉換爲一個數組(在這種情況下使用擴展運算符),也可以使用[].slice.call(...)。之後,可以對該數組元素調用切片,並從該數組中移除第一個元素,循環遍歷元素並將其移除。 :)

編輯解決方案,適合初學者。

var elements = document.getElementsByTagName('span'); 
for(var i=elements.length-1;i>0;i--) 
    elements[i].parentNode.removeChild(elements[i]); 
+0

對於初學者的解決方案將無法正常工作,'getElementsByTagName'返回一個實時的HTMLCollection,所以一旦元素從DOM中移除,它也將從'elements'中移除,因此如果你這樣做,你將跳過多個元素辦法。 –

+0

你太對了@ t.niese。我的錯。我修好了它。現在它按預期工作。我記得這個問題太遲了,忘了修復它。感謝您指出這一點 –

0

如果你想砍描述後什麼[0]頭,你可以使用 「document.getElementsByTagName [ 「頭」] =的innerHTML 「」;」

如果你只想要削減任何描述標籤,使用

var tags = document.getElementsByTagName('description'); 
for(i=0; i<tags.length; i++){ 
    tags[i].remove(); 
} 
+0

您有沒有嘗試過您的建議?首先,這不會運行,因爲'document.getElementsByTag ['description']'會拋出'無法讀取未定義的屬性描述。如果你想將它改爲'document.getElementsByTagName('description')',那麼它仍然不起作用,因爲'for .. in'會迭代'length'。 'getElementsByTagName'返回一個實時的HTMLCollection,所以你會跳過元素,並且你將訪問不再存在的鍵。 –

+0

是的,我沒有注意到我正在寫什麼,雖然找到了解決方案,但我立即糾正了它。 – Chr