2010-06-14 13 views
7

Chciałbym uzyskać # natychmiastowych elementów potomnych elementu, a następnie uzyskać klasę dziecka w określonym indeksie. Coś jak:Jak uzyskać dostęp do elementu potomnego z dzieci()?

var index = 25; 
var children = $("#myListElement").children(); 
if (index < children.length) { 
    if (children[index].hasClass("testClass")) { 
     alert("hi!"); 
    } 
} 

myślę składnia .children() jest ok, ale jak mogę element indeksowany z nich w stylu jQuery?

Dzięki

Odpowiedz

11

Sposób children zwraca tablicowej obiekt, który zawiera zwykły węzłów Dom. Musisz zawinąć element zawierający jQuery lub pobrać go za pomocą metody eq(index), aby móc korzystać z metod jQuery takich jak hasClass.

if ($(children[index]).hasClass("testClass")) 

jQuery nie zawija ich domyślnie z oczywistych powodów związanych z wydajnością.

Jeśli używasz narzędzia Firebug lub Chrome/Webkit, uzyskasz wyjątek podczas próby wywołania niezdefiniowanej metody na obiekcie. Zobacz example. Upewnij się, że oglądasz wyjście konsoli :)

TypeError: Object #<an HTMLLIElement> has no method 'hasClass' 
+4

„dzieci zawiera tablicę ślizgowych węzłów DOM” to jest zwodniczy. 'children()' to zestaw jQuery jak cokolwiek innego. Jeśli użyjesz '.eq (3)' zamiast '[3]' zwróci element DOM zawinięty w jQuery zgodnie z oczekiwaniami. Dowolny zestaw wyników jQuery, gdy uzyskasz dostęp za pomocą '[]' zwraca element DOM. –

+0

Zasadniczo 'children.eq (index) .hasClass (" testClass ")' to sposób, w jaki twoja odpowiedź powinna zostać napisana. –

+0

@Doug - Instrukcja "zawiera tablicę zwykłych węzłów DOM" nie jest całkowicie poprawna. jQuery zwraca * obiekt podobny do tablicy *, który zawiera węzły DOM indeksowane przez liczbę jak w tablicy. Także, popraw mnie, jeśli się mylę, ale czy nie było czasu, w którym jQuery zawijała domyślnie wszystkie węzły DOM, zanim opuściła zawijanie na rzecz wydajności? – Anurag

2

Przykro mi, ale znalazłem twoje pytanie nieco zagmatwane. Czy to jest to, czego chcesz?

var parent = $("#myitem"), 
    count = parent.children().length, 
    index = parent.children(".theClass").index(); 

Otrzymuje indeks podrzędny elementu z określoną klasą, bez pętli.

Jednak jeśli trzeba klasę (Ale już indeksu), a następnie to zrobić:

var parent = $("#myitem"), 
    count = parent.children().length, 
    classN = parent.children()[3].className; 
+1

Myślę, że twoja druga odpowiedź brzmi, co OP robi. – user113716

+0

@patricick Cool. Myślałem, że rozumiem pytanie, ale przykład kodu z nim pomylił :) –

0

użycie eq():

if (children.eq(index).hasClass("testClass")) 
+0

Czy zrobię, po prostu mogę podać wiele nazw klas w hasClass() do testowania na raz? Jak .hasClass ("koza świni")? – user291701

Powiązane problemy