2011-09-30 9 views
6

¿Puedo utilizar la función de datos () para almacenar un elemento dom (o un elemento jQuery) en otro elemento? (Consulte el código a continuación)En jQuery, ¿puedo almacenar elementos usando .data() en otro elemento para una recuperación rápida?

¿Lo almacena por valor o como referencia? ¿Es una buena práctica?

Quiero ser capaz de encontrar rápida y fácilmente el elemento esclavo (véase el código de abajo) de un elemento principal, así:

$slave = $('.some .path .to .slave'); 
$master = $('.some .path .to .master');  
$master.data('slave', $slave);  
$master.click(function(){ $(this).data('slave').toggle() }); 

(obviamente, el código es estúpida, pero estoy realmente . bucle a través de una gran cantidad de elementos de maestro y esclavo)

Respuesta

3

Puede almacenar lo que desee, independientemente de si debe o no.

Las variables JS son referencias a objetos, ¿no? (Eso es solo parcialmente retórico – ¿qué otra cosa podría devolver una consulta DOM que no sea una referencia? ¿Una copia profunda?)

+0

Supongo que ni una referencia ni una copia profunda del DOM, pero un objeto jQuery que tiene un montón de cosas y tal vez algunas referencias a objetos DOM. – david

+0

(¿Qué es una variable que hace referencia a un objeto jQuery si no es una referencia?) –

+0

Sí, pero mantener una referencia a un objeto mantendría todo el objeto jquery en el alcance, ¿no? no es solo una referencia a un nodo dom que ya existiría, supongo. – david

0

sé que usted puede hacer esto:

var slavePath=$('.some .path .to .slave'); 
var master=$('.some .path .to .master').data('slave', slavePath); 
master.click(function(){ $($this.data('slave')).toggle()}); 

tienda sólo el selector al esclavo, no todo el objeto.

+0

Probablemente haya encontrado un error en su código, slavePath contiene una lista de elementos en su caso. – Weboide

Cuestiones relacionadas