2012-09-19 53 views
3

這:如果頁面上有多個warningmessage元素,則document.getElementsByClassName('warningmessage').remove();不起作用。在多個元素上使用remove()

我該如何刪除該類的所有元素?我必須使用for each嗎?是不是有一個命令deleteall()?

感謝您的提示!

+0

是你使用任何框架?因爲在dom節點上沒有方法刪除? – sdepold

+1

'.remove()'是jQuery語法,如果您使用的是jQuery,則可以執行'$('。warningmessage')。remove()'來移除所有實例。 –

+0

不使用jquery。我怎麼會寫這個「正常」的JavaScript? – cmplieger

回答

6

用普通的JavaScript,你可以這樣做:

var nodes = document.getElementsByClassName('warningmessage'); 
for(var i = 0; i < nodes.length; i++){ 
    nodes[i].parentNode.removeChild(nodes[i]); 
} 

所以,你首先會獲取節點上,您有興趣,後來遍歷並將其從父母身上移除。

可悲的是沒有forEach方法NodeList。但是,你可以這樣:

var nodes = document.getElementsByClassName('warningmessage'); 
[].forEach.call(nodes, function (node) { 
    node.parentNode.removeChild(node); 
}); 
+1

我喜歡2e方法的外觀:p。超酷! – cmplieger

+1

請注意,如果存在嵌套元素,可能無法獲得所有元素:http://jsfiddle.net/nnnnnn/6ZYkk/ – nnnnnn

+0

是否需要?我實際上會說,嵌套了相同類名的元素有點奇怪。但是我可以看到一些用例。 – sdepold

2

這將使用JQuery是超級簡單:

$('.warningmessage').remove(); 

但它並不難,當你做沒有。 getElementsByClassName可以返回項目的節點列表。所以你只需要遍歷列表並刪除每個項目:

var list = document.getElementsByClassName("warningmessage"); 
for(var i = list.length - 1; i >= 0; i--) 
{ 
    var n = list[i]; 
    n.parentNode.removeChild(n); 
} 
+0

nope沒有jquery :) – cmplieger

+0

然後,你將不得不使用沒有JQuery的解決方案,這只是一個簡單的循環。 – GolezTrol

6

您需要使用循環。以下代碼顯示瞭如何在「普通」javascript中編寫代碼。

var elements = document.getElementsByClassName('warningmessage'), 
    element; 
while (element = elements[0]) { 
    element.parentNode.removeChild(element); 
} 

The working demo.

+0

如果嵌套元素使父_and_(grand)子元素(ren)具有該類,這是否會工作? – nnnnnn

+0

@nnnnnn是的,它應該工作。 – xdazz

+0

我想到的是父母碰巧在孩子面前被除去的情況:是不是會把孩子帶走?或不?如果是這樣,那會弄亂循環計數器... – nnnnnn

0

你可以試試這個

var elms= document.getElementsByClassName('warningmessage'); 
while(elms.length>0){ 
    for(var i = 0; i < elms.length; i++){ 
     elms[i].parentNode.removeChild(elms[i]); 
    } 
}​ 

http://jsfiddle.net/gBwjA/

0

我以前有這個問題,我在此算法結束。

function removeElement(target) { 
    if(target.hasOwnProperty('length')) { 
     for(i=0; i<target.length; i++) { 
      removeElement(target[i]); 
     } 
    } else { 
     target.parentNode.removeChild(target); 
    } 
} 

然後調用這樣的功能:

removeElement(document.getElementById('the-id')); 

,或者如果你想刪除元素的HTML集合然後調用這樣的功能:

removeElement(document.getElementsByTagName('tag-name')); 
相關問題