C'est du moins pour le moment une pure expérimentation, mais je suis curieux: existe-t-il un moyen d'attacher des méthodes (via le prototypage) à des collections d'éléments? J'ai testé le code suivant:Attacher des méthodes chaînées à des collections d'éléments en JavaScript
<div>a</div>
<div>b</div>
<div>c</div>
<script>
NodeList.prototype._ = function(s)
{
for (x = 0; x < this.length; x++)
{
eval('this[x]' + '.' + s);
}
return this;
}
document.getElementsByTagName('div')._("style.backgroundColor = 'red'")._('innerHTML += x');
</script>
À l'heure actuelle, il fonctionne parfaitement dans Opera; Tout comme on peut s'y attendre, la méthode _ est appelée sur tous les éléments div, puis eval() la chaîne qui lui est passée sur chaque élément à son tour. Notez que la méthode _ permet le chaînage, et cela a été démontré, en appelant _ pour ajouter la variable d'itération x prédite au innerHTML de chaque élément.
Maintenant, deux questions ...
d'abord, est-il une meilleure façon d'aller à ce sujet? Je ai pour le plus longtemps souhaité que je pouvais simplement faire document.getElementsByTagName('div').style.backgroundColor = "red";
, mais hélas, il n'a tout simplement pas encore été. C'est pourquoi je le fais en premier lieu, et pourquoi j'ai nommé la méthode si succinctement; J'essaie de l'imiter le plus possible. Deuxièmement, en supposant que ce soit un bon usage, comment pourrais-je le faire fonctionner dans Firefox? L'équivalent de NodeList
de ce navigateur est HTMLCollection
, mais essayer de prototyper ce dernier ne fonctionne tout simplement pas. Suggestions?
Oui, vous n'avez pas besoin eval pour cela. Etant donné que vous n'avez réellement que 2 arguments, pourquoi ne pas les nommer et utiliser arguments [] array? – BYK