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 schreibgeschützte dataset
-Eigenschaft der HTMLElement
-Schnittstelle ermöglicht den Lese- und Schreibzugriff auf benutzerdefinierte Datenattribute (data-*
) von Elementen. Sie bietet eine Karte von Strings (DOMStringMap
) mit einem Eintrag für jedes data-*
-Attribut.
Hinweis:
Die dataset
-Eigenschaft selbst kann gelesen, aber nicht direkt beschrieben werden.
Stattdessen müssen alle Schreibvorgänge an den einzelnen Eigenschaften innerhalb des
dataset
erfolgen, die wiederum die Datenattribute repräsentieren.
Ein HTML-data-*
-Attribut und sein entsprechendes DOM
dataset.property
ändern ihren gemeinsamen Namen entsprechend, je nachdem, 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 Property-Name eines benutzerdefinierten Datenattributs ist derselbe wie der HTML-Attributname ohne das Präfix
data-
. Einzelne Bindestriche (-
) werden entfernt, und das nächste ASCII-Zeichen nach einem entfernten Bindestrich wird großgeschrieben, um den camelCase-Namen der Eigenschaft zu bilden.
Details und Beispiele zur Umwandlung zwischen den HTML- und JavaScript-Formen werden im nächsten Abschnitt ausführlicher beschrieben.
Zusätzlich zu den untenstehenden Informationen finden Sie eine Anleitung zur Verwendung von HTML-Datenattributen in unserem Artikel Verwendung von Datenattributen.
Namensumwandlung
dash-style
zucamelCase
-Umwandlung-
Ein benutzerdefinierter Datenattributname wird in einen Schlüssel für den
DOMStringMap
-Eintrag wie folgt umgewandelt:- Alle ASCII-Großbuchstaben (
A
bisZ
) werden in Kleinbuchstaben umgewandelt; - Das Präfix
data-
(einschließlich des Bindestrichs) wird entfernt; - Für jeden Bindestrich (
U+002D
) gefolgt von einem ASCII-Kleinbuchstabena
bisz
, wird der Bindestrich entfernt und der Buchstabe großgeschrieben; - Andere Zeichen (einschließlich weiterer Bindestriche) bleiben unverändert.
- Alle ASCII-Großbuchstaben (
camelCase
zudash-style
-Umwandlung-
Die entgegengesetzte Umwandlung, die einen Schlüssel in einen Attributnamen überführt, verwendet folgende Schritte:
- Einschränkung: Vor der Umwandlung darf ein Bindestrich nicht unmittelbar
auf einen ASCII-Kleinbuchstaben
a
bisz
folgen; - Das Präfix
data-
wird hinzugefügt; - Vor jedem ASCII-Großbuchstaben
A
bisZ
wird ein Bindestrich hinzugefügt, dann wird der Buchstabe in Kleinbuchstaben umgewandelt; - Andere Zeichen bleiben unverändert.
- Einschränkung: Vor der Umwandlung darf ein Bindestrich nicht unmittelbar
auf einen ASCII-Kleinbuchstaben
Zum Beispiel entspricht ein data-abc-def
-Attribut dem
dataset.abcDef
.
Zugriff auf Werte
- Attribute können über den camelCase-Namen/Schlüssel als Objekteigenschaft des
Dataset gesetzt und gelesen werden:
element.dataset.keyname
. - Attribute können auch mit der Klammer-Syntax gesetzt und gelesen werden:
element.dataset['keyname']
. - Der
in
-Operator kann überprüfen, ob ein bestimmtes Attribut existiert:'keyname' in element.dataset
. Beachten Sie, dass dies die Prototyp-Kette vondataset
durchlaufen kann und möglicherweise unsicher ist, wenn Sie externen Code haben, der die Prototyp-Kette verschmutzen könnte. Mehrere Alternativen existieren, wie etwaObject.hasOwn(element.dataset, 'keyname')
, oder einfach zu überprüfen, obelement.dataset.keyname !== undefined
.
Werte setzen
-
Wenn das Attribut gesetzt wird, wird sein Wert immer in einen String 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
Eine 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 # dom-dataset-dev |
Browser-Kompatibilität
Siehe auch
- Die HTML-
data-*
-Klasse der globalen Attribute - Verwendung von Datenattributen
Element.getAttribute()
undElement.setAttribute()