2010-08-26 49 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

相關問題