jQuery Daten vs-Attr?
Was ist der Unterschied in der Nutzung zwischen $.data
und $.attr
bei der Verwendung data-someAttribute
?
Mein Verständnis ist, dass $.data
gespeichert ist, innerhalb von jQuery $.cache
, nicht der DOM. Also, wenn ich Sie benutzen will $.cache
für die Speicherung von Daten, die ich verwenden sollte $.data
. Wenn ich möchte hinzufügen, die HTML5-data-Attribute, die ich verwenden sollte $.attr("data-attribute", "myCoolValue")
.
bitte Lesen Sie diese: forum.jquery.com/topic/when-to-use-attr-vs-data
Außer, dass es scheint nicht wirklich um die Frage zu beantworten...?
Eigentlich ist es nicht, indirekt. Anbringen eines Objekts über
B, nur zur info (obwohl das ist alt), das data-Attribut von
Viele Referenzen leicht zu finden über die Suche, aber da mir langweilig ist, hier gehen Sie: stackoverflow.com/a/22753630/84473
Außer, dass es scheint nicht wirklich um die Frage zu beantworten...?
Eigentlich ist es nicht, indirekt. Anbringen eines Objekts über
attr()
führen kann zu memory-leaks (zumindest im IE), während der Verwendung data()
ist sicher. Er deutet auf die dieser in seiner Antwort wenn er nicht explizit herauskommen und es sagen. Mehr info auf der jQuery-Doku (siehe "Zusätzliche Hinweise"): api.jquery.com/attrB, nur zur info (obwohl das ist alt), das data-Attribut von
data-someAttribute
ist ungültig; das pro-spec, nur Kleinschreibung erlaubt ist. Sie laufen in eine Vielzahl von seltsamen Fragen, durch die Verwendung von upper-case-chars.Viele Referenzen leicht zu finden über die Suche, aber da mir langweilig ist, hier gehen Sie: stackoverflow.com/a/22753630/84473
InformationsquelleAutor John B | 2011-08-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die übergabe von Daten an ein DOM-element vom server ist, müssen Sie die Daten auf dem element:
Anschließend können die Daten zugegriffen werden
.Daten()
in jQuery:Allerdings, wenn Sie speichern Daten auf einem DOM-Knoten in jQuery mit Daten, die Variablen gespeichert werden auf dem Knoten Objekt. Dies ist ein entgegenkommen für komplexe Objekte und Referenzen, wie die Speicherung der Daten auf den Knoten element als ein Attribut wird nur Platz für string-Werte.
- in meinem Beispiel von oben:
Auch die Namenskonvention für data-Attribute hat ein bisschen versteckt "gotcha":
HTML:
JS:
Der Bindestrich-Taste wird immer noch funktionieren:
HTML:
JS:
Jedoch das Objekt zurückgegeben
.data()
wird nicht der Bindestrich-Taste Satz:Es ist aus diesem Grund schlage ich vor, die Vermeidung der Bindestrich-Taste, in javascript.
Für HTML, halten mit der Bindestrich-form. HTML-Attribute werden sollen, um ASCII-automatisch kleingeschrieben werden, so
<div data-foobar></div>
,<DIV DATA-FOOBAR></DIV>
, und<dIv DaTa-FoObAr></DiV>
sind soll werden als identisch behandelt, aber für die beste Kompatibilität unteren Fall bilden sollten bevorzugt werden.Den
.Daten()
Methode auch führen Sie einige grundlegende auto-casting, wenn der Wert entspricht einem erkennbaren Muster:HTML:
JS:
Diese auto-casting-Fähigkeit ist sehr praktisch für die Instanziierung von widgets & plugins:
Wenn Sie absolut müssen den ursprünglichen Wert als string, dann müssen Sie mit
.attr()
:HTML:
JS:
Das war ein erfundenes Beispiel. Für die Speicherung der Farbwerte, die ich verwendet, um mit den numerischen hex-notation (d.h. 0xABC123), aber es ist erwähnenswert, dass hex war falsch analysiert, die in jQuery-Version 1.7.2, und nicht mehr geparst, in eine
Number
wie jQuery 1.8 rc 1.jQuery 1.8 rc 1 geändert, das Verhalten von auto-casting. Vor, ein format, das war eine gültige Darstellung eines
Number
würde umgewandelt werdenNumber
. Nun, Werte numerisch sind nur auto-cast, wenn Ihre Darstellung bleibt die gleiche. Dies ist am besten mit einem Beispiel.HTML:
JS:
Wenn Sie planen, auf die Verwendung von alternativen numerisch Syntax Zugriff auf numerische Werte, sicher sein, zu werfen, die Wert auf eine
Number
ersten, wie mit einem einfachen+
Betreiber.JS (Forts.):
.data()
wird nicht haben die Bindestrich-form gesetzt, so$('#bar').data('foo-bar-baz')
arbeiten, aber$('#bar').data()['foo-bar-baz']
nicht. Es ist aus diesem Grund, schlage ich vor, dass die Menschen vermeiden Sie die Verwendung des Bindestrich-form.ok, jetzt sehe ich, was du meinst. Wusste nicht, an diesem kleinen detail, vielen Dank für das update 🙂
welcher link? api.jquery.com/data ist der richtige link für die Methode, und hat sich nicht geändert, soweit ich weiß.
ich mag, foo,bar,baz,fizz,buzz mehr 😀
Liebe jede Zeile.
InformationsquelleAutor zzzzBov
Der Hauptunterschied zwischen den beiden ist, wo es gespeichert und wie darauf zugegriffen wird.
$.fn.attr
speichert die Informationen direkt auf das element Attribute, die öffentlich sichtbar sind nach der Inspektion, und auch welche aus dem element nativen API.$.fn.data
speichert die Informationen in einem lächerlich verdecken Platz. Es befindet sich in einem geschlossenen über eine lokale variable namensdata_user
eine Instanz einer lokal definierten Funktion Daten. Diese variable ist von außen nicht zugänglich von jQuery direkt.Daten mit
attr()
$(element).attr('data-name')
element.getAttribute('data-name')
,data-name
auch zugänglich$(element).data(name)
undelement.dataset['name']
undelement.dataset.name
Daten mit
.data()
.data(name)
.attr()
oder sonst irgendwoAuch
.attr()
ist der Weg zu gehen, wenn Sie danach wollen, verwenden Sie die data als Selektor (.data()
werden nicht gefunden werden; siehe codepen.io/anon/pen/EvawPV?Redakteure=1011)InformationsquelleAutor Travis J
Können Sie
data-*
Attribut einbetten von benutzerdefinierten Daten. Diedata-*
Attribute gibt uns die Möglichkeit zum einbetten von benutzerdefinierten Daten-Attribute, die auf alle HTML-Elemente.jQuery
.data()
- Methode können Sie die get/set-Daten von jeder Art, um DOM-Elemente in einer Weise, die sicher ist, von Zirkelbezügen und daher von memory leaks.jQuery
.attr()
Methode get/set Attribut-Wert nur für das erste element in dem aufeinander abgestimmten Satz.Beispiel:
InformationsquelleAutor Yogendra Chauhan