data-*

**data-*** 全局属性 形成一类称为 **自定义数据属性** 的属性,这些属性允许通过脚本在 HTML 和其 DOM 表示之间交换专有信息。

试试看

所有这些自定义数据都可以通过设置属性的元素的 HTMLElement 接口获得。 HTMLElement.dataset 属性可以访问它们。* 可以替换为任何遵循 XML 名称的生产规则 的名称,包括以下建议

  • 名称不应以 xml(不区分大小写)开头,因为它保留供未来 XML 规范使用。
  • 名称不应包含任何冒号字符 (:),因为 XML 会将此类名称赋予特定含义。
  • 名称不应包含任何大写字母,因为 XML 全部使用小写字母。

这些只是建议。如果不遵循这些命名建议,不会出现任何错误。属性仍然可以使用 CSS 的 属性选择器 进行匹配,属性不区分大小写,但属性值区分大小写。不符合这三个建议的属性也会被 JavaScript HTMLElement.dataset 属性识别,并且用户代理会将该属性包含在包含 HTMLElement 所有自定义数据属性的 DOMStringMap 中。

如果您计划使用 HTMLElement.dataset,则属性名称中 data- 之后的部分只能包含 JavaScript 属性名称中允许的字符(以及连字符,连字符将被删除)。dataset 版本的属性名称会删除 "data-" 前缀,并将名称的剩余部分从 kebab-case 转换为 camelCase。例如,element.getAttribute("data-test") 等效于 element.dataset.test,而 data-test-abc 将可以通过 HTMLElement.dataset.testAbc(或 HTMLElement.dataset["testAbc"])访问。请避免使用连字符后面的非字母字符,例如 data-test-1data--test,因为它们不会被 HTMLElement.dataset 识别。

用法

通过添加 data-* 属性,即使是普通的 HTML 元素也可以变得相当复杂和强大,成为程序对象。例如,游戏中的一艘宇宙飞船 "精灵" 可以是一个简单的 <img> 元素,带有 class 属性和几个 data-* 属性

html
<img
  class="spaceship cruiserX3"
  src="shipX3.png"
  data-ship-id="324"
  data-weapons="laserI laserII"
  data-shields="72%"
  data-x="414354"
  data-y="85160"
  data-z="31940"
  onclick="spaceships[this.dataset.shipId].blasted()" />

有关使用 HTML 数据属性的更深入教程,请参阅 使用数据属性

规范

规范
HTML 标准
# attr-data-*

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅