删除具有特定类名的元素(使用javascript)?

时间:2012-01-25 02:26:13

标签: 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]);
        }

}

2 个答案:

答案 0 :(得分:4)

从结尾开始:

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

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

答案 1 :(得分:4)

getElementsByClassName方法返回一个活动节点列表,因此使用索引对其进行迭代并同时修改列表(通过从文档中删除节点)意味着当删除元素时,列表会被修改所以从一个包含10个成员的列表开始,只有一个被删除后才会有9个。如果删除项目0,则所有项目都会重新编入索引,因此项目1现在为0,2为1,依此类推为8(因为只剩下9项)。

正如Molle博士所指出的那样,你可以通过从最后遍历列表来避免这个问题。

你可以完全避免使用反击:

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

请注意,在使用NodeList时,每次删除元素时,浏览器都必须重新生成列表(无论使用上述哪种方法),因此nodeList较大时此方法可能会很慢。

你可以通过首先将列表转换为数组(简单地遍历它)来避免这种情况,在这种情况下,您可以使用递增或递减计数器,而不必担心列表中缺少成员(因为它在未修改时)元素从文档中删除。)