首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否有可能在不循环的情况下在父节点中获取元素的数值索引?

是否有可能在不循环的情况下在父节点中获取元素的数值索引?
EN

Stack Overflow用户
提问于 2011-01-11 01:42:52
回答 2查看 28.2K关注 0票数 43

通常我是这样做的:

代码语言:javascript
复制
for(i=0;i<elem.parentNode.length;i++) {
  if (elem.parentNode[i] == elem) //.... etc.. etc...
}
EN

回答 2

Stack Overflow用户

发布于 2017-02-20 14:20:13

选项#1

您可以使用Array.from() method将元素的HTMLCollection转换为数组。在那里,您可以使用原生.indexOf() method来获取索引:

代码语言:javascript
复制
function getElementIndex (element) {
  return Array.from(element.parentNode.children).indexOf(element);
}

如果需要节点索引(与元素的索引相反),则使用childNodes property替换children property

代码语言:javascript
复制
function getNodeIndex (element) {
  return Array.from(element.parentNode.childNodes).indexOf(element);
}

选项#2

可以使用.call() method调用数组类型的本机.indexOf()方法。如果查看源代码,就会发现这就是在jQuery中实现.index() method的方式。

代码语言:javascript
复制
function getElementIndex(element) {
  return [].indexOf.call(element.parentNode.children, element);
}

同样,使用childNodes属性代替children属性:

代码语言:javascript
复制
function getNodeIndex (element) {
  return [].indexOf.call(element.parentNode.childNodes, element);
}

选项#3

您还可以使用spread operator

代码语言:javascript
复制
function getElementIndex (element) {
  return [...element.parentNode.children].indexOf(element);
}
代码语言:javascript
复制
function getNodeIndex (element) {
  return [...element.parentNode.childNodes].indexOf(element);
}
票数 29
EN

Stack Overflow用户

发布于 2018-07-11 19:23:36

试试这个:

代码语言:javascript
复制
let element = document.getElementById("your-element-id");
let indexInParent = Array.prototype.slice.call(element.parentNode.parentNode.children).indexOf(element.parentNode));
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4649699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档