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

纯JavaScript获取<li>元素data-name属性时返回null问题求助

问题排查与解决办法

嘿,一眼就看到问题啦:你在JavaScript里尝试获取的是name属性,但你的HTML元素上实际定义的是**data-name自定义数据属性**,这就是控制台一直返回null的原因!


为啥会出现这个问题?

你的<li>标签根本没定义name属性,浏览器找不到这个属性,所以getAttribute('name')自然就返回null了。而你真正要拿的是HTML5标准的自定义数据属性data-name。

两种快速修复方案

方案1:修正getAttribute的属性名

直接把属性名改成data-name就行,最简单直接:

const meetTheTeamSectionNames = document.querySelectorAll('.team__names li');
Array.from(meetTheTeamSectionNames).forEach(name => {
  name.addEventListener('click', function(e) {
    const nameMe = e.target.getAttribute('data-name') // 这里改成data-name
    console.log(nameMe);
  });
});

方案2:用dataset API(更推荐)

HTML5专门给自定义数据属性提供了更优雅的访问方式——dataset对象。你可以直接通过dataset.name来获取data-name的值(data-前缀会被自动去掉,属性名转为驼峰式,这里刚好data-name对应dataset.name):

const meetTheTeamSectionNames = document.querySelectorAll('.team__names li');
Array.from(meetTheTeamSectionNames).forEach(name => {
  name.addEventListener('click', function(e) {
    const nameMe = e.target.dataset.name // 用dataset更简洁直观
    console.log(nameMe);
  });
});

额外小优化建议

如果你的<li>里面以后加了子元素(比如<span>或者<em>),点击子元素时e.target可能会指向子元素而不是<li>本身,导致拿不到data-name。这时候可以用this或者e.currentTarget来确保拿到的是绑定事件的那个<li>:

const meetTheTeamSectionNames = document.querySelectorAll('.team__names li');
Array.from(meetTheTeamSectionNames).forEach(name => {
  name.addEventListener('click', function() {
    const nameMe = this.dataset.name // this直接指向绑定事件的li元素
    console.log(nameMe);
  });
});

这样不管你点击<li>里的任何内容,都能稳稳拿到对应的data-name值~


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:54:02