2010-12-08 7 views
6

Kann mir jemand sagen, wo jquery data() speichert die Daten und wann es gelöscht wird und wie?Jquery Daten() Speicher

Gibt es irgendein Leistungsproblem, wenn ich dies verwende, um ajax Anrufergebnis zu speichern?

Zum Beispiel:

$("body").data("test", { myData: 'abcd'}); 
+0

es auf der Client-Seite nur dann gespeichert wird, war ich jquery Daten und jquery Metadaten-Plugins unter Verwendung der Daten retrive und lief nie in jedes Problem – kobe

Antwort

3

siehe den Inhalt von jquery

Die jQuery.data() Methode US-Daten von jeder Art zu DOM-Elementen in eine Weise befestigen kann, die aus zirkulären Referenzen sicher ist und daher frei von Speicherlecks. jQuery stellt sicher, dass die Daten entfernt werden, wenn DOM-Elemente über jQuery-Methoden entfernt werden und wenn der Benutzer die Seite verlässt. Wir können mehrere unterschiedliche Werte für ein einzelnes Element festlegen und sie später abrufen:

+0

dank @gov. Aber im folgenden Artikel http://apheliondynamics.com/blog/2010/01/19/the-power-of-jquery-data-and-a-practical-example/article wird erwähnt, dass data() den Inhalt speichert im Cache. So war ich verwirrt, als tatsächlich der Cache gelöscht wird! – ANP

+0

@ANP gehen Sie zu dieser Seite, http://www.art.com/gallery/id--c23944/fine-art-prints.htm?ui=351BF178E486494982CDA4842EB6BD55 und machen Sie eine Ansichtsquelle und prüfen Sie auf versteckte Werte, löschen Sie dann die Caches von Ihr Browser, immer noch können Sie sehen, die Werte /// sie sind als Teil der Dom Struktur gespeichert self, ich glaube nicht, dass sie im Cache gespeichert sind ... – kobe

26

Alle Daten werden in einer Eigenschaft des Objekts jQuery mit dem Namen cache gespeichert. Protokollieren Sie den Inhalt von $.cache in Ihrer Konsole, um alle Daten und Ereignisse anzuzeigen, die mit einem beliebigen DOM-Element verknüpft sind.

Die Art und Weise, wie jQuery ein DOM-Objekt mit einem Objekt in diesem Cache verknüpft, geschieht durch Manipulation des DOM-Objekts. Sagen wir von

<input type="text" value="hello" /> 

, die einen Datenschlüssel hat den Namen „foo“

$(e).data("foo", "bar"); 

Jetzt jQuery unterhält eine zufällige Zeichenfolge des Formulars jQuery<current time in ms> zum Beispiel jQuery1291790929680, die auch zugänglich ist, ein Eingangselement haben $.expando. jQuery fügt diese expando-Zeichenfolge als Schlüssel für jedes DOM-Objekt ein, dem ein Datenelement oder ein Ereignis zugeordnet ist. So ist das DOM-Objekt für das obige Eingangselement wird diese enthalten EXPANDO Schlüssel mit einem gewissen ganzzahligen Wert wie:

jQuery1291790929680: 4 

4 ist nur ein beliebige Beispiel, aber diese Zahl bezeichnet einen Index in dem $.cache Objekt, wobei die zugehörigen Daten und Ereignisse für dieses DOM-Objekt werden gespeichert. Also diese Informationen gegeben, die Daten des oben Eingangselement abzurufen, können wir indirekt schreiben:

$.cache[4]["foo"] 

die „bar“ zurückgeben soll, die eine indirekte Art und Weise $(e).data("foo") des Schreibens.

Ein illustrated example des oben Unsinn :)

+0

Ich bin wirklich dankbar für Ihre Erklärung. – ANP

+0

@ANP - danke, ich bin froh, dass es hilfreich war :) – Anurag