用 data-index 存序号最稳妥,必须全小写+连字符且值为字符串;读取首选 getattribute("data-index"),写入必须用 setattribute(),避免 dataset 类型和兼容性问题。

用 data-index 或 data-id 存序号最稳妥,但必须写成全小写+连字符格式,且值始终是字符串——别指望自动转数字或保持类型。
为什么 data-index 比 data-idx 或 data_order 更可靠
浏览器只识别以 data- 开头、后接小写字母/数字/连字符(且不能以数字开头)的属性名。其他写法会被直接忽略:
-
data-index="5"→ ✅ 可通过el.dataset.index或el.getAttribute("data-index")读到"5" -
data-idx="5"→ ✅ 合法,但dataset.idx可读,不如index通用(易被其他代码识别) -
data_order="5"→ ❌ 下划线不合法,getAttribute("data_order")返回null,dataset.order是undefined -
data-1st-index="5"→ ✅ HTML 合法,但dataset.1stIndex语法错误,只能用dataset["1stIndex"]或更稳的getAttribute("data-1st-index")
getAttribute("data-index") 是读序号的首选方式
哪怕你只存简单数字,也优先用 getAttribute(),而不是 dataset.index。原因很实际:
-
dataset.index在命名稍有偏差(比如服务端模板输出了data-Index或data-index2)时会静默返回undefined,而getAttribute("data-index")明确告诉你有没有这个属性 - 序号常用于计算或索引,
"5"和5行为完全不同:el.dataset.index + 1得到"51",不是6;必须显式转换:Number(el.getAttribute("data-index")) + 1 - IE11 不支持
dataset,如果还要兼容老环境,getAttribute()是唯一选择
写入和更新序号必须用 setAttribute()
dataset.index = "10" 看起来改了,但 DOM 里没真变——getAttribute("data-index") 还是旧值,CSS 选择器如 [data-index="10"] 也匹配不上。
- 正确写法:
el.setAttribute("data-index", "10") - 删除序号:
el.removeAttribute("data-index"),delete el.dataset.index完全无效 - 批量更新多个 data 属性时,别循环
setAttribute,改用:Object.entries({ index: "10", status: "active" }).forEach(([k, v]) => el.setAttribute(`data-${k}`, v))
序号本质是轻量元数据,不是状态容器。它适合标识列表项顺序、渲染批次、事件委托目标索引这类静态信息;需要跨刷新保留或参与复杂逻辑时,该进 localStorage 或由框架管理,别硬塞在 data- 里。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











