Du hast deinen AdBlocker an?

Es wäre ein Traum, wenn du ihn für t3n.de deaktivierst. Wir zeigen dir gerne, wie das geht. Und natürlich erklären wir dir auch, warum uns das so wichtig ist. Digitales High-five, deine t3n-Redaktion

Entwicklung & Design

HTML5: Eigene Attribute für Elemente erstellen

    HTML5: Eigene Attribute für Elemente erstellen
HTML5-Logo

Manchmal ist es notwendig, einem HTML-Element zusätzliche Informationen zu übergeben, für die sich jedoch kein passendes Attribut finden lässt. Mit HTML5 gibt es die Möglichkeit, individuelle Attribute für Dateninhalte zu erstellen. Diese können dann zum Beispiel mit JavaScript ausgelesen und weiterverarbeitet werden.

Gerade im Zusammenspiel mit JavaScript können zusätzliche Inhalte hilfreich sein, da man kein Attribut zweckentfremden muss und die individuellen Attribute ausschließlich so genutzt werden können, wie man es möchte.

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="http://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="http://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:

Finde einen Job, den du liebst zum Thema JavaScript, Webdesign

6 Reaktionen
denis.potschien
denis.potschien

@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.

Antworten
LX
LX

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.

Antworten
Elemente erstellen
Elemente erstellen

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.

Antworten
Daniel

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.

Antworten
Yannick
Yannick

Ich benutze die auch schon seit langem und anschließend einfach $('.foo').attr('data-foo'); und zack habe ich den Wert :)

Antworten
Dirk

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.

Antworten

Melde dich mit deinem t3n-Account an oder fülle die unteren Felder aus.

Abbrechen