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 Juli 2015.
Die schreibgeschützte dataset-Eigenschaft der HTMLElement-Schnittstelle bietet Lese-/Schreibzugriff auf benutzerdefinierte Datenattribute(data-*) auf Elementen. Sie stellt eine Karte 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 Schreiboperationen auf die einzelnen Eigenschaften innerhalb des
dataset erfolgen, die wiederum die Datenattribute repräsentieren.
Wert
Eine DOMStringMap.
Ein HTML data-* Attribut und sein entsprechendes DOM
dataset.property ändern ihren gemeinsamen Namen, abhängig davon, 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 (AbisZ) werden in Kleinbuchstaben umgewandelt. - In JavaScript
-
Der Name der Eigenschaft eines benutzerdefinierten Datenattributs ist derselbe wie der HTML-Attributname ohne das Präfix
data-. Einzelne Bindestriche (-) werden entfernt, und das nächstfolgende ASCII-Zeichen nach einem entfernten Bindestrich wird großgeschrieben, um den camel-cased Eigenschaftsnamen zu bilden.
Details und Beispiele für die Umwandlung zwischen der HTML- und JavaScript-Form werden im folgenden Abschnitt ausführlicher beschrieben.
Zusätzlich zu den unten stehenden Informationen finden Sie eine Anleitung zur Verwendung von HTML-Datenattributen in unserem Artikel Using data attributes.
Namenskonvertierung
dash-stylezucamelCaseKonvertierung-
Ein benutzerdefinierter Datenattributname wird wie folgt in einen Schlüssel für den
DOMStringMap-Eintrag umgewandelt:- Alle ASCII-Großbuchstaben (
AbisZ) werden in Kleinbuchstaben umgewandelt; - Das Präfix
data-(einschließlich des Bindestrichs) wird entfernt; - Für jeden Bindestrich (
U+002D), dem ein ASCII-Kleinbuchstabeabiszfolgt, wird der Bindestrich entfernt und der Buchstabe großgeschrieben; - Andere Zeichen (einschließlich anderer Bindestriche) bleiben unverändert.
- Alle ASCII-Großbuchstaben (
camelCasezudash-styleKonvertierung-
Die gegenteilige Umwandlung, die einen Schlüssel zu einem Attributnamen abbildet, verwendet folgendes Verfahren:
- Einschränkung: Vor der Umwandlung darf ein Bindestrich nicht direkt auf einen ASCII-Kleinbuchstaben
abiszfolgen; - Das Präfix
data-wird hinzugefügt; - Ein Bindestrich wird vor jedem ASCII-Großbuchstaben
AbisZhinzugefügt, dann wird der Buchstabe in Kleinbuchstaben umgewandelt; - Andere Zeichen bleiben unverändert.
- Einschränkung: Vor der Umwandlung darf ein Bindestrich nicht direkt auf einen ASCII-Kleinbuchstaben
Zum Beispiel entspricht ein data-abc-def Attribut dataset.abcDef.
Zugriff auf Werte
- Attribute können über den camelCase Namen/Schlüssel als Objekteigenschaft des
Datasets gesetzt und gelesen werden:
element.dataset.keyname. - Attribute können auch unter Verwendung der Klammernschreibweise gesetzt und gelesen werden:
element.dataset['keyname']. - Der
inOperator kann überprüfen, ob ein gegebenes Attribut existiert:'keyname' in element.dataset. Beachten Sie, dass dies die Prototypkette desdatasetdurchläuft und unsicher sein kann, wenn Sie externen Code haben, der die Prototypkette verunreinigen könnte. Es gibt mehrere Alternativen, wieObject.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 Zeichenfolge umgewandelt. Zum Beispiel:
element.dataset.example = nullwird indata-example="null"umgewandelt. -
Um ein Attribut zu entfernen, können Sie den
deleteOperator verwenden:delete element.dataset.keyname.
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 - Using data attributes
Element.getAttribute()undElement.setAttribute()