2010-08-26 56 views
4

我试图从包含在表单输入字段的阵列除去某些值:JavaScript的剪接()导致“arrayName.splice()不是一个函数”错误

allFields = theForm.getElementsByTagName("INPUT"); 

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

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

allFields.splice不是函数

这也发生与任何其他阵列方法我尝试。我怎样才能解决这个问题?

回答

6

allFields不是一个数组,而是一个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]); 
    } 
} 
+0

火狐说,这是一个的HTMLCollection,而是根据书“JavaScript权威指南”,David Flanagan着的,这是一个节点列表(第767页)。 – Lekensteyn 2010-08-26 11:56:31

+0

['getElementsByTagName'](http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#method-getElementsByTagName)返回['NodeList'](http:/ /www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-536297177)。 – Gumbo 2010-08-26 11:57:51

+0

那么,那是一个[Firefox中的错误](https://bugzilla.mozilla.org/show_bug.cgi?id=14869)。在Chrome中,document.getElementsByTagName('a')instanceof NodeList'的值为“true”,但Firefox表示“false”。 *编辑:是的,这是一个错误* – Lekensteyn 2010-08-26 12:02:14

相关问题