Вариант № 1
Вы можете использовать метод Array.from()
для преобразования HTMLCollection
элементов в массив. Оттуда вы можете использовать собственный .indexOf()
метод для получения индекса:
function getElementIndex (element) {
return Array.from(element.parentNode.children).indexOf(element);
}
Если вам нужен индекс узла (в отличие от индекса элемента), то замените свойство children
на свойство childNodes
:
function getNodeIndex (element) {
return Array.from(element.parentNode.childNodes).indexOf(element);
}
Вариант № 2
Вы можете использовать метод .call()
, чтобы вызвать собственный метод .indexOf()
типа массива. Вот как метод .index()
реализован в jQuery, если вы посмотрите на исходный код.
function getElementIndex(element) {
return [].indexOf.call(element.parentNode.children, element);
}
Аналогично, используя свойство childNodes
вместо свойства children
:
function getNodeIndex (element) {
return [].indexOf.call(element.parentNode.childNodes, element);
}
Вариант № 3
Вы также можете использовать оператор распространения :
function getElementIndex (element) {
return [...element.parentNode.children].indexOf(element);
}
function getNodeIndex (element) {
return [...element.parentNode.childNodes].indexOf(element);
}