Benutzerdefinierte Datenattribute: http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data
Wenn ich "Arbeit" sage, meine ich, wenn ich HTML wie folgt habe:
<div id="geoff" data-geoff="geoff de geoff">
wird das folgende JavaScript:
var geoff = document.getElementById('geoff');
alert(geoff.dataGeoff);
in IE 6 einen Alarm mit "geoff de geoff" erzeugen?
data-geoff
aufgrund des Zeichens "-" keine gültige JS-Kennung ist. Sie müsstendataGeoff
in Skripten verwenden.geoff.dataGeoff
hat nicht funktioniert. Es stellte sich heraus ( whatwg.org/specs/web-apps/current-work/multipage/… ), dass es sein solltegeoff.dataset.geoff
, aber wieelement.dataset
esundefined
in modernen Browsern immer noch der Fall ist, wird dies auch nicht unterstützt.Antworten:
Sie können Werte von benutzerdefinierten (oder Ihren eigenen) Attributen mit abrufen
getAttribute
. Folgen Sie Ihrem Beispiel mitIch kann den Wert der
data-geoff
Verwendung erhaltenSehen MSDN . Und obwohl dort erwähnt wird, dass Sie IE7 benötigen, damit dies funktioniert, habe ich dies vor einiger Zeit mit IE6 getestet und es hat korrekt funktioniert (auch im Mackenmodus).
Dies hat natürlich nichts mit HTML5-spezifischen Attributen zu tun.
quelle
Ja, sie arbeiten.
IE hat
getAttribute()
von IE4 unterstützt, wofür jQuery intern verwendetdata()
.Sie können also entweder die
.data()
Methode von jQuery oder einfaches Vanille-JavaScript verwenden:Beispiel-HTML
Javascript
jQuery
quelle
Note: All browsers can already use data-* attributes and access them using getAttribute. "Supported" refers to accessing the values using the dataset property. Current spec only refers to support on HTML elements, only some browsers also have support for SVG/MathML elements.
<div lala="Tom"></div>
, wäre das in IE6 in Ordnung? Wie würden Sie den Wert lesen?IE6 unterstützt nicht nur die HTML5-Datenattributfunktion nicht, tatsächlich unterstützt sie praktisch kein aktueller Browser! Die einzige Ausnahme im Moment ist Chrome.
Es steht Ihnen völlig frei,
data-geoff="geoff de geoff"
als Attribut zu verwenden, aber nur Chrome der aktuellen Browserversionen gibt Ihnen die.dataGeoff
Eigenschaft.Glücklicherweise können alle aktuellen Browser - einschließlich IE6 - mit der Standard-DOM-
.getAttribute()
Methode auf unbekannte Attribute verweisen.getAttribute("data-geoff")
und funktionieren daher überall.In naher Zukunft werden neue Versionen von Firefox und Safari die Datenattribute unterstützen. Da es jedoch eine sehr gute Möglichkeit gibt, darauf zuzugreifen, die in allen Browsern funktioniert, gibt es wirklich keinen Grund, die HTML5-Methode zu verwenden Arbeiten Sie nur für einige Ihrer Besucher.
Weitere Informationen zum aktuellen Stand der Unterstützung für diese Funktion finden Sie auf CanIUse.com .
Hoffentlich hilft das.
quelle
dataset
Eigenschaft, aber in allen Browsern können Sie Daten in Attributen mit dem Präfix "speichern"data-
und (wie Sie sagen) über abrufengetAttribute
. In gewisser Hinsicht unterstützen sie die Funktion, da Sie die Attribute selbst effektiv nutzen können.dataset
Immobilie zu nutzen, um auf sie zuzugreifen - ich weiß nicht, welche Vorteile sie bieten sollgetAttribute
..dataXYZ
Eigenschaften. Wie Sie sagen, wird die grundlegende Funktionalität weitgehend unterstützt, aber nicht, weil es sich um HTML5 handelt.Ich denke, IE hat dies immer unterstützt (zumindest ab IE4) und Sie können von JS aus darauf zugreifen. Sie wurden "expando properties" genannt. Siehe alten MSDN-Artikel
Dieses Verhalten kann deaktiviert werden, indem die expando- Eigenschaft für ein DOM-Element auf false gesetzt wird (standardmäßig true, daher funktionieren die expando- Eigenschaften standardmäßig).
Bearbeiten: URL korrigiert
quelle
Wenn Sie alle benutzerdefinierten Datenattribute wie die Dataset-Eigenschaft in neueren Browsern gleichzeitig abrufen möchten, können Sie Folgendes tun. Dies ist, was ich getan habe und was für mich in ie7 + großartig funktioniert.
quelle
Im IE6 funktioniert es möglicherweise nicht. Als Referenz: MSDN
Ich schlage vor, jQuery zu verwenden, um die meisten Fälle zu behandeln:
Versuchen Sie dies in Ihrer Codierung.
quelle