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

Vue.js中如何获取HTML Element的id?点击事件返回空或undefined求解

错误原因说明

第一个写法报错原因

你将click事件绑定在<p>标签上,event.currentTarget指向的是事件绑定的元素也就是<p>,而你把id属性写在了子元素<i>上,<p>本身没有设置id,所以输出为空。

第二个写法报错原因

Vue模板中直接写getId(this)时,这里的this指向的是当前Vue组件实例,不是你预期的<i>DOM元素,组件实例上没有id属性,所以返回undefined。


最优解决方案(推荐)

不要依赖DOM属性传值,直接把id作为参数传入方法,完全避开DOM操作问题,还能兼容FontAwesome自动替换<i>为<svg>的场景:

<!-- 静态写死的场景 -->
<p @click="getId(1)" class="trash"><i class="fas fa-trash-alt"></i></p>
<p @click="getId(2)" class="trash"><i class="fas fa-trash-alt"></i></p>
<p @click="getId(3)" class="trash"><i class="fas fa-trash-alt"></i></p>

<!-- v-for循环渲染的场景更简洁 -->
<p v-for="id in 3" :key="id" @click="getId(id)" class="trash">
  <i class="fas fa-trash-alt"></i>
</p>

对应的方法:

getId(id){
  console.log(id); // 直接拿到对应id
}

如果你确实需要通过事件对象获取DOM

把事件绑定到带id的<i>标签上,传入$event即可:

<p class="trash"><i id="1" @click="getId($event)" class="fas fa-trash-alt"></i></p>
getId(event){
  console.log(event.currentTarget.id); // currentTarget就是绑定事件的<i>元素
}

注意:如果你使用的是FontAwesome JS版本,它会自动把<i>标签替换为<svg>标签,原<i>上的id不会同步到新生成的<svg>上,该场景下此方案会失效,推荐用直接传参的方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:45:02