2010-12-08 12 views
6

¿Alguien puede decirme dónde jquery data() almacena los datos y cuándo se borran y cómo?Jquery data() storage

¿Hay algún problema de rendimiento si uso esto para almacenar el resultado de la llamada ajax?

Por ejemplo:

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

se almacena en el lado del cliente solamente, yo estaba usando los datos de jQuery y jQuery plugins meta datos retrive los datos y nunca se topó con ningún problema gracias – kobe

Respuesta

3

ver el contenido desde jquery

El método jQuery.data() nos permite adjuntar datos de cualquier tipo de elementos DOM de una manera que está a salvo de referencias circulares y por lo tanto libre de pérdidas de memoria. jQuery garantiza que los datos se eliminen cuando los elementos DOM se eliminan mediante métodos jQuery y cuando el usuario abandona la página. Podemos establecer varios valores distintos para un solo elemento y recuperarlos más tarde:

+0

@gov. Pero en el siguiente artículo http://apheliondynamics.com/blog/2010/01/19/the-power-of-jquery-data-and-a-practical-example/article se menciona que data() almacena el contenido en caché ¡Así que estaba confundido cuando en realidad se borró el caché! – ANP

+0

@ANP vaya a esta página, http://www.art.com/gallery/id--c23944/fine-art-prints.htm?ui=351BF178E486494982CDA4842EB6BD55 y haga una vista de origen y verifique los valores ocultos, luego borre las cachés de su navegador, aún puede ver los valores /// que están almacenados como parte de la estructura del dom it selef, no creo que estén almacenados en caché ... – kobe

26

Todos los datos se almacenan dentro de una propiedad del objeto jQuery llamado cache. Registre los contenidos de $.cache en su consola para ver todos los datos y eventos asociados con cualquier elemento DOM.

La manera en que jQuery vincula un objeto DOM con un objeto en este caché es manipulando el objeto DOM. Digamos que tenemos un elemento de entrada

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

que tiene una clave de datos llamado "foo"

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

Ahora jQuery mantiene una cadena aleatoria de forma jQuery<current time in ms>, por ejemplo, jQuery1291790929680, que también es accesible por $.expando. jQuery agrega esta cadena expandida como una clave para cada objeto DOM que tiene un elemento de datos o evento asociado. Así el objeto DOM para el elemento de entrada por encima contendrá esta expando clave con un poco de valor entero, tales como:

jQuery1291790929680: 4 

4 es sólo un ejemplo al azar, pero este número indica un índice en el objeto $.cache, donde los datos asociados y los eventos para este objeto DOM se almacenan. Así que dada esta información, para recuperar los datos del elemento de entrada anterior, indirectamente, podemos escribir:

$.cache[4]["foo"] 

que debe devolver "barra", que es una forma indirecta de escribir $(e).data("foo").

Un illustrated example del disparate anterior :)

+0

Estoy muy agradecido por su explicación. – ANP

+0

@ANP - gracias, me alegro de que haya sido útil :) – Anurag