簡體   English   中英

刪除具有特定類名的元素(使用javascript)?

[英]Delete elements with a particular class name (using javascript)?

我試圖刪除具有特定類名的元素,但是它不起作用。 知道為什么嗎?

function delete_elems(){
    var my_elems = document.getElementsByClassName("my_elem");
        for(k=0; k<my_elems.length; k++){
            my_elems[k].parentElement.removeChild(my_elems[k]);
        }

}

我也嘗試過:

function delete_elems(parentElem){
    var my_elems = document.getElementsByClassName("my_elem");
        for(k=0; k<my_elems.length; k++){
            parentElem.removeChild(my_elems[k]);
        }

}

從結尾開始:

for(k=my_elems.length-1;k>=0; --k)

http://jsfiddle.net/doktormolle/fDNqq/

getElementsByClassName方法返回活動節點列表,因此使用索引對其進行迭代,並同時修改列表(通過從文檔中刪除節點),這意味着隨着元素的刪除,列表也會被修改,因此從列表開始10位成員中只有1位被刪除。 如果刪除項目0,則所有項目都重新索引,因此項目1現在為0,2為1,依此類推,直到8(因為只剩下9)。

正如Molle博士所指出的,您可以通過從頭開始遍歷列表來避免此問題。

您可以完全避免反擊:

var el;
while ((el = my_elems[0])) {
  el.parentNode.removeChild(el);
}

請注意,在使用NodeList時,每次刪除元素時,瀏覽器都必須重新生成列表(無論使用哪種方法),因此在nodeList大的情況下此方法可能會很慢。

您可以通過先將列表轉換為數組(簡單地對其進行迭代)來避免這種情況,在這種情況下,您可以使用遞增或遞減計數器,而不必擔心列表中的成員丟失(因為刪除元素時它不會被修改)從文檔中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM