2013-03-20 3 views
60

In HTML5 können Elemente beliebige Metadaten in XML-Attributen speichern, deren Namen mit data- wie <p data-myid="123456"> beginnen. Ist das auch Teil der SVG-Spezifikation?Unterstützen SVG-Dokumente benutzerdefinierte Datenattribute?

In der Praxis funktioniert diese Technik an vielen Stellen gut für SVG-Dokumente. Aber ich würde gerne wissen, ob es Teil der offiziellen SVG-Spezifikation ist oder nicht, weil das Format jung genug ist, dass es immer noch eine große Inkompatibilität zwischen den Browsern gibt, besonders im mobilen Bereich. Bevor ich also Code beginne, würde ich gerne wissen, ob ich erwarten kann, dass zukünftige Browser dies unterstützen.

Ich fand this message von der Arbeitsgruppe Mailingliste sagen sie "erwarten [sie] wird" es zu unterstützen. Wurde das offiziell?

Antwort

97

Während andere Antworten technisch korrekt sind, unterlassen sie die Tatsache, dass SVG einen alternativen Mechanismus für data-* bietet. SVG allows any attribute and tag wird eingeschlossen, solange es nicht mit den vorhandenen Konflikten in Konflikt steht (mit anderen Worten: Sie sollten Namespaces verwenden).

Um diese (äquivalent) Mechanismus zu verwenden:

  • Verwendung mydata:id statt data-myid, wie folgt aus: <p mydata:id="123456">
  • stellen Sie sicher, den Namespace in SVG Starttag definieren, wie folgt aus: <svg xmlns:mydata="http://www.myexample.com/whatever">
+5

Dritter Teil der Gleichung: 'el.getAttribute ('mydata: id')', um die Daten zu erhalten, die Sie an das SVG-Element angehängt haben. (Hinweis: Wenn Sie d3 verwenden, wird der Namespace standardmäßig entfernt und Sie werden nur 'el.getAttribute ('id')'.) – ericsoco

+1

Dies sollte die akzeptierte Antwort sein. SVG ist eine Erweiterung von XML, mit der Sie Tags aus verschiedenen Namespaces verwenden können. – Melle

+0

Warum muss der Namespace benutzerdefiniert sein? Warum würde ein HTML5-Namespace im Dokument nicht ausreichen, um 'data-*' in SVG zu verwenden? –

9

gibt es einen allgemeineren Mechanismus.

svg unterstützt desc Elemente, die beliebige XML aus anderen Namespaces enthalten können. Verknüpfen Sie Instanzen dieser Elemente oder untergeordneten Knoten aus Ihrem eigenen Namespace mit abhängigen IDs oder refid-Attributen.

this is the relevant part of the spec (5.4).

+1

Vielen Dank für die Zeiger. Sollte ich schlussfolgern, dass SVG offiziell keine "Daten" -Attribute unterstützt? – Leopd

+1

Ja, siehe die Antwort von unor. – collapsar

+1

Ist 'desc' nicht für Erreichbarkeitswünsche gedacht? – matanster

13
Verwandte Themen