2010-12-08 19 views
6

Quelqu'un peut-il me dire où jquery data() stocke les données et quand il est effacé et comment?Jquery data() stockage

Y a-t-il des problèmes de performances si je l'utilise pour stocker le résultat de l'appel ajax?

Par exemple:

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

il est stocké sur le côté client uniquement, j'utilisais des données jquery et jquery données méta plugins retrive les données et ne jamais couru dans un problème – kobe

Répondre

3

voir le contenu de jquery

La méthode jQuery.data() nous permet de joindre des données de tout type d'éléments DOM d'une manière qui est à l'abri des références circulaires et donc exempt de fuites de mémoire. jQuery garantit que les données sont supprimées lorsque les éléments DOM sont supprimés via les méthodes jQuery et lorsque l'utilisateur quitte la page. Nous pouvons définir plusieurs valeurs distinctes pour un seul élément et les récupérer plus tard:

+0

grâce @gov. Mais dans l'article suivant http://apheliondynamics.com/blog/2010/01/19/the-power-of-jquery-data-and-a-practical-example/article, il est mentionné que data() stocke le contenu dans le cache. Donc, j'étais confus lorsque le cache est effacé! – ANP

+0

@ANP aller à cette page, http://www.art.com/gallery/id--c23944/fine-art-prints.htm?ui=351BF178E486494982CDA4842EB6BD55 et faire une source de vue et vérifier les valeurs cachées, puis effacer les caches de votre navigateur, encore vous pouvez voir les valeurs /// ils sont stockés comme une partie de la structure dom selef, je ne pense pas qu'ils sont stockés dans le cache ... – kobe

26

Toutes les données sont stockées dans une propriété de l'objet jQuery nommé cache. Consignez le contenu de $.cache dans votre console pour voir toutes les données et tous les événements associés à un élément DOM.

La manière dont jQuery lie un objet DOM à un objet de ce cache consiste à manipuler l'objet DOM. Disons que nous avons un élément d'entrée

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

qui a une clé de données nommée "foo"

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

Maintenant jQuery maintient une chaîne aléatoire de la forme jQuery<current time in ms>, par exemple, jQuery1291790929680, qui est également accessible par $.expando. jQuery ajoute cette chaîne expando en tant que clé à chaque objet DOM contenant un élément de données ou un événement associé. Ainsi, l'objet DOM pour l'élément d'entrée ci-dessus contiendra cette expando clé avec une valeur entière telle que:

jQuery1291790929680: 4 

4 est juste un exemple au hasard, mais ce nombre désigne un index dans l'objet $.cache, où les données associées et les événements pour cet objet DOM sont stockés. Donc, étant donné ces informations, pour récupérer les données de l'élément d'entrée ci-dessus, nous pouvons écrire indirectement:

$.cache[4]["foo"] 

qui devrait retourner « bar », ce qui est une manière indirecte de l'écriture $(e).data("foo").

Un illustrated example du non-sens ci-dessus :)

+0

Je suis vraiment reconnaissant pour votre explication. – ANP

+0

@ANP - merci, je suis content que ce fut utile :) – Anurag