2010-09-23 28 views

Odpowiedz

2

Przez powtarzanie elementów i sprawdzanie, czy pasuje.

Kod ogólny, który znajduje indeks elementu w jego kolekcji rodziców childNodes.

function index(el) { 
    var children = el.parentNode.childNodes, 
     i = 0; 
    for (; i < children.length; i++) { 
     if (children[i] == el) { 
      return i; 
     } 
    } 
    return -1; 
} 

Zastosowanie:

// should return 4 
var idx = index(document.body.childNodes[4]); 
+1

jest jakiś powód konstrukcja NodeList nie mieć operację IndexOf? – amwinter

+2

użyj Array.prototype.indexOf.call (NodeList, element) – anandaravindan

8

liście węzłów Objet Przedmiotem tablicowej. Więc możliwe jest "przekształcenie" go w Tablicę.

Może to być rozwiązanie dla Ciebie.

var arr = Array.prototype.slice.call(yourNodeListObject); // Now it's an Array. 
arr.indexOf(element); // The index of your element :) 
+0

lub 'let arr = Array.from (yourNodeListObject)' jeśli używasz [ES6] (https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Global_Objects/Array/from). – boris

29

Można użyć Array.prototype.indexOf.call() jak ten

let nodes = document.getElementsByTagName('*'); 
Array.prototype.indexOf.call(nodes, document.body); 
+0

Uratowałeś mnie. Dzięki! –

Powiązane problemy