我正在尝试使用JavaScript删除所有带有certian名称的元素,但它只删除了第一个元素。
我的代码是:
var ele= document.getElementsByName("javascriptaudio");
for(var i=0;i<ele.length;i++)
{
ele[i].parentNode.removeChild(ele[i]);
}
谁能告诉我出了什么问题?
由于
答案 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();