JavaScript删除所有带名称的元素

时间:2014-07-06 12:37:27

标签: javascript

我正在尝试使用JavaScript删除所有带有certian名称的元素,但它只删除了第一个元素。

我的代码是:

var ele= document.getElementsByName("javascriptaudio");
for(var i=0;i<ele.length;i++)
{
  ele[i].parentNode.removeChild(ele[i]);
}

谁能告诉我出了什么问题?

由于

4 个答案:

答案 0 :(得分:4)

我没有足够的代表对ÁlvaroG。Vicario发表评论。它起作用的原因是当从DOM中删除元素时,元素将从ele中删除。怪异。

以下代码应该同样有效:

var ele= document.getElementsByName("javascriptaudio");
len = ele.length;
parentNode = ele[0].parentNode;
for(var i=0; i<len; i++)
{
  parentNode.removeChild(ele[0]);
}

答案 1 :(得分:3)

尝试向后移除它们:

var ele = document.getElementsByName("javascriptaudio");
for(var i=ele.length-1;i>=0;i--)
{
    ele[i].parentNode.removeChild(ele[i]);
}

问题是从ele删除元素会移动索引:如果你有5个项目(0到4)并删除项目0,那么你有4个项目,范围从0到3(4变为3,3变为2等;);然后你应该删除第0项,但你的i变量已经增加到1。

答案 2 :(得分:0)

您需要在循环外部保存数组的长度,因为如果将其放在循环条件中,则每次传递都会对其进行求值。这样你就可以获得正确的迭代次数。此外,您需要每次循环删除第一个项目,因为每次传递都会丢失1个项目,因此您将在流程结束时超出范围。

var ele = document.getElementsByName("javascriptaudio");
var elementsCount = ele.length;
for(var i=0;i<ele.length;i++){
    ele[0].parentNode.removeChild(ele[0]);
}

答案 3 :(得分:-3)

尝试以下jQuery代码:

$("[name=javascriptaudio]").remove();