javascript splice()导致"arrayName.splice()不是函数"错误

Dea*_*ean 4 javascript arrays

我试图从包含表单中的输入字段的数组中删除某些值:

allFields = theForm.getElementsByTagName("INPUT");

for(j = 0; j < allFields.length; j++) {
    if(allFields[j].className == "btn" || allFields[j].className == "lnk") {
        allFields.splice(j,1);
    }
}
Run Code Online (Sandbox Code Playgroud)

它会导致错误.Firebug显示以下错误,并且脚本不起作用.

allFields.splice不是一个函数

这也发生在我尝试过的任何其他Array方法中.我怎样才能解决这个问题?

Lek*_*eyn 6

allFields不是数组,而是a NodeList.

如果要删除元素,请执行反向循环并使用removeChild:

var allFields = theForm.getElementsByTagName("input");
for(var j=allFields.length-1; j>=0; j--){
    if(allFields[j].className == "btn" || allFields[j].className == "lnk"){
        allFields[j].parentNode.removeChild(allFields[j]);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我不知道.为什么它必须是反向循环?是否可以使用allFields.removeChild删除子项(allFields [j])?? (2认同)
  • 如果删除节点,则循环将跳过下一个节点.那是因为NodeList是动态的.这个故事也适用于数组. (2认同)