0Pricing
HTML Academy · 课时

在 JavaScript 中通过 dataset 访问 data-*

通过 dataset API 读写自定义数据属性

在 JavaScript 中通过 dataset 访问 data-* 是 CoddyKit 上的免费 HTML Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 HTML Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 HTML Academy 课程共包含 4 节课。

dataset API 是什么

每个 HTML 元素都通过其 data-* 属性公开数据,这些属性可通过 dataset 属性访问——dataset 是一个 DOMStringMap,可将属性名称映射到值,而无需调用 getAttribute()。

属性到属性的映射

data-user-id 会变成 el.dataset.userId。属性名中的连字符会在 dataset 属性中转换为 camelCase。访问 data-item-count 时使用 el.dataset.itemCount。

读取值

读取数据属性:const id = el.dataset.userId。所有 dataset 值都是字符串——请根据需要使用 Number() 或 parseInt() 将数值转换为数字。不存在的属性返回 undefined,而不是 null。

const card = document.querySelector(".card");
const userId = card.dataset.userId;
const count = Number(card.dataset.itemCount);

写入值

通过 dataset 设置数据属性:el.dataset.state = "active"。这会创建或更新 data-state HTML 属性。属性的变化会立即反映在 DOM 中,并且可以由 MutationObserver 观察到。

删除值

删除数据属性:delete el.dataset.userId。相应的 data-user-id 属性会从元素中移除。您也可以使用 el.removeAttribute("data-user-id") 来明确移除它。

遍历 dataset

dataset 是一个 DOMStringMap——您可以使用 for...in 循环遍历它,或将其展开并传入 Object.entries:Object.entries(el.dataset).forEach(([key, value]) => { ... })。这对于批量读取元素上的所有数据属性非常有用。

使用 dataset 存储组件状态

请将轻量级组件状态存储在数据属性中,而不是隐藏输入或 JavaScript 变量中。标签页组件可以将 active 标签页的索引存储在容器的 data-active-tab 中,任何脚本都能读取它,而无需共享变量。

使用 dataset 进行事件委托

在项目列表中,请将一个点击监听器附加到容器上。点击时,读取被点击目标的 dataset:e.target.closest("[data-id]").dataset.id。一个监听器即可处理所有项目,无需为每个项目单独绑定。

dataset 与自定义属性的比较

对于需要从 HTML 中读取的数据(服务器渲染的元数据,可供 CSS 选择器访问),请使用 dataset。对于不需要在 HTML 中显示的临时运行时状态,请使用 JavaScript 变量。混用两者会增加不必要的复杂性。

类型强制转换注意事项

dataset 始终返回字符串。el.dataset.active === true 始终为 false——请使用 el.dataset.active === "true" 进行比较,或进行转换:el.dataset.active === "true"。存储在 dataset 中的布尔状态需要通过字符串进行比较。

dataset 与 getAttribute 的比较

两者都可以读取数据属性。dataset 更便于使用 camelCase 访问;getAttribute 则要求提供包含 “data-” 前缀的完整属性名。在现代代码中请优先使用 dataset;当需要将非数据属性与数据属性一起遍历时,请使用 getAttribute。

知识检查

data-user-id HTML 属性在 JavaScript dataset 对象中如何表示?

总结

dataset API 会将 data-* 属性映射为 camelCase JavaScript 属性,从而便于读取、写入和删除。它支持组件状态存储、事件委托模式以及服务器向客户端传递数据,无需使用隐藏输入或全局变量。

常见问题解答

「在 JavaScript 中通过 dataset 访问 data-*」课时是免费的吗?

是的 — 「在 JavaScript 中通过 dataset 访问 data-*」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 HTML Academy 课程的其余内容,请升级到 CoddyKit PRO。 HTML Academy 课程共包含 4 节课。

「在 JavaScript 中通过 dataset 访问 data-*」这节课中我会学到什么?

通过 dataset API 读写自定义数据属性 你通过在浏览器中直接运行的动手代码来练习 HTML Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 HTML Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 HTML Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「在 JavaScript 中通过 dataset 访问 data-*」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 HTML Academy 课中编写并运行代码吗?

能。每节 HTML Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. data-* 语法与命名约定
  2. 在 JavaScript 中通过 dataset 访问 data-*
  3. 使用 CSS 属性选择器处理 data-*
  4. 实际模式:工具提示与状态跟踪
← 返回 HTML Academy