2010-09-23 2 views

ответ

2

Итерацией по элементам и проверкой соответствия.

Общий код, который находит индекс элемента внутри его родителей. childNodes коллекция.

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

Использование:

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

есть дизайн причина Нодлист не операция IndexOf? – amwinter

+2

использовать Array.prototype.indexOf.call (NodeList, element) – anandaravindan

8

Нодлист Objet является массив типа объекта. Таким образом, можно «преобразовать» его в массив.

Возможно, это может быть решение для вас.

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

или 'let arr = Array.from (yourNodeListObject)', если вы используете [ES6] (https://developer.mozilla.org/en-US/ документы/Web/JavaScript/Справка/Global_Objects/Array/с). – boris

29

Вы можете использовать Array.prototype.indexOf.call() как этот

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

Сохранено мной. Благодаря! –

Смежные вопросы