2017-07-07 2 views
0

I ont deux divs comme représenté ci-dessous:indexOf() fonction ne fonctionne pas sur les tableaux

<div class="container"></div> 
<div class="container"></div> 

I a créé un tableau à l'aide de ces deux divs:

var containers = document.querySelectorAll(".container"); 

I a également créé une variable pour représenter la première div:

var div1 = document.querySelectorAll(".container")[0]; 

Lorsque j'utilise indexOf() pour obtenir l'indice de la première div dans le tableau, je reçois un Erreur:

containers.indexOf is not a function

Voici un extrait qui résume mon problème:

var containers = document.querySelectorAll(".container"); 
 
var div1 = document.querySelectorAll(".container")[0]; 
 
containers.indexOf(div1); // returns the error
<div class="container"></div> 
 
<div class="container"></div>

+5

'querySelectorAll' retourne un * NodeList *, pas un tableau. Vous pouvez convertir le NodeList en tableau en appelant 'Array.from (...)'. –

+0

'querySelectorAll' renvoie un' NodeList' qui n'a pas de méthode 'indexOf'. – Li357

+1

Cependant, vous pouvez faire 'Array.prototype.indexOf.call (containers, div1)'. – RobG

Répondre

3

querySelectorAll retourne un NodeList , pas un tableau. Vous pouvez convertir le NodeList en tableau en appelant le Array.from(...). Queryselectorall renvoie la liste des noeuds non actifs.

2

La méthode indexOf n'est pas définie sur cela. Plus d'information est ici

https://developer.mozilla.org/en-US/docs/Web/API/NodeList

Vous pouvez utiliser Array.from() pour convertir en tableau et puis utilisez indexOf

+0

'non-live === mort'? Ou est "statique" plus de PC? ;-) – RobG

+0

C'est ce que disent les documents officiels sur MDN. https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelectorAll –

+0

@RobG c'est plus statique que mort. :) –