Verwenden Sie Datenattribute
HTML ist so konzipiert, dass es erweiterbar ist, um Daten, die mit einem bestimmten Element verknüpft sein sollten, aber keine definierte Bedeutung haben müssen, zu unterstützen. data-*
Attribute ermöglichen es uns, zusätzliche Informationen in standardisierten, semantischen HTML-Elementen zu speichern, ohne auf andere Tricks wie nicht standardisierte Attribute oder zusätzliche Eigenschaften im DOM zurückzugreifen.
HTML-Syntax
Die Syntax ist einfach. Jedes Attribut an jedem Element, dessen Attributname mit data-
beginnt, ist ein Datenattribut. Angenommen, Sie haben einige Artikel und möchten zusätzliche Informationen speichern, die keine visuelle Darstellung haben. Verwenden Sie einfach data
-Attribute dafür:
<main> <article id="electric-cars" data-columns="3" data-index-number="12314" data-parent="cars"> <!-- Electric car content --> </article> <article id="solar-cars" data-columns="3" data-index-number="12315" data-parent="cars"> <!-- Solar car content --> </article> <article id="flying-cars" data-columns="4" data-index-number="12316" data-parent="cars"> <!-- Flying car content --> </article> </main>
Zugriff in JavaScript
Das Auslesen der Werte dieser Attribute in JavaScript ist ebenfalls sehr einfach. Sie könnten getAttribute()
mit ihrem vollständigen HTML-Namen verwenden, um sie auszulesen, aber der Standard definiert einen einfacheren Weg: ein DOMStringMap
, das Sie über eine dataset
-Eigenschaft auslesen können.
Um ein data
-Attribut über das dataset
-Objekt zu erhalten, greifen Sie auf die Eigenschaft mit dem Teil des Attributnamens nach data-
zu (beachten Sie, dass Bindestriche in Camel Case umgewandelt werden).
const article = document.querySelector("#electric-cars"); // The following would also work: // const article = document.getElementById("electric-cars") article.dataset.columns; // "3" article.dataset.indexNumber; // "12314" article.dataset.parent; // "cars"
Jede Eigenschaft ist ein String und kann gelesen und geschrieben werden. Im obigen Fall würde das Setzen von article.dataset.columns = 5
dieses Attribut in "5"
ändern.
Sie können auch document.querySelector()
oder document.querySelectorAll()
mit Datenattributselektoren verwenden, um ein Element oder alle Elemente zu finden, die übereinstimmen:
// Find all elements with a data-columns attribute const articles = document.querySelectorAll("[data-columns]"); // Find all elements with data-columns="3" const threeColumnArticles = document.querySelectorAll('[data-columns="3"]'); // You can then iterate over the results threeColumnArticles.forEach((article) => { console.log(article.dataset.indexNumber); });
Zugriff in CSS
Da Datenattribute einfache HTML-Attribute sind, können Sie sogar von CSS aus auf sie zugreifen. Um zum Beispiel die übergeordneten Daten im Artikel anzuzeigen, können Sie generierten Inhalt in CSS mit der attr()
-Funktion verwenden:
article::before { content: attr(data-parent); }
Sie können auch die Attributselektoren in CSS verwenden, um Stile gemäß den Daten zu ändern:
article[data-columns="3"] { width: 400px; } article[data-columns="4"] { width: 600px; }
Sie können all dies in diesem JS Bin Beispiel zusammenarbeiten sehen.
Datenattribute können auch gespeichert werden, um Informationen, die sich ständig ändern, wie Spielstände, zu enthalten. Mit den hier gezeigten CSS-Selektoren und JavaScript-Zugriffen können Sie einige schicke Effekte erstellen, ohne eigene Anzeigeprogramme schreiben zu müssen. Sehen Sie sich diesen Screencast für ein Beispiel mit generiertem Inhalt und CSS-Übergängen an (JS Bin Beispiel).
Datenwerte sind Strings. Zahlenwerte müssen im Selektor in Anführungszeichen gesetzt werden, damit das Styling wirksam wird.
Probleme
Speichern Sie keine Inhalte, die sichtbar und zugänglich sein sollten, in Datenattributen, da unterstützende Technologien möglicherweise nicht darauf zugreifen können. Darüber hinaus könnten Suchmaschinen die Werte der Datenattribute nicht indizieren.
Siehe auch
- Dieser Artikel ist adaptiert von Using data attributes in JavaScript and CSS on hacks.mozilla.org.
- Benutzerdefinierte Attribute werden auch in SVG 2 unterstützt; siehe
HTMLElement.dataset
unddata-*
für mehr Informationen. - Wie man HTML-Datenattribute verwendet (Sitepoint)