2 votes

JavaScript IE8 : ajouter une fonction à un objet NodeList

J'ai une référence à une NodeList, et je veux simplement attacher une fonction à l'objet pour l'invoquer plus tard par une autre zone du script.

// 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();

Exemple concret : http://jsfiddle.net/gCwAr/

Le code ci-dessus fonctionne dans ces navigateurs : IE9, Chrome, Firefox, Safari, Opera.

Ma question est la suivante comment faire fonctionner le code dans IE8 car l'erreur suivante apparaît à l'avant-dernière ligne :

L'objet ne supporte pas cette propriété ou méthode

1voto

Tim Down Points 124501

L'extension des objets hôtes tels que les objets DOM est généralement une mauvaise idée . Ne le faites pas. Enveloppez plutôt la NodeList dans votre propre objet qui possède votre méthode supplémentaire.

0voto

Dan Phillimore Points 390

Vous pouvez le faire dans IE8, en définissant d'abord la propriété sur le prototype de la classe DOM, par ex :

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();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X