93 votes

En JavaScript, quelle est la meilleure façon de convertir une NodeList en tableau ?

La méthode DOM document.querySelectorAll() (et quelques autres) renvoient un NodeList .

Pour opérer sur la liste, par exemple à l'aide de forEach() le NodeList doit d'abord être converti en un Array .

Quelle est la meilleure façon de convertir le NodeList à un Array ?

1 votes

Je pense que la valeur de retour de querySelectorAll() est techniquement appelée une NodeList.

0 votes

De mdm "elementList = document.querySelectorAll(selectors) ;"

1 votes

ElementList est le nom de la variable. Cette même page décrit comment le type de la valeur de retour est une NodeList.

10voto

nfechner Points 9402

Faut-il que ce soit forEach ? Vous pourriez simplement utiliser un for boucle pour itérer sur la liste :

for (var i = 0; i < elementList.length; i++) {
    doSomethingWith(elementlist.item(i));
}

4voto

Rene Stefancik Points 31

Eh bien, ça marche pour moi aussi :

const elements = Object.values( document.querySelector(your selector here) )

Object.values() renvoie à Array des valeurs d'un objet donné. NodeList est un objet, comme tout ce qui est en JS.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values

Mais il n'est pas compatible avec IE, donc je suppose que Array.prototype.*array_method*.call(yourNodeList) est la meilleure option. Avec cette méthode, vous pouvez invoquer n'importe quelle méthode de tableau sur votre fichier NodeList

2voto

Amr.Ayoub Points 419

Cela a fonctionné avec moi dans ES6

supposons que vous ayez une liste de noeuds comme celle-ci

<ul>
  <li data-time="5:17">Flexbox video</li>
  <li data-time="8:22">Flexbox video</li>
  <li data-time="3:24">Redux video</li>
  <li data-time="5:17">Flexbox video</li>
  <li data-time="7:17">Flexbox video</li>
  <li data-time="4:17">Flexbox video</li>
  <li data-time="2:17">Redux video</li>
  <li data-time="7:17">Flexbox video</li>
  <li data-time="9:54">Flexbox video</li>
  <li data-time="5:53">Flexbox video</li>
  <li data-time="7:32">Flexbox video</li>
  <li data-time="2:47">Redux video</li>
  <li data-time="9:17">Flexbox video</li>

</ul>

const items = Array.from(document.querySelectorAll('[data-time]'));

console.log(items);

2voto

braed Points 165

J'utilise le modèle suivant parce que je pense qu'il est le plus facile à lire :

const elements = document.getElementsByClassName('element');
[...elements].forEach((element) => {
   // code
});

2voto

Redu Points 11722

L'ES6 permet d'utiliser des méthodes cool comme var nodeArray = Array.from(nodeList) mais mon préféré est le nouvel opérateur de diffusion.

var nodeArray = Array(...nodeList);

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