HTMLElement: dataset-Eigenschaft
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die dataset
-Eigenschaft, die nur gelesen werden kann,
der HTMLElement
-Schnittstelle bietet Lese-/Schreibzugriff auf custom data attributes
(data-*
) auf Elementen. Sie stellt eine Zeichenfolgenabbildung
(DOMStringMap
) mit einem Eintrag für jedes data-*
-Attribut dar.
Hinweis:
Die dataset
-Eigenschaft selbst kann gelesen, aber nicht direkt geschrieben werden.
Stattdessen müssen alle Schreibvorgänge an die einzelnen Eigenschaften innerhalb des
dataset
erfolgen, die wiederum die Datenattribute darstellen.
Ein HTML data-*
-Attribut und sein entsprechendes DOM
dataset.property
passen ihren gemeinsamen Namen je nachdem an,
wo sie gelesen oder geschrieben werden:
- In HTML
-
Der Attributname beginnt mit
data-
. Er darf nur Buchstaben, Zahlen, Bindestriche (-
), Punkte (.
), Doppelpunkte (:
) und Unterstriche (_
) enthalten. Alle ASCII-Großbuchstaben (A
bisZ
) werden in Kleinbuchstaben umgewandelt. - In JavaScript
-
Der Eigenschaftenname eines benutzerdefinierten Datenattributs ist derselbe wie das HTML-Attribut ohne das
data-
Präfix. Einzelne Bindestriche (-
) werden entfernt, und der nächste ASCII Buchstabe nach einem entfernten Bindestrich wird großgeschrieben, um den camel-cased Namen der Eigenschaft zu bilden.
Details und Beispiele für die Umwandlung zwischen den HTML- und JavaScript-Formen werden im nächsten Abschnitt genauer beschrieben.
Zusätzlich zu den untenstehenden Informationen finden Sie eine Anleitung für die Verwendung von HTML-Datenattributen in unserem Artikel Using data attributes.
Namenskonvertierung
dash-style
zucamelCase
Konvertierung-
Ein benutzerdefinierter Datenattributname wird zu einem Schlüssel für den
DOMStringMap
-Eintrag durch folgende Maßnahmen transformiert:- Alle ASCII-Großbuchstaben (
A
bisZ
) in Kleinbuchstaben umwandeln; - Das Präfix
data-
(einschließlich des Bindestrichs) entfernen; - Für jeden Bindestrich (
U+002D
) gefolgt von einem ASCII-Kleinbuchstabena
bisz
, den Bindestrich entfernen und den Buchstaben groß schreiben; - Andere Zeichen (einschließlich anderer Bindestriche) bleiben unverändert.
- Alle ASCII-Großbuchstaben (
camelCase
zudash-style
Konvertierung-
Die entgegengesetzte Transformation, die einen Schlüssel einem Attributnamen zuordnet, folgt dem nachfolgenden Muster:
- Einschränkung: Vor der Transformation darf ein Bindestrich nicht unmittelbar von einem ASCII-Kleinbuchstaben
a
bisz
gefolgt werden; - Das Präfix
data-
hinzufügen; - Einen Bindestrich vor jedem ASCII-Großbuchstaben
A
bisZ
hinzufügen, dann den Buchstaben in Kleinbuchstaben umwandeln; - Andere Zeichen bleiben unverändert.
- Einschränkung: Vor der Transformation darf ein Bindestrich nicht unmittelbar von einem ASCII-Kleinbuchstaben
Zum Beispiel entspricht ein data-abc-def
-Attribut
dataset.abcDef
.
Zugriff auf Werte
- Attribute können durch den camelCase-Namen/Schlüssel als Objekteigenschaft des
Datensatzes gesetzt und gelesen werden:
element.dataset.keyname
. - Attribute können auch unter Verwendung der Klammer-Syntax gesetzt und gelesen werden:
element.dataset['keyname']
. - Der
in
operator kann prüfen, ob ein gegebenes Attribut existiert:'keyname' in element.dataset
. Beachten Sie, dass dies die Prototype-Kette desdataset
durchlaufen wird und möglicherweise unsicher ist, wenn Sie externen Code haben, der die Prototype-Kette verunreinigen könnte. Verschiedene Alternativen existieren, wieObject.hasOwn(element.dataset, 'keyname')
, oder einfach zu prüfen, obelement.dataset.keyname !== undefined
ist.
Werte setzen
-
Wenn das Attribut gesetzt wird, wird sein Wert immer in eine Zeichenfolge umgewandelt. Zum Beispiel:
element.dataset.example = null
wird indata-example="null"
umgewandelt. -
Um ein Attribut zu entfernen, können Sie den
delete
operator verwenden:delete element.dataset.keyname
.
Wert
Ein DOMStringMap
.
Beispiele
<div id="user" data-id="1234567890" data-user="carinaanand" data-date-of-birth>
Carina Anand
</div>
const el = document.querySelector("#user");
// el.id === 'user'
// el.dataset.id === '1234567890'
// el.dataset.user === 'carinaanand'
// el.dataset.dateOfBirth === ''
// set a data attribute
el.dataset.dateOfBirth = "1960-10-03";
// Result on JS: el.dataset.dateOfBirth === '1960-10-03'
// Result on HTML: <div id="user" data-id="1234567890" data-user="carinaanand" data-date-of-birth="1960-10-03">Carina Anand</div>
delete el.dataset.dateOfBirth;
// Result on JS: el.dataset.dateOfBirth === undefined
// Result on HTML: <div id="user" data-id="1234567890" data-user="carinaanand">Carina Anand</div>
if (el.dataset.someDataAttr === undefined) {
el.dataset.someDataAttr = "mydata";
// Result on JS: 'someDataAttr' in el.dataset === true
// Result on HTML: <div id="user" data-id="1234567890" data-user="carinaanand" data-some-data-attr="mydata">Carina Anand</div>
}
Spezifikationen
Specification |
---|
HTML Standard # dom-dataset-dev |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Die HTML
data-*
Klasse der globalen Attribute - Using data attributes
Element.getAttribute()
undElement.setAttribute()