2010-11-11 49 views
1

我已經寫了一些JavaScript代碼。它以這種方式增加了新的功能節點列表類型:不能通過簡單的JavaScript原型的方法

NodeList.prototype.forEach = function(func) { 
var len = this.length 
for(var i=0;i<len;i++) func(this[i]) 
} 

它用於其他地方那樣:

document.getElementsByTagName("fieldset").forEach(disappearFields) 

一切都非常簡單。

它工作在鉻不錯,但火狐提供了一個錯誤:

document.getElementsByTagName("fieldset").forEach is not a function [Break on this error] document.getElementsByTagName("fieldset").forEach(disappearFields)

disappearFields是短暫的功能:

function disappearFields(what) { 
what.style.display = "none" 
} 

我也曾找過谷歌的任何幫助,但根據這些信息,我的代碼應該好好工作。我自己無法應付這種情況。任何幫助將不勝感激。

+1

我會建議你避免擴展DOM,你會發現很多問題,給看看這篇文章:這有什麼錯擴展DOM(http://perfectionkills.com/whats-wrong-with- extend-the-dom /) – CMS 2010-11-11 21:07:42

回答

2
HTMLCollection.prototype.forEach = function(func) { 
var len = this.length 
for(var i=0;i<len;i++) func(this[i]) 
} 

火狐識別document.getElementsByTagName("fieldset")爲的HTMLCollection

https://developer.mozilla.org/en/DOM/HTMLCollection

我認爲Safari瀏覽器將其識別爲一個節點列表和IE的只是一個對象。

+1

Safari會將其識別爲NodeList。 Chrome和Safari都是WebKit瀏覽器,所以這是有道理的。 – benw 2010-11-11 21:06:17

+1

我不知道爲什麼,但我的「火狐」不接受你的解決方案。我修改了Object的原型,現在沒問題。也許iceweasel - 基於Firefox的debian瀏覽器 - 工作不同。 – 2010-11-11 22:18:18