给ul添加click事件监听,当点击子Li时如何获取是点了每几个子元素?

作者站长头像
站长
· 阅读数 8

要求原生js方法

我的代码

ULobj.addEventListener('click', 方法名.bind(this, json参数字符串 ));
回复
1个回答
avatar
test
2024-06-29

你打印一下绑定事件的 event 你就知道了,可以从 Event.target 上面获取到对最初分发事件的对象的引用。但是我找了一圈没有找到元素下标相关的信息,所以如果可以的话,可以直接在 li 元素上面绑定一下自定义的 index 属性,然后去获取:

<ul id="demo">
  <li index="1">one</li>
  <li index="2">two</li>
</ul>
<script>
const el = document.getElementById("demo");
el.addEventListener("click", (event) => {
 console.log(`Clicked li index: ${event.target.attributes.index.value}`);
});
</script>

但是这样我觉得有点怪怪的,去问了一下GPT有什么其他的方式,但是回答更简单粗暴,直接用 querySelectorAll 获取到全部 li 元素之后通过 indexOf 来获取下标信息……


<ul id="demo">
  <li index="1">one</li>
  <li index="2">two</li>
</ul>
<script>
const el = document.getElementById("demo");
el.addEventListener("click", (event) => {
  const clickedLi = event.target;
  const liElements = Array.from(el.querySelectorAll('li'));
  const clickedIndex = liElements.indexOf(clickedLi);
  console.log(`Clicked li index: ${clickedIndex}`);
});
</script>
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容