HTML5: Eigene Attribute für Elemente erstellen
Wie erstelle ich ein eigenes Attribut mit HTML5?
Alle benutzerdefinierten Attribute haben eines gemeinsam: Sie beginnen alle mit „data-“ – gefolgt von einer individuellen Bezeichnung. Daher werden diese Attribute auch „Data-*“ – gesprochen: Data-Dashs – genannt. Die Attributbezeichnung nach dem „data-“ muss mindestens ein Zeichen lang sein. Es dürfen Buchstaben sowie weitere Bindestriche verwendet werden.
<a href="https://t3n.de/" data-kategorie="magazin" id="verweis" />t3n.de</a>
Der Inhalt des Attributes ist eine beliebige Zeichenkette. Es können beliebige viele benutzerdefinierte Attribute einem Element hinzugefügt werden.
Was mache ich mit benutzerdefinierten Attributen?
Die zusätzlichen Informationen, die ich mittels Data-Dashs einem Element hinzufüge, müssen nun in irgendeiner Form ausgelesen und verarbeitet werden. In der Regel dürfte JavaScript dafür in Frage kommen. Im obigen Beispiel ist einem Link eine Kategorie mittels Data-Dash zugeordnet worden. Mit JavaScript lässt sich diese Kategorie nun auslesen und weiterverwenden.
Um auf Data-Dash-Attribute zuzugreifen, gibt es in der HTML5-JavaScript-API eine spezielle Eigenschaft, mit der auf Data-Dashs zugriffen werden dann, die „dataset“-Eigenschaft:
var kategorie = document.getElementById("verweis").dataset("kategorie");
Mit dieser Eigenschaft lassen sich gezielt benutzerdefinierte Attribute auslesen. Da bisher kein Browser diese Eigenschaft kennt, kann man den Data-Dash auch als gewöhnliches Attribut behandeln und mit der Eigenschaft „getAttribute“ auslesen:
var kategorie = document.getElementById("verweis").getAttribute("data-kategorie");
Diese Möglichkeit unterstützen alle halbwegs zeitgemäßen Browser und führt zum selben Ergebnis.
Anwendungsbeispiel
Als kleines Beispiel sollen Links, die derselben Kategorie angehören, hervorgehoben werden, sobald die entsprechende Kategorie angeklickt wurde. Zunächst also die Liste mit den Links und den Data-Dashs sowie die Kategorieauswahl:
<p><span onclick="linkausgabe('magazin')">Magazine</span> | <span onclick="linkausgabe('verlag')">Verlage</span></p> <p id="linkliste"> <a href="https://t3n.de/" data-kategorie="magazin">t3n.de</a><br /> <a href="http://yeebase.com/" data-kategorie="verlag">Magazin 2</a> </p>
Der erste Abschnitt ruft jeweils eine Funktion auf und übergibt den Kategorienamen. Der untere Abschnitt enthält die Links. Die entsprechende JavaScript-Funktion liest die Links aus und hebt Links der entsprechenden Kategorie hervor, indem sie fett dargestellt werden:
function linkausgabe(kategorie) { liste = document.getElementById("linkliste"); for (i = 0; i < liste.childNodes.length; i++) { if (liste.childNodes[i].nodeName == "A") { if (liste.childNodes[i].getAttribute("data-kategorie") == kategorie) { liste.childNodes[i].style.fontWeight = "bold"; } else { liste.childNodes[i].style.fontWeight = "normal"; } } } }
Weitere Anwendungsbeispiele
Im Bereich des Responsive Webdesigns werden Data-Dashs eingesetzt, um für ein Bild zwei unterschiedliche Quelldateien anzugeben. Dabei wird als normale Quelle eine niedrig aufgelöste Bilddatei angeben und über den Data-Dash zusätzlich eine hoch aufgelöste. Letztere ersetzt dann per JavaScript die niedrig aufgelöste Datei für die Ausgabe auf Geräten mit entsprechen großen Anzeigeflächen:
<img src="kleines_bild.jpg" data-fullsrc="grosses_bild.jpg" />
Auch JavaScript-Bibliotheken wie jQuery setzen zunehmend auf Data-Dashs.
Was man nicht tun sollte
Data-Dashs sollten nicht eingesetzt werden, wenn es alternative Attribute gibt. Also Titel sollten über die TITLE-Eigenschaft angeben werden anstatt über ein benutzerdefiniertes Attribut.
Auch sollten Data-Dashs nicht eingesetzt werden, um Mikroformate zu ersetzen. Data-Dashs sind ausschließlich für die interne Nutzung gedacht und nicht, um Informationen „nach außen zu tragen“. Entsprechend dürften auch Suchmaschinen Inhalte aus Data-Dash-Attributen ignorieren.
Die meisten modernen Browser unterstützen Data-Dashs zwar. Aber der aktuelle Internet Explorer ist noch außen vor. Also sollten Data-Dahs derzeit nur ergänzend eingesetzt werden.
Was haltet ihr von benutzerdefinierten Attributen? Setzt ihr sie bereits ein oder wartet ihr, bis auch der Internet Explorer Data-Dashs unterstützt?
Weiterführende Links zum Thema HTML5: HTML5-Howto: Aufklappboxen ohne JavaScript
Die data-Attribute können in Verbindung mit jQuery bereits seit längerem vollkommen bedenkenfrei eingesetzt werden, auch im Internet Explorer. Auch ohne jQuery ist die Abfrage der Attribute im Internet Explorer über getAttribute() machbar. In diesem Fall muss allerdings der vollständige Attributname „data-*“ überheben werden, was jQuery in seiner .data() Methode abstrahiert.
Ich benutze die auch schon seit langem und anschließend einfach $(‚.foo‘).attr(‚data-foo‘); und zack habe ich den Wert :)
Würde man immer warten, bis selbst der Internet Explorer alles vollständig unterstützt, lägen wir noch ein gutes Stück zurück. Finde die Möglichkeit benutzerdefinierte Attribute angeben zu können sehr gut und hilfreich.
Ob und wie man per CSS dran kommt wäre vielleicht auch interessant.
Der „Print“-Ansicht bei Heise wurde früher nur per CSS gemacht und konnte auch die URL unten am Ende angeben. Per css kommt wohl also wohl auch an Attribute.
Da ich kein Javascript einschalte, wenn ich nicht unbedingt muss, fällt mir sowas auf.
Evtl. lässt sich also für verschiedene Geräte oder Ziele sowas auch sinnvoll per CSS nutzen.
Worin begründet sich denn die Aussage, dass der IE kein data-* kann? Laut http://caniuse.com/#feat=dataset macht das sogar schon der 6er mit, und ich habe damit auch bislang keine Probleme festgestellt.
@Dirk: Da die eigens für Data-Dashs vorgesehene Methode „dataset()“ noch kein Browser unterstützt, muss derzeit über jeden Browser der Data-Dash-Wert über „getAttribute()“ augelesen werden. Und das funktioniert dann auch – wie du es beschrieben hast – im Internet Explorer.