获取目标元素的(数字)dom层次结构javascript

Ran*_*all 1 javascript dom

请不要使用图书馆解决方案,但如果您知道有这样的解决方案,我很高兴看看他们是如何做到这一点的.并不十分关注后备和跨浏览器支持.

我有一个层次结构(将改变):

<body>
    <div></div>
    <div>
        <div></div>
        <div></div>
        <div>
            <a>Click Me!</a>
        </div>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

我有一个事件监听器<a>Click Me!</a>并返回一个事件对象.那很有用.YEY!

我想要event.targetdom层次数字索引.基本上,[0][1][2][0](虽然它可能会以数组的形式返回[0,1,2,0],但这对我来说没问题).

我知道这可以通过迭代父元素来完成.如果可能的话,我试图避免这种迭代.

编辑 将我的上次编辑重写为白痴行为.

Chr*_*phe 5

在没有显式迭代的情况下获取索引的方法是使用数组indexOf方法.

这就是它的样子,e是你的活动:

function getIndex(e){
  var t=e.target;
  return Array.prototype.indexOf.call(t.parentNode.childNodes,t);
}
Run Code Online (Sandbox Code Playgroud)

这种技术有很多问题.首先,indexOf仅受最新浏览器的支持.其次,您需要调用技巧,因为NodeList不是数组.第三,childNodes可能返回比预期更多的节点,然后你必须按节点类型进行过滤.

要获得整个层次结构索引,只需在使用parentNode爬上DOM层次结构时重复并重复.

对于记录,e.target也不是跨浏览器,但我看到这是你已经使用的.

[更新]完整代码,使用children而不是childNodes:

function getIndex(e) {
var index=[],
    t=e.target;

while (t!==document.body) {
    index.unshift(Array.prototype.indexOf.call(t.parentElement.children,t));
    t=t.parentElement;
}
return index;
}
Run Code Online (Sandbox Code Playgroud)