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

如何用原生JavaScript获取被点击锚标签的ID?

解决原生JS获取点击锚标签ID的问题

问题原因

你当前的代码中,内联事件onClick="showRecipe()"调用函数时,函数内部的this指向的是全局对象(浏览器中为window),而非触发点击的<a>标签,所以this.id会返回undefined。直接写onClick="showRecipe"无反应是因为内联事件需要明确的调用形式,同时这种写法也无法正确绑定元素上下文。

解决方案1:修改内联事件传递元素本身

修改生成<a>标签的代码,在onClick中把当前元素作为参数传入:

let recipeTitles = function(){
    return data.map(el => `<a onClick="showRecipe(this)" href="#" class="recipeTitles" id="${el.id}"><h2>${el.title}</h2></a>`).join('')
}

document.querySelector('#recipeTitle').innerHTML = recipeTitles()

然后更新showRecipe函数,接收传入的元素参数:

function showRecipe(element) {
    alert(element.id);
    // 后续逻辑可以直接使用element.id,比如调用spoonacular API获取食谱详情
}

解决方案2:使用事件委托(推荐)

这种方法分离了HTML结构与JS逻辑,更符合现代前端开发规范,同时能更好地处理动态生成的元素:

  1. 首先移除内联事件,生成纯净的<a>标签:
let recipeTitles = function(){
    return data.map(el => `<a href="#" class="recipeTitles" id="${el.id}"><h2>${el.title}</h2></a>`).join('')
}

document.querySelector('#recipeTitle').innerHTML = recipeTitles()
  1. 给父元素添加事件监听,通过事件委托捕获子元素的点击事件:
document.querySelector('#recipeTitle').addEventListener('click', function(e) {
    // 找到触发点击的目标<a>标签(即使点击的是内部的<h2>也能通过closest找到父级a)
    const targetRecipeLink = e.target.closest('.recipeTitles');
    if (targetRecipeLink) {
        alert(targetRecipeLink.id);
        // 这里编写后续逻辑,比如用targetRecipeLink.id调用API
        e.preventDefault(); // 阻止a标签默认的跳转行为
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:40:42