2012-12-08 15 views
8

Jestem nowy w jQuery i mam małe problemy ze zrozumieniem jego notacji tablicowej dla obiektów. Czytanie docs jQuery i this article, wydaje się, że można odwołać się do n-tego elementu w obiekcie zwróconej przez selektor wykonując coś jakjQuery Object array notation

$('.foo')[n]; 

prawidłowe? Czy mogę używać funkcji manipulacji/efektów jQuery w tandemie? Coś podobnego (nie jest to praca dla mnie)

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

Ja również próbował, bezskutecznie:

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

Czy jest coś złego w moim składni? Jaki jest najlepszy sposób robienia tego, co próbuję tutaj zrobić?

Dzięki!

Odpowiedz

17

Notacja tablicowa [0] i .get() method zwracają odwołanie do elementu DOM w obiekcie jQuery i nie można używać metod jQuery w elementach DOM.

Spróbuj eq() method zamiast, ponieważ zwraca nowy obiekt jQuery:

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

Należy również zauważyć, że po użyciu notacji tablicy lub .get() uzyskać referencję do elementu DOM oznacza może następnie uzyskać bezpośredni Dostęp do właściwości elementu DOM jest np:

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

... z drugiej nocie że $('.foo')[0] będzie undefined i $('.foo')[0].id spowoduje błąd, jeśli nie ma elementów pasujących do selektora '.foo'.

+0

dzięki! Dokładnie to musiałem wiedzieć. –

6

Gdy odwołujesz się do obiektu jQuery jako tablicy, odzyskujesz element DOM. Musisz przekonwertować go z powrotem do obiektu jQuery używać metod, takich jak .hide()

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

$bar.hide(); 

Albo po prostu użyć eq jQuery() metoda:

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

Pierwszy przykład działa, ale jest to dość ciężki sposób. Lepiej po prostu użyć '.eq()' jak w drugim przykładzie. – saluce

Powiązane problemy