如何操作data-*属性?

在 JavaScript 中操作 <div> 元素的 data-* 属性(自定义数据属性),可以通过以下方法实现设置、修改、获取和删除操作:


1. 设置 data-* 属性

方法 1:使用 dataset 属性(推荐)

javascript 复制代码
const div = document.querySelector("div");

// 设置单个属性(驼峰命名)
div.dataset.userId = "123";    // HTML: data-user-id
div.dataset.userRole = "admin"; // HTML: data-user-role

// 批量设置属性
Object.assign(div.dataset, {
  userId: "456",
  isActive: "true"
});

方法 2:使用 setAttribute

javascript 复制代码
div.setAttribute("data-user-id", "123");
div.setAttribute("data-user-role", "admin");

2. 修改 data-* 属性

直接对 datasetsetAttribute 重新赋值:

javascript 复制代码
// 通过 dataset 修改
div.dataset.userId = "789"; 

// 通过 setAttribute 修改
div.setAttribute("data-user-id", "789");

3. 获取 data-* 属性

方法 1:使用 dataset(推荐)

javascript 复制代码
console.log(div.dataset.userId);    // 输出: "123"
console.log(div.dataset.userRole);  // 输出: "admin"

方法 2:使用 getAttribute

javascript 复制代码
console.log(div.getAttribute("data-user-id"));   // 输出: "123"
console.log(div.getAttribute("data-user-role")); // 输出: "admin"

4. 删除 data-* 属性

方法 1:使用 delete 操作符(针对 dataset

javascript 复制代码
delete div.dataset.userId;    // 删除 data-user-id
delete div.dataset.userRole;  // 删除 data-user-role

方法 2:使用 removeAttribute

javascript 复制代码
div.removeAttribute("data-user-id");
div.removeAttribute("data-user-role");

完整示例

html 复制代码
<div id="myDiv" data-role="user">示例 DIV</div>

<script>
  const div = document.getElementById("myDiv");

  // 设置属性
  div.dataset.userId = "1001";
  div.setAttribute("data-status", "active");

  // 修改属性
  div.dataset.userId = "1002";
  div.setAttribute("data-status", "inactive");

  // 获取属性
  console.log(div.dataset.userId);          // "1002"
  console.log(div.getAttribute("data-role")); // "user"

  // 删除属性
  delete div.dataset.userId;
  div.removeAttribute("data-status");
</script>

注意事项

  1. 命名规则

    • HTML 中:data-user-id(连字符命名)。
    • JS 中:div.dataset.userId(驼峰命名)。
  2. 数据类型

    • dataset 返回的值始终是字符串,需手动转换类型:

      javascript 复制代码
      const num = parseInt(div.dataset.userId);
      const isActive = div.dataset.isActive === "true";
  3. 兼容性

    • dataset 支持现代浏览器(IE11+),旧浏览器需用 getAttribute/setAttribute

总结

操作 方法 示例
设置属性 div.dataset.key = value div.dataset.userId = "123"
div.setAttribute("data-key", value) div.setAttribute("data-user-id", "123")
修改属性 重新赋值 datasetsetAttribute div.dataset.userId = "456"
获取属性 div.dataset.key console.log(div.dataset.userId)
div.getAttribute("data-key") div.getAttribute("data-user-id")
删除属性 delete div.dataset.key delete div.dataset.userId
div.removeAttribute("data-key") div.removeAttribute("data-user-id")
相关推荐
JefferyXZF6 分钟前
Next.js 初识:从 React 到全栈开发的第一步(一)
前端·全栈·next.js
一只韩非子1 小时前
AI时代,程序员如何优雅地搞定页面设计?
前端·ai编程
新中地GIS开发老师1 小时前
2025Mapbox零基础入门教程(14)定位功能
前端·javascript·arcgis·gis·mapbox·gis开发·地理信息科学
tager1 小时前
Vue 3 组件开发中的"双脚本"困境
前端·vue.js·代码规范
烛阴2 小时前
Int / Floor
前端·webgl
excel2 小时前
使用 PWA 时,为什么你必须手动添加更新逻辑,否则会报错?
前端
Moment2 小时前
Node.js 这么多后端框架,我到底该用哪个?🫠🫠🫠
前端·后端·node.js
尚学教辅学习资料2 小时前
SpringBoot3.x入门到精通系列: 2.3 Web开发基础
前端·springboot·web开发
han_2 小时前
前端遇到页面卡顿问题,如何排查和解决?
前端·javascript·性能优化
拾光拾趣录4 小时前
H5适配9大高频题连环炸!第3问90%人翻车?
前端·面试