You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别querySelectorAll选中元素中被点击的项并获取其data-value属性

你的代码没有生效是因为forEach的用法错误:forEach需要接收一个回调函数来处理遍历到的每一个DOM元素,而你直接在forEach的参数里调用了addEventListener,既没有把事件绑定到每个.item元素上,全局调用addEventListener本身也是无效的。


方案1:遍历每个元素绑定监听

let items = document.querySelectorAll('.item')

// 遍历每一个item元素,分别绑定点击事件
items.forEach(item => {
  item.addEventListener('click', function () {
    // 两种读取data-value的方式都可以
    console.log(this.getAttribute('data-value'))
    // 更简洁的dataset写法:
    // console.log(this.dataset.value)
  })
})

如果你用箭头函数作为事件回调,需要用事件对象获取触发元素,因为箭头函数没有独立的this指向:

items.forEach(item => {
  item.addEventListener('click', e => {
    console.log(e.target.dataset.value)
  })
})

方案2:事件委托(更推荐,尤其适合元素多/动态新增元素的场景)

不需要遍历所有元素,只需要给公共父级绑定一次监听即可:

// 你可以把document.body替换成你实际的.item的父容器,性能更好
document.body.addEventListener('click', e => {
  // 判断点击的目标是否是.item元素
  if (e.target.matches('.item')) {
    console.log(e.target.dataset.value)
  }
})

内容的提问来源于stack exchange,提问作者Nikoloz Tukhashvili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:00:01