У NodeList нет метода indexOf (element)? Итак, как я могу получить индекс элемента?
Как получить индекс элемента в javascript?
Ответ 1
Перебирая элементы и проверяя, совпадают ли они.
Общий код, который находит индекс элемента в его родительской коллекции 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]);
ОБНОВЛЕНИЕ: Я не могу удалить принятый ответ, но @kennebec ответ ниже гораздо лучше, который я приведу дословно:
Вы можете использовать
Array.prototype.indexOf.call()
вот такlet nodes = document.getElementsByTagName('*'); Array.prototype.indexOf.call(nodes, document.body);
Ответ 2
Вы можете использовать Array.prototype.indexOf.call()
, как этот
let nodes = document.getElementsByTagName('*');
Array.prototype.indexOf.call(nodes, document.body);
Ответ 3
Объект NodeList представляет собой объект, подобный массиву. Поэтому можно "преобразовать" его в массив.
Возможно, это может быть для вас решение.
var arr = Array.prototype.slice.call(yourNodeListObject); // Now it an Array.
arr.indexOf(element); // The index of your element :)
Ответ 4
Просто добавьте одну строку в ваш скрипт:
NodeList.prototype.indexOf = Array.prototype.indexOf; // for IE11
Затем используйте indexOf как обычно:
var index = NodeList.indexOf(NodeElement);