javascript - 如何获取点击的子节点的索引

标签 javascript

我在 div 容器中有 3 个 span 项目, 当用户单击任何项​​目时 在容器中,因为 div(container) 是 (item) span 元素的父节点。我想获取单击的(item)span 元素的索引。

“如何获取被点击的子节点的索引”

最佳答案

你可以有这样的东西:

document.querySelector("div").onclick = ({target}) => {
  let index = 0;
  while (target = target.previousElementSibling) {
    index++;
  }

  console.log(index);
}

逻辑如下:您向容器(div,假设您只有 span 作为子级,否则您需要过滤 target 以仅对 span 使用react)添加一个事件监听器,或将监听器添加到每个跨度),然后从单击的 span 中获取前一个同级元素,直到没有任何同级元素 - 因此您到达容器的第一个子元素 - 并且您返回迭代计数。

另一种方法可能是:

const getIndex = (target, list) =>
  Array.prototype.indexOf.call(list, target)

const div = document.querySelector("div");
const span = div.querySelectorAll("span");

console.log(getIndex(span[1], span)) // 1

这更通用:它为您提供了类似数组的对象中对象的位置,因此它适用于 NodeList,但不仅限于此。另外,您可以传递任意列表。

用此函数替换前面的示例,您将得到如下内容:

document.querySelector("div").onclick = ({target}) => {
  console.log(getIndex(target, target.parentNode.children));
}

希望对你有帮助!

关于javascript - 如何获取点击的子节点的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58154058/

相关文章:

javascript - IE nextSibling 和 nextElementSibling 不工作

javascript - 在没有浏览器工具栏的新窗口中打开 html 链接

javascript - 远程应用程序服务器后面的 Vuepress 为带有 iframe 的页面提供 404

javascript - undertow 路径模板和资源处理程序

javascript - Knockout js从元素内容初始化可观察值

javascript - Safari 中看似不一致的 onstorage 触发

javascript - 具有多个页面的 PWA

javascript - 500,错误,内部服务器错误 ajax 到 laravel Controller

javascript - 切片发生在代码中,但不会在 UI 中更新

javascript - Javascript 函数只运行一次