Was ist der Unterschied in der Verwendung zwischen $.data
und $.attr
bei der Verwendung data-someAttribute
?
Meines Wissens nach wird das $.data
in jQuery's gespeichert $.cache
, nicht im DOM. Daher sollte ich verwenden, wenn ich $.cache
für die Datenspeicherung verwenden möchte $.data
. Wenn ich HTML5-Datenattribute hinzufügen möchte, sollte ich verwenden $.attr("data-attribute", "myCoolValue")
.
javascript
jquery
html
custom-data-attribute
John B.
quelle
quelle
attr()
kann zu Speicherverlusten führen (zumindest im Internet Explorer), während die Verwendungdata()
sicher ist. Er weist in seiner Antwort darauf hin, obwohl er nicht ausdrücklich herauskommt und es sagt. Weitere Informationen zu den jQuery-Dokumenten (siehe "Zusätzliche Hinweise"): api.jquery.com/attrdata-someAttribute
ist ungültig; Gemäß Spezifikation ist nur Kleinbuchstaben zulässig. Sie werden auf eine Vielzahl von seltsamen Problemen stoßen, wenn Sie Zeichen in Großbuchstaben verwenden.Antworten:
Wenn Sie Daten vom Server an ein DOM-Element übergeben, sollten Sie die Daten für das Element festlegen:
Auf die Daten kann dann
.data()
in jQuery zugegriffen werden :Allerdings , wenn Sie Daten auf einem DOM - Knoten in jQuery speichern unter Verwendung von Daten, werden die Variablen auf dem Knoten gespeichert Objekt . Dies ist komplexe Objekte und Referenzen , wie die Speicherung der Daten auf dem Knoten aufzunehmen Element als Attribut wird nur Stringwerte aufzunehmen.
Fortsetzung meines Beispiels von oben:Außerdem hat die Namenskonvention für Datenattribute ein verstecktes "Gotcha":
HTML: JS:Der mit Bindestrich versehene Schlüssel funktioniert weiterhin:
HTML: JS:Für das von zurückgegebene Objekt ist
.data()
jedoch kein getrennter Schlüssel festgelegt:Aus diesem Grund empfehle ich, den mit Bindestrich versehenen Schlüssel in Javascript zu vermeiden.
Verwenden Sie für HTML weiterhin das mit Bindestrich versehene Formular. HTML - Attribute sollen erhalten ASCII-Kleinbuchstaben automatisch , so
<div data-foobar></div>
,<DIV DATA-FOOBAR></DIV>
und<dIv DaTa-FoObAr></DiV>
sind angeblich als identisch behandelt werden, aber für die beste Kompatibilität der unteren Gehäuseform bevorzugt werden sollte.Die
HTML: JS:.data()
Methode führt auch ein grundlegendes Auto-Casting durch, wenn der Wert mit einem erkannten Muster übereinstimmt:Diese Auto-Casting-Funktion ist sehr praktisch, um Widgets und Plugins zu instanziieren:
Wenn Sie unbedingt den ursprünglichen Wert als Zeichenfolge haben müssen, müssen Sie Folgendes verwenden
HTML: JS:.attr()
:Dies war ein erfundenes Beispiel. Zum Speichern von Farbwerten habe ich die numerische Hex-Notation (dh 0xABC123) verwendet, aber es ist erwähnenswert, dass Hex in jQuery-Versionen vor 1.7.2 falsch analysiert wurde und ab
Number
jQuery 1.8 rc 1 nicht mehr in a analysiert wird .jQuery 1.8 rc 1 hat das Verhalten des automatischen Castings geändert . Zuvor wurde jedes Format, das eine gültige Darstellung von a war
HTML: JS:Number
, umgewandeltNumber
. Jetzt werden numerische Werte nur dann automatisch umgewandelt, wenn ihre Darstellung gleich bleibt. Dies lässt sich am besten anhand eines Beispiels veranschaulichen.Wenn Sie alternative numerische Syntaxen für den Zugriff auf numerische Werte verwenden möchten, müssen Sie den Wert in einen
JS (Forts.):Number
ersten Wert umwandeln, z. B. mit einem unären+
Operator.quelle
.data()
wird nicht die Bindestriche Form gesetzt haben, so$('#bar').data('foo-bar-baz')
funktionieren wird, aber$('#bar').data()['foo-bar-baz']
nicht. Aus diesem Grund schlage ich vor, dass die Leute die Verwendung der Form mit Bindestrich vermeiden.Der Hauptunterschied zwischen den beiden besteht darin, wo es gespeichert ist und wie darauf zugegriffen wird.
$.fn.attr
speichert die Informationen direkt auf dem Element in Attributen, die bei der Überprüfung öffentlich sichtbar sind und auch über die native API des Elements verfügbar sind.$.fn.data
speichert die Informationen an einem lächerlich dunklen Ort. Es befindet sich in einer geschlossenen lokalen Variablen,data_user
die als Instanz einer lokal definierten Funktion Data bezeichnet wird. Auf diese Variable kann von außerhalb von jQuery nicht direkt zugegriffen werden.Datensatz mit
attr()
$(element).attr('data-name')
element.getAttribute('data-name')
,data-name
auch zugänglich von$(element).data(name)
undelement.dataset['name']
und warelement.dataset.name
Datensatz mit
.data()
.data(name)
.attr()
oder irgendwo andersquelle
.attr()
ist der Weg zu gehen, wenn danach Sie verwenden mögen Daten als Selektor (.data()
wird nicht gefunden, siehe codepen.io/anon/pen/EvawPV?editors=1011 )Sie können
data-*
Attribute verwenden, um benutzerdefinierte Daten einzubetten. Diedata-*
Attribute geben uns die Möglichkeit, benutzerdefinierte Datenattribute in alle HTML-Elemente einzubetten.Mit der jQuery-
.data()
Methode können Sie Daten eines beliebigen Typs für DOM-Elemente auf eine Weise abrufen / festlegen, die vor Zirkelverweisen und damit vor Speicherlecks geschützt ist.jQuery-
.attr()
Methode Attributwert abrufen / festlegen nur für das erste Element in der übereinstimmenden Gruppe.Beispiel:
quelle