导读:本期聚焦于小伙伴创作的《html5如何使用data-*属性传递参数并通过JavaScript操作数据集》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《html5如何使用data-*属性传递参数并通过JavaScript操作数据集》有用,将其分享出去将是对创作者最好的鼓励。

html5引入的data-*属性允许开发者在HTML元素上存储自定义数据,这些数据不会在页面渲染时显示,也不会影响页面样式,非常适合用来传递临时参数或者组件配置信息,配合JavaScript的dataset对象可以轻松完成数据的读写操作。

data-*属性的基本规则

data-*属性的命名需要遵循固定格式,属性名必须以data-开头,后面跟随自定义的名称,自定义名称只能包含小写字母、数字、连字符-、点号.、冒号:和下划线_,不能包含大写字母,否则可能无法被正确识别。

常见的属性定义示例如下:

<div id="userCard" data-user-id="1001" data-user-name="张三" data-login-time="1692000000">
  用户卡片
</div>
<button data-action-type="submit" data-target-id="form1">提交</button>

通过JavaScript读取data-*属性

JavaScript提供了dataset对象来操作元素上的data-*属性,该对象挂载在DOM元素上,所有data-*属性都会自动映射到dataset对象的属性中,映射规则是将属性名中的data-前缀去掉,然后将连字符后面的字母转为大写,也就是驼峰命名法。

读取单个属性值

以下代码演示如何读取上面定义的div元素上的data-*属性:

// 获取目标元素
const userCard = document.getElementById('userCard');
// 读取data-user-id属性,对应dataset的userId属性
const userId = userCard.dataset.userId;
// 读取data-user-name属性,对应dataset的userName属性
const userName = userCard.dataset.userName;
// 读取data-login-time属性,对应dataset的loginTime属性
const loginTime = userCard.dataset.loginTime;

console.log(userId); // 输出 "1001"
console.log(userName); // 输出 "张三"
console.log(loginTime); // 输出 "1692000000"

遍历所有data-*属性

如果需要获取元素上所有的data-*属性,可以使用Object.entries()方法遍历dataset对象:

const userCard = document.getElementById('userCard');
// 遍历所有data属性
for (const [key, value] of Object.entries(userCard.dataset)) {
  console.log(`属性名:${key},属性值:${value}`);
}
// 输出结果:
// 属性名:userId,属性值:1001
// 属性名:userName,属性值:张三
// 属性名:loginTime,属性值:1692000000

通过JavaScript修改data-*属性

dataset对象不仅支持读取属性,也支持修改和新增data-*属性,修改后页面上对应的HTML属性会同步更新。

const userCard = document.getElementById('userCard');
// 修改已有的data-user-name属性
userCard.dataset.userName = "李四";
// 新增一个data-user-age属性
userCard.dataset.userAge = "25";
// 删除data-login-time属性
delete userCard.dataset.loginTime;

// 查看修改后的HTML属性
console.log(userCard.outerHTML);
// 输出 <div id="userCard" data-user-id="1001" data-user-name="李四" data-user-age="25">用户卡片</div>

数据类型注意事项

需要注意,通过dataset读取到的所有属性值都是字符串类型,即使存储的是数字或者布尔值,也会被转为字符串,实际使用时需要根据需求做类型转换。

const userCard = document.getElementById('userCard');
// 读取的userId是字符串类型
console.log(typeof userCard.dataset.userId); // 输出 "string"
// 转为数字类型
const userIdNum = Number(userCard.dataset.userId);
console.log(typeof userIdNum); // 输出 "number"

// 存储布尔值的情况
userCard.dataset.isVip = "true";
const isVip = userCard.dataset.isVip === "true";
console.log(isVip); // 输出 true

实际开发场景示例

在列表渲染场景中,经常需要用data-*属性存储每条数据的唯一标识,方便后续操作:

<ul id="goodsList">
  <li data-goods-id="101" data-price="299">商品A <button class="buy-btn">购买</button></li>
  <li data-goods-id="102" data-price="499">商品B <button class="buy-btn">购买</button></li>
  <li data-goods-id="103" data-price="199">商品C <button class="buy-btn">购买</button></li>
</ul>
// 给所有购买按钮绑定点击事件
document.querySelectorAll('.buy-btn').forEach(btn => {
  btn.addEventListener('click', function() {
    // 找到当前按钮对应的li元素
    const li = this.parentElement;
    // 读取商品id和价格
    const goodsId = li.dataset.goodsId;
    const price = Number(li.dataset.price);
    console.log(`购买商品ID:${goodsId},价格:${price}元`);
    // 后续可以发起购买请求等操作
  });
});

使用注意事项

  • 不要在data-*属性中存储敏感信息,因为用户可以通过浏览器开发者工具轻松查看和修改这些属性值。
  • 自定义名称不要使用大写字母,即使写了大写字母,在dataset中也会被转为小写,比如data-User-Id会被映射为dataset.user_id而不是dataset.userId
  • 如果需要兼容非常老的浏览器(如IE10及以下),dataset对象可能不被支持,此时可以使用getAttribute('data-xxx')setAttribute('data-xxx', value)方法来操作data-*属性。

总结:data-*属性是html5提供的轻量级数据传递方案,配合JavaScript的dataset对象可以快速完成自定义数据的读写,掌握其命名规则和类型特性,能有效提升前端开发中组件间数据交互的效率。

html5data_*属性JavaScript数据集操作修改时间:2026-07-03 16:52:01

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。