HTMLOrForeignElement.dataset - Web APIs 编辑
The dataset
read-only property of the HTMLOrForeignElement
interface provides read/write access to custom data attributes (data-*
) on elements. It exposes a map of strings (DOMStringMap
) with an entry for each data-*
attribute.
The dataset
property itself can be read, but not directly written. Instead, all writes must be to the individual properties within the dataset
, which in turn represent the data attributes.
An HTML data-*
attribute and its corresponding DOM dataset.property
modify their shared name according to where they are read or written:
- In HTML
- The attribute name begins with
data-
. It can contain only letters, numbers, dashes (-
), periods (.
), colons (:
), and underscores (_
). Any ASCII capital letters (A
toZ
) are ignored and converted to lowercase. - In JavaScript
- The property name of a custom data attribute is the same as the HTML attribute without the
data-
prefix, and removes single dashes (-
) for when to capitalize the property’s “camelCased” name.
In addition to the information below, you'll find a how-to guide for using HTML data attributes in our article Using data attributes.
Name conversion
dash-style
tocamelCase
conversionA custom data attribute name is transformed to a key for the
DOMStringMap
entry by the following:- Remove the prefix
data-
(including the dash); - For any dash (
U+002D
) followed by an ASCII lowercase lettera
toz
, remove the dash and uppercase the letter; - Other characters (including other dashes) are left unchanged.
- Remove the prefix
camelCase
todash-style
conversionThe opposite transformation, which maps a key to an attribute name, uses the following:
- Restriction: Before transformation, a dash must not be immediately followed by an ASCII lowercase letter
a
toz
; - Add the
data-
prefix; - Add a dash before any ASCII uppercase letter
A
toZ
, then lowercase the letter; - Other characters are left unchanged.
- Restriction: Before transformation, a dash must not be immediately followed by an ASCII lowercase letter
For example, a data-abc-def
attribute corresponds to dataset.abcDef
.
Accessing values
- Attributes can be set and read by the camelCase name/key as an object property of the dataset:
element.dataset.keyname
- Attributes can also be set and read using bracket syntax:
element.dataset['keyname']
- The
in
operator can check if a given attribute exists:'keyname' in element.dataset
Setting values
- When the attribute is set, its value is always converted to a string.
For example:
element.dataset.example = null
is converted intodata-example="null"
. - To remove an attribute, you can use the
delete
operator:delete element.dataset.keyname
Syntax
const dataAttrMap = element.dataset
Value
A DOMStringMap
.
Examples
<div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>John Doe</div>
const el = document.querySelector('#user');
// el.id === 'user'
// el.dataset.id === '1234567890'
// el.dataset.user === 'johndoe'
// el.dataset.dateOfBirth === ''
// set a data attribute
el.dataset.dateOfBirth = '1960-10-03';
// Result: el.dataset.dateOfBirth === '1960-10-03'
delete el.dataset.dateOfBirth;
// Result: el.dataset.dateOfBirth === undefined
if ('someDataAttr' in el.dataset === false) {
el.dataset.someDataAttr = 'mydata';
// Result: 'someDataAttr' in el.dataset === true
}
Specifications
Specification | Status | Comment |
---|---|---|
HTML Living Standard The definition of 'HTMLElement.dataset' in that specification. | Living Standard | No change from latest snapshot, HTML 5.1 |
HTML 5.1 The definition of 'HTMLElement.dataset' in that specification. | Recommendation | Snapshot of HTML Living Standard, no change from HTML5 |
HTML5 The definition of 'HTMLElement.dataset' in that specification. | Recommendation | Snapshot of HTML Living Standard, initial definition. |
Browser compatibility
BCD tables only load in the browser
Please change the compat macro's paramter toapi.HTMLOrForeignElement.dataset
after BCD is updated.See also
- The HTML
data-*
class of global attributes. - Using data attributes
Element.getAttribute()
andElement.setAttribute()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论