推荐统一使用dataset api读写data-*属性,它语义清晰、兼容ie11+、自动连字符转驼峰(如data-user-id→userid),值恒为字符串;非标准属性用getattribute/setattribute,禁用无data-前缀的自定义属性。

JavaScript 中读取和修改元素的自定义属性,推荐统一使用 dataset API(适用于以 data- 开头的标准自定义属性),它语义清晰、兼容性好(IE11+)、自动处理驼峰转换;对非标准自定义属性,可用 getAttribute() 和 setAttribute(),但不建议混用或随意添加无 data- 前缀的属性。
用 dataset 读写 data-* 属性(推荐)
dataset 是 HTMLElement 的只读对象,自动映射所有 data-xxx 属性。注意命名规则:带连字符的属性名(如 data-user-id)会转为驼峰形式(userId)。
- 读取:
element.dataset.userId→ 返回字符串(即使原值是数字或布尔值) - 设置:
element.dataset.userId = "123"→ 自动添加data-user-id="123" - 删除:
delete element.dataset.userId→ 移除整个data-user-id属性
示例:
<div id="box" data-user-id="42" data-is-active="true"></div>
JS 中:
const box = document.getElementById('box');<br>console.log(box.dataset.userId); // "42"<br>console.log(box.dataset.isActive); // "true"<br>box.dataset.userId = "99";<br>// DOM 变为:<div id="box" data-user-id="99" data-is-active="true"></div>用 getAttribute / setAttribute 操作任意属性
适用于读写任何 HTML 属性(包括自定义的非 data- 属性),但不会做驼峰转换,需严格按原始名称操作。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 读取:
element.getAttribute('data-user-id')或element.getAttribute('my-flag') - 设置:
element.setAttribute('data-user-id', '100')或element.setAttribute('my-flag', 'on') - 移除:
element.removeAttribute('data-user-id')
⚠️ 注意:getAttribute('class') 返回实际字符串,而 element.className 是专有属性,二者行为不同;同理,data- 属性优先走 dataset,更安全。
区分自定义属性与 HTML 标准属性
不要把自定义数据存在标准属性里(如 id、title、value),这可能影响语义、可访问性或框架行为。例如:
- ✅ 正确:
<button data-api-endpoint="/users">加载</button> - ❌ 避免:
<button title="/users">加载</button>(title应用于悬停提示)
若需存储复杂数据(如对象、数组),先 JSON.stringify() 再存入 data- 属性,读取时再 JSON.parse() —— 但更推荐用外部 Map 或组件状态管理。
兼容旧浏览器或特殊场景的注意事项
IE10 及更早版本不支持 dataset,如需支持,可用 getAttribute 回退:
function getData(el, key) {<br> return el.dataset ? el.dataset[key] : el.getAttribute('data-' + key);<br>}<br>function setData(el, key, value) {<br> if (el.dataset) el.dataset[key] = value;<br> else el.setAttribute('data-' + key, value);<br>}不过当前主流项目基本无需兼容 IE10,直接用 dataset 即可。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










