2017-07-07 4 views
0

Ich habe zwei divs wie unten gezeigt:indexOf() Funktion arbeiten nicht auf Arrays

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

I erzeugt ein Array mit diesen beiden divs:

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

Ich habe auch eine Variable die darstellen erster div:

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

Wenn ich indexOf() den Index des ersten div in der Anordnung zu bekommen, erhalte ich eine Fehler:

containers.indexOf is not a function

Hier ist ein Ausschnitt einer Zusammenfassung mein Problem:

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' a * NodeList * gibt, kein Array. Sie können die NodeList in ein Array konvertieren, indem Sie 'Array.from (...)' aufrufen. –

+0

'querySelectorAll' gibt eine' NodeList' zurück, die keine 'indexOf' Methode hat. – Li357

+1

Sie können jedoch 'Array.prototype.indexOf.call (containers, div1)'. – RobG

Antwort

3

querySelectorAll gibt ein NodeList, kein Array. Sie können die NodeList in ein Array konvertieren, indem Sie Array.from(...) aufrufen.

2

Queryselectorall gibt eine Nicht-Live-Knotenliste zurück. Die indexOf-Methode ist dafür nicht definiert. Weitere Informationen finden Sie hier

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

Sie könnten Array.from (verwenden), um Array zu konvertieren und dann mit indexOf

+0

'nicht leben === tot? Oder ist "statisch" mehr PC? ;-) – RobG

+0

Das sagen offizielle Dokumente auf MDN. https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelectorAll –

+0

@RobG ist es eher statisch als tot. :) –