通常我是这样做的:
for(i=0;i<elem.parentNode.length;i++) {
if (elem.parentNode[i] == elem) //.... etc.. etc...
}
发布于 2017-02-20 14:20:13
选项#1
您可以使用Array.from()
method将元素的HTMLCollection
转换为数组。在那里,您可以使用原生.indexOf()
method来获取索引:
function getElementIndex (element) {
return Array.from(element.parentNode.children).indexOf(element);
}
如果需要节点索引(与元素的索引相反),则使用childNodes
property替换children
property
function getNodeIndex (element) {
return Array.from(element.parentNode.childNodes).indexOf(element);
}
选项#2
可以使用.call()
method调用数组类型的本机.indexOf()
方法。如果查看源代码,就会发现这就是在jQuery中实现.index()
method的方式。
function getElementIndex(element) {
return [].indexOf.call(element.parentNode.children, element);
}
同样,使用childNodes
属性代替children
属性:
function getNodeIndex (element) {
return [].indexOf.call(element.parentNode.childNodes, element);
}
选项#3
您还可以使用spread operator
function getElementIndex (element) {
return [...element.parentNode.children].indexOf(element);
}
function getNodeIndex (element) {
return [...element.parentNode.childNodes].indexOf(element);
}
发布于 2018-07-11 19:23:36
试试这个:
let element = document.getElementById("your-element-id");
let indexInParent = Array.prototype.slice.call(element.parentNode.parentNode.children).indexOf(element.parentNode));
https://stackoverflow.com/questions/4649699
复制相似问题