151 votes

Pourquoi document.querySelectorAll renvoie-t-il une StaticNodeList plutôt qu'un véritable tableau ?

Cela m'ennuie de ne pas pouvoir le faire. document.querySelectorAll(...).map(...) même dans Firefox 3.6, et je n'ai toujours pas trouvé de réponse, alors j'ai pensé poster la question sur SO à partir de ce blog :

http://blowery.org/2008/08/29/yay-for-queryselectorall-boo-for-staticnodelist/

Quelqu'un connaît-il une raison technique pour laquelle vous ne recevez pas d'Array ? Ou pourquoi une StaticNodeList n'hérite pas d'un tableau de manière à ce que vous puissiez utiliser map , concat etc.

(Si vous ne voulez qu'une seule fonction, vous pouvez faire quelque chose comme NodeList.prototype.map = Array.prototype.map; ...mais encore une fois, pourquoi cette fonctionnalité est-elle (intentionnellement ?) bloquée en premier lieu ?)

3voto

UXML Points 112

Je pense que vous pouvez simplement procéder comme suit

Array.prototype.map.call(document.querySelectorAll(...), function(...){...});

Il fonctionne parfaitement pour moi

0voto

vsync Points 11280

Il s'agit d'une option que je voulais ajouter à la gamme d'autres possibilités suggérées par d'autres personnes ici. Elle n'est destinée qu'à l'amusement intellectuel et est déconseillé .


Juste pour le amusant Voici un moyen de "forcer" les querySelectorAll de s'agenouiller et de s'incliner devant vous :

Element.prototype.querySelectorAll = (function(QSA){
    return function(){
        return [...QSA.call(this, arguments[0])]
    }
})(Element.prototype.querySelectorAll);

Maintenant, il est bon de marcher sur cette fonction et de lui montrer qui est le patron. Je ne sais pas ce qui est le mieux, créer une toute nouvelle fonction. nommée et que tout votre code utilise ce nom bizarre (un peu à la manière de jQuery) ou surcharger la fonction comme ci-dessus une fois pour que le reste de votre code puisse toujours utiliser le nom original de la méthode DOM querySelectorAll .

  • Une telle approche permettrait d'éviter l'utilisation éventuelle de sous-méthodes

Je ne le recommanderais en aucun cas, à moins que vous n'en ayez vraiment rien à faire.

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