Как получить индекс элемента в javascript?

У NodeList нет метода indexOf (element)? Итак, как я могу получить индекс элемента?

Ответ 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);