我在容器中有一组固定的元素(比如30)。现在,当点击一个元素时,我想在该容器中找出它的索引。
我知道我能做什么:
因此,就性能(速度和内存)而言,上述哪种方式是最佳方式,还是有更好的方法吗?
非常感谢,非常感谢。
答案 0 :(得分:0)
选项5,优于上述所有选项 - 将索引存储为节点上的data-index
属性,并在事件处理程序中检索该属性。
您可以在容器上注册事件处理程序,然后使用“事件冒泡”,而不是在每个节点上注册事件处理程序。由于未在子节点中处理click事件,它将通过DOM冒泡到节点的父节点,您可以使用event.target
来查找最初接收事件的节点。
var container = ... // your container;
container.addEventListener('click', function(ev) {
var target = ev.target; // which child was actually clicked
var index = target.getAttribute('data-index');
...
}, false);
在较新的浏览器上,您可以使用target.dataset.index
代替getAttribute
来电。
答案 1 :(得分:0)
您可以将sourceIndex用于所有IE浏览器,并将previousElementSibling用于其他浏览器。
使用sourceIndex是最简单和最快的,但仅限IE。
如果可以更改DOM节点,则设置属性数据索引不是一个好的解决方案。
previousElementSibling和previousSibling不是很慢。
function getChildrenIndex(ele){
//IE is simplest and fastest
if(ele.sourceIndex){
return ele.sourceIndex - ele.parentNode.sourceIndex - 1;
}
//other browsers
var i=0;
while(ele = ele.previousElementSibling){
i++;
}
return i;
}