2

我有一个对 NodeList 的引用,我只是想将一个函数附加到该对象,以便稍后由脚本的另一个区域调用。

// Quick and dirty hack to obtain a NodeList from given element(s):
var fragment = document.createDocumentFragment(),
    nodeList;
fragment.appendChild(document.getElementById("test").cloneNode(true));

nodeList = fragment.childNodes;
console.log(nodeList);

// How can a method be defined on the nodeList in IE8?
nodeList["someMethod"] = function() { alert("YOU WIN!"); };
nodeList.someMethod();

现场示例:http: //jsfiddle.net/gCwAr/

上述代码适用于以下浏览器:IE9、Chrome、Firefox、Safari、Opera。

我的问题是如何让代码在 IE8 中工作,因为在倒数第二行抛出以下错误:

对象不支持此属性或方法

4

2 回答 2

1

扩展宿主对象(例如 DOM 对象)通常不是一个好主意。只是不要这样做。相反,将 NodeList 包装在您自己的对象中,该对象具有您的额外方法。

于 2012-11-08T11:40:05.903 回答
0

您可以在 IE8 中执行此操作,首先在 DOM 类原型上定义属性,例如:

var nodeList = document.body.childNodes;
// Define a property with the same name on the prototype object first,
// to enable defining the property on the NodeList
NodeList.prototype.myMethod = undefined;
nodeList.myMethod = function () { alert("Method"); };
nodeList.myMethod();
于 2014-05-17T13:12:47.773 回答