Is it possible to get element’s numerical index in its parent node without looping?

function getChildIndex(node) {
  return Array.prototype.indexOf.call(node.parentNode.childNodes, node);
}

This seems to work in Opera 11, Firefox 4, Chromium 10. Other browsers untested. It will throw TypeError if node has no parent (add a check for node.parentNode !== undefined if you care about that case).

Of course, Array.prototype.indexOf does still loop, just within the function call. It’s impossible to do this without looping.


Note: If you want to obtain the index of a child Element, you can modify the function above by changing childNodes to children.

function getChildElementIndex(node) {
  return Array.prototype.indexOf.call(node.parentNode.children, node);
}

Leave a Comment