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
des HTMLElement
-Interfaces bietet Lese-/Schreibzugriff auf benutzerdefinierte Datenattribute
(data-*
) von Elementen. Es stellt eine Zeichenfolgenzuordnung
(DOMStringMap
) mit einem Eintrag für jedes data-*
-Attribut bereit.
Hinweis:
Die dataset
-Eigenschaft kann selbst 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 das entsprechende DOM
dataset.property
passen ihren gemeinsamen Namen an, abhängig davon, ob sie gelesen oder geschrieben werden:
- In HTML
-
Der Attributname beginnt mit
data-
. Es 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 entspricht dem HTML-Attribut ohne das
data-
-Präfix und entfernt einzelne Bindestriche (-
), um den "camel-cased" Namen der Eigenschaft zu kapitalisieren.
Zusätzlich zu den unten stehenden Informationen finden Sie eine Anleitung zur Verwendung von HTML-Daten attributen in unserem Artikel Using data attributes.
Namenskonvertierung
- Umwandlung von
dash-style
incamelCase
-
Ein benutzerdefinierter Datenattributname wird wie folgt in einen Schlüssel für den
DOMStringMap
-Eintrag transformiert:- Alle ASCII-Großbuchstaben (
A
bisZ
) in Kleinbuchstaben umwandeln; - Das Präfix
data-
(einschließlich des Bindestrichs) entfernen; - Bei jedem Bindestrich (
U+002D
), dem ein ASCII-Kleinbuchstabea
bisz
folgt, den Bindestrich entfernen und den Buchstaben groß schreiben; - Andere Zeichen (einschließlich anderer Bindestriche) bleiben unverändert.
- Alle ASCII-Großbuchstaben (
- Umwandlung von
camelCase
indash-style
-
Die entgegengesetzte Transformation, die einen Schlüssel in einen Attributnamen umwandelt, verwendet die folgenden Schritte:
- Einschränkung: Vor der Umwandlung darf ein Bindestrich nicht unmittelbar von einem ASCII-Kleinbuchstaben
a
bisz
gefolgt werden; - Das Präfix
data-
hinzufügen; - Vor jedem ASCII-Großbuchstaben
A
bisZ
einen Bindestrich 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 über den camelCase-Namen/Schlüssel als Objekteigenschaft des
Datasets gesetzt und gelesen werden:
element.dataset.keyname
. - Attribute können auch mit der Klammernsyntax 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 vondataset
durchläuft und unsicher sein kann, wenn Sie externen Code haben, der die Prototype-Kette verschmutzen könnte. Mehrere Alternativen existieren, wieObject.hasOwn(element.dataset, 'keyname')
, oder einfach zu prüfen, obelement.dataset.keyname !== undefined
.
Werte setzen
-
Wenn das Attribut gesetzt wird, wird sein Wert immer in eine Zeichenfolge konvertiert. Zum Beispiel:
element.dataset.example = null
wird indata-example="null"
konvertiert. -
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 Klasse der HTML
data-*
globalen Attribute - Using data attributes
Element.getAttribute()
undElement.setAttribute()