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 bietet Lese-/Schreibzugriff auf benutzerdefinierte Datenattribute (data-*
) auf Elementen. Sie stellt eine Map von Zeichenfolgen (DOMStringMap
) mit einem Eintrag für jedes data-*
-Attribut bereit.
Hinweis:
Die dataset
-Eigenschaft selbst kann gelesen, aber nicht direkt geschrieben werden.
Stattdessen müssen alle Schreibvorgänge auf die einzelnen Eigenschaften innerhalb des
dataset
erfolgen, die wiederum die Datenattribute darstellen.
Ein HTML data-*
-Attribut und sein entsprechendes DOM
dataset.property
ändern ihren gemeinsamen Namen je nachdem, wo
sie gelesen oder geschrieben werden:
- In HTML
-
Der Attributname beginnt mit
data-
. Er kann nur Buchstaben, Zahlen, Bindestriche (-
), Punkte (.
), Doppelpunkte (:
) und Unterstriche (_
) enthalten. Alle ASCII-Großbuchstaben (A
bisZ
) werden in Kleinbuchstaben umgewandelt. - In JavaScript
-
Der Eigenschaftsname eines benutzerdefinierten Datenattributs ist derselbe wie der HTML-Attributname ohne das
data-
-Präfix. Einzelne Bindestriche (-
) werden entfernt, und das nächste ASCII-Zeichen nach einem entfernten Bindestrich wird großgeschrieben, um den camel-cased Eigenschaftsnamen zu bilden.
Details und Beispiele zur Umwandlung zwischen der HTML- und JavaScript-Form sind im nächsten Abschnitt näher beschrieben.
Zusätzlich zu den untenstehenden Informationen finden Sie eine Anleitung zur Verwendung von HTML-Datenattributen in unserem Artikel Verwendung von Datenattributen.
Namenskonvertierung
- Umwandlung von
dash-style
incamelCase
-
Ein benutzerdefinierter Datenattributname wird in einen Schlüssel für den
DOMStringMap
-Eintrag durch Folgendes umgewandelt:- Alle ASCII-Großbuchstaben (
A
bisZ
) werden in Kleinbuchstaben umgewandelt; - Entfernen des Präfixes
data-
(einschließlich des Bindestrichs); - Bei jedem Bindestrich (
U+002D
) gefolgt von einem ASCII-Kleinbuchstabena
bisz
wird der Bindestrich entfernt und der Buchstabe wird großgeschrieben; - Andere Zeichen (einschließlich anderer Bindestriche) bleiben unverändert.
- Alle ASCII-Großbuchstaben (
- Umwandlung von
camelCase
indash-style
-
Die entgegengesetzte Umwandlung, die einen Schlüssel in einen Attributnamen umwandelt, verwendet Folgendes:
- Einschränkung: Vor der Umwandlung darf ein Bindestrich nicht unmittelbar von einem ASCII-Kleinbuchstaben
a
bisz
gefolgt werden; - Hinzufügen des Präfixes
data-
; - 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 Umwandlung 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
dataset gesetzt und gelesen werden:
element.dataset.keyname
. - Attribute können auch durch Verwendung der Klammer-Syntax gesetzt und gelesen werden:
element.dataset['keyname']
. - Der
in
Operator kann überprüfen, ob ein gegebenes Attribut existiert:'keyname' in element.dataset
. Beachten Sie, dass dies die Prototypkette vondataset
durchläuft und möglicherweise unsicher ist, wenn fremder Code die Prototypkette beeinflussen kann. Es gibt mehrere Alternativen, wie zum BeispielObject.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 eine Zeichenkette umgewandelt. Beispielsweise wird
element.dataset.example = null
umgewandelt indata-example="null"
. -
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 # dom-dataset-dev |
Browser-Kompatibilität
Siehe auch
- Die HTML
data-*
Klasse von globalen Attributen - Verwendung von Datenattributen
Element.getAttribute()
undElement.setAttribute()