Stockage de données Jquery()

est-ce que quelqu'un peut me dire où jquery data() stocke les données et quand elles sont effacées et comment?

y a-t-il un problème de performance si je l'utilise pour stocker le résultat d'appel ajax?

par exemple:

$("body").data("test", { myData: 'abcd'});
6
demandé sur jball 2010-12-08 09:32:16

2 réponses

voir le contenu de jquery

The jQuery.la méthode data () nous permet d'attacher des données de n'importe quel type aux éléments DOM d'une manière qui est sûre des références circulaires et donc sans fuites de mémoire. jQuery s'assure que les données sont supprimées lorsque les éléments DOM sont supprimés par 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:

3
répondu kobe 2010-12-08 06:37:20

toutes les données sont stockées à l'intérieur d'une propriété de l'objet jQuery appelé cache . Enregistrez le contenu de $.cache dans votre console pour voir toutes les données et événements associés à un élément DOM.

la façon dont jQuery relie un objet DOM à un objet dans ce cache est de 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 appelé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 comme clé à chaque objet DOM qui a 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 clé expando avec une valeur entière telle que:

jQuery1291790929680: 4

4 est juste un exemple aléatoire, mais ce nombre dénote un index dans l'objet $.cache , où le les données et événements pour cet objet DOM sont stockés. Ainsi, compte tenu de cette information, pour récupérer les données de l'élément d'entrée ci-dessus, nous pouvons écrire indirectement:

$.cache[4]["foo"]

qui doit renvoyer "bar", ce qui est une façon indirecte d'écrire $(e).data("foo") .

Un exemple illustré de la au-dessus de bêtises :)

26
répondu Anurag 2010-12-08 07:28:16