查找DOM节点索引
我想find一个给定的DOM节点的索引。 这就像做的反面
document.getElementById('id_of_element').childNodes[K]
我想改为提取K
的值,因为我已经有了对子节点和父节点的引用。 我如何做到这一点?
所有版本的Safari,FireFox,Chrome和IE> = 9的最简单的方式,没有任何框架:
var i = Array.prototype.indexOf.call(e.childNodes, someChildEl);
稍短一点,期望元素在元素中,返回k。
for (var k=0,e=elem; e = e.previousSibling; ++k);
在Justin Dearing的评论之后,我回顾了我的回答,并添加了以下内容:
或者如果你更喜欢“while”:
var k=0, e=elem; while (e = e.previousSibling) { ++k;}
原来的问题是如何find一个现有的DOM元素的索引。 在这个答案上面的两个例子都期望elem是一个DOM元素,并且该元素仍然存在于DOM中。 如果你给它们一个null对象或一个没有previousSibling的对象,它们将会失败。 更傻的办法是这样的:
var k=-1, e=elem; while (e) { if ( "previousSibling" in e ) { e = e.previousSibling; k = k + 1; } else { k= -1; break; } }
如果e为null或者在其中一个对象中缺lesspreviousSibling ,则k为-1。
RoBorg的答案有效…或者你可以尝试…
var k = 0; while(elem.previousSibling){ k++; elem = elem.previousSibling; } alert('I am at index: ' + k);
和原来的海报一样,我正在努力
find给定的DOM节点的索引
但是我只是使用一个点击处理程序,并且只是与其兄弟姐妹有关 。 我不可能最终得到上述工作(因为毫无疑问,我试图在这个元素,但它没有奏效)。
我的解决scheme是使用jQuery和使用:
var index = $(this).parent().children().index(this);
它不需要指定元素的types,即:“h1”或一个id等。
我认为唯一的方法就是循环父母的孩子,直到find自己。
var K = -1; for (var i = myNode.parent.childNodes.length; i >= 0; i--) { if (myNode.parent.childNodes[i] === myNode) { K = i; break; } } if (K == -1) alert('Not found?!');
使用像原型的框架,你可以使用这个:
$(el).up().childElements().indexOf($(el))