2011-09-30 11 views
6

Posso utilizzare la funzione data() per memorizzare un elemento dom (o un elemento jQuery) su un altro elemento? (vedi codice sotto)In jQuery, posso memorizzare elementi usando .data() su un altro elemento per il recupero veloce?

Lo memorizza per valore o per riferimento? È una buona pratica?

Voglio essere in grado di trovare rapidamente e facilmente l'elemento slave (vedi codice qui sotto) di un elemento maestro, in questo modo:

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

(ovviamente il codice è stupido, ma sono in realtà . loop attraverso un sacco di master e slave elementi)

risposta

3

È possibile memorizzare ciò che si desidera, anche se non si dovrebbe.

Le variabili JS sono riferimenti a oggetti, no? (Questo è solo parzialmente retorico – cos'altro restituirebbe una query DOM diversa da un riferimento? Una copia profonda?)

+0

Indovino nè un riferimento nè una copia profonda del DOM, ma un oggetto jQuery che ha un sacco di cose e forse alcuni riferimenti agli oggetti DOM. – david

+0

(Cos'è una variabile che fa riferimento a un oggetto jQuery se non è un riferimento?) –

+0

sì ma mantenere un riferimento a un oggetto manterrebbe l'intero oggetto jQuery in ambito non lo sarebbe? non è solo un riferimento a un nodo dom che esisterebbe già che indovinerei. – david

0

so che si può fare questo:

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

Basta memorizzare il selettore allo schiavo, non l'intero oggetto.

+0

Probabilmente hai ricevuto un errore nel codice, slavePath contiene un elenco di elementi nel tuo caso. – Weboide

Problemi correlati