2010-09-23 23 views

Respuesta

2

iterando sobre los elementos y comprobando si coincide.

Código genérico que encuentra el índice del elemento dentro de la colección de sus padres childNodes.

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

Uso:

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

hay una razón diseño de la lista de nodos no tiene una operación indexOf? – amwinter

+2

use Array.prototype.indexOf.call (NodeList, element) – anandaravindan

8

El objet NodeList es un objeto Array-similares. Por lo tanto, es posible "convertirlo" en una matriz.

Quizás puede ser una solución para usted.

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

o 'let arr = Array.from (yourNodeListObject)' si está utilizando [ES6] (https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Global_Objects/Array/from). – boris

29

Puede utilizar Array.prototype.indexOf.call() como esto

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

Me salvó. ¡Gracias! –

Cuestiones relacionadas