2012-12-08 12 views
8

Sono nuovo di jQuery e sto avendo qualche problema a capire la sua notazione di array per gli oggetti. Leggendo la documentazione jQuery e this article, sembra che si può fare riferimento alla voce n-esimo in un oggetto restituito da un selettore facendo qualcosa di similejQuery Notazione array oggetto

$('.foo')[n]; 

corretta? Devo essere in grado di utilizzare le funzioni di manipolazione/effetti di jQuery in tandem? Qualcosa di simile (questo non sta funzionando per me)

$('.foo')[0].hide(); 

Ho anche cercato, inutilmente:

var arr = $('.foo').get(); 
arr[0].hide(); 

C'è qualcosa che non va nella mia sintassi? Qual è il modo migliore per fare ciò che sto cercando di fare qui?

Grazie!

risposta

17

La notazione di matrice [0] e .get() method restituiscono un riferimento a un elemento DOM all'interno dell'oggetto jQuery e non è possibile utilizzare i metodi jQuery sugli elementi DOM.

Prova il eq() method invece, perché restituisce un nuovo oggetto jQuery:

$('.foo').eq(0).hide(); 

Si noti inoltre che l'aver utilizzato la notazione array o .get() per ottenere un riferimento a un elemento DOM significa che possibile quindi ottenere diretta accesso alle proprietà dell'elemento DOM, ad esempio:

var firstElId = $('.foo')[0].id; 

... con una seconda nota che $('.foo')[0] sarà undefined e $('.foo')[0].id darà un errore se non ci sono elementi che corrispondono al selettore '.foo'.

+0

Grazie! Questo è esattamente quello che dovevo sapere. –

6

Quando si fa riferimento a un oggetto jQuery come matrice, si ottiene un elemento DOM indietro. Avrete bisogno di riconvertirlo in un oggetto jQuery per utilizzare metodi come .nascosto()

var bar = $('.foo')[n]; 
var $bar = $(bar); 

$bar.hide(); 

O semplicemente usare eq di jQuery() metodo:

var bar = $('.foo').eq(n); 
bar.hide(); 
+0

Il primo esempio funziona, ma è un modo piuttosto pesante per farlo. Meglio usare semplicemente '.eq()' come nel secondo esempio. – saluce

Problemi correlati