data-*属性命名必须全小写加连字符,JS中通过dataset访问时自动转驼峰,写入必须用setAttribute,存储值均为字符串,不可存放敏感信息或替代状态管理。

data-* 属性命名必须全小写+连字符,否则 dataset 读不到
浏览器解析 data- 属性时,只识别严格符合规范的写法:data-user-id、data-api-endpoint 这类全小写 + 连字符组合。任何变体都会被忽略——data-userId、data_user_id、data-UserID 全部无效。现象是:HTML 里明明写了,但 element.dataset.userId 返回 undefined。
JS 中访问时,连字符自动转驼峰:data-order-status → element.dataset.orderStatus;含数字开头的(如 data-2024-year)不能用点号,得写 element.dataset["2024Year"]。
常见错误场景:
- 后端模板拼接时用了驼峰变量名(如
data-userId="{{id}}"),结果前端取不到 - 复制粘贴 JSON Schema 字段名(如
data-userName)直接当属性用 - CSS 选择器写成
[data-status=in-progress](漏引号),被解析为减法表达式
dataset 是只读代理,写入必须用 setAttribute
element.dataset.foo = "bar" 看似生效,实际只是修改内存副本;刷新页面或重新渲染后,原始 HTML 的 data-foo 值不变。真正要持久化更新 DOM 属性,必须调用 element.setAttribute('data-foo', 'bar')。
混用会导致状态不一致:dataset.foo = 'a' 后再 setAttribute('data-foo', 'b'),dataset.foo 仍返回 'a'(缓存未刷新),而 getAttribute('data-foo') 返回 'b'。
读取建议优先用 dataset.xxx(语义清晰、自动转换命名);写入必须走 setAttribute,别图省事。
data-* 存的是字符串,JSON 必须手动 parse / stringify
data-config='{"role":"admin"}' 在 DOM 中就是普通字符串,浏览器不做任何解析。JS 里拿到的是原始字符串,不是对象。直接 JSON.parse(el.dataset.config) 风险极高——服务端渲染未 HTML 实体编码时,单引号、换行、& 符号都会让 JSON.parse() 报 SyntaxError。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
安全读取模式:
const jsonStr = el.getAttribute('data-config');
let config;
try {
config = JSON.parse(jsonStr);
} catch (e) {
config = {};
}
注意事项:
- 服务端输出前必须对 JSON 字符串做 HTML 实体编码(如
"替代") -
dataset.count永远是字符串"42",dataset.count + 1结果是"421"(字符串拼接) -
dataset.active是"true"或"false"字符串,if (el.dataset.active)对"false"也返回true
data-* 不是状态容器,别当 React state 或 token 用
data- 属性只适合存静态、轻量、非敏感的上下文信息,比如 data-testid、data-track-id、data-action="delete"。它不是响应式状态机制,也不加密,所有值都明文暴露在 HTML 源码和 DevTools 中。
绝对不该放:
- token、密码、手机号等敏感字段
- 权限标识(如
data-permission="admin")——前端判断毫无意义,必须服务端校验 - 大段 JSON(如分页列表数据),会拖慢 DOM 解析和序列化
- 需要实时响应的数据(它不触发 MutationObserver,也不联动框架响应式系统)
真正需要状态管理的场景,该用 JS 变量、Map、闭包,或交由 React/Vue 等框架处理。data-* 只是初始化参数传递通道,不是隐式绑定,更不是“结构化数据自动传递”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










