2011-09-20 20 views
10

Zbudowałem stronę FAQ z opcją ukrycia i wyświetlenia zawartości pod każdym pytaniem. Mam funkcję "Rozwiń wszystkie", która pozwala użytkownikowi wyświetlić wszystkie pytania na stronie. Po rozszerzeniu pytania otrzymuje klasę "wybraną".Sprawdź, czy wszystkie elementy mają tę samą klasę

Próbuję zmienić status "Rozwiń wszystkie", gdy wszystkie pytania (LI) są rozszerzone.

Jak mogę sprawdzić, czy wszystkie LI mają wybraną KLASĘ w tym samym czasie?

Używam metody EACH, aby uzyskać LI i ich CLASS.

góry dzięki

+0

Nie jestem pewien, mogę to pytasz; czy nie możesz po prostu wybrać elementów listy, które mają "wybraną" klasę? Chociaż nie jestem pewien, czy chciałbyś to zrobić - wydaje się, że lepiej poradzić sobie tylko z pojedynczym elementem listy, który został rozszerzony. –

Odpowiedz

25

Prawdopodobnie można policzyć elementy listy z selected klasy wobec wszystkich elementów listy:

if ($("#questions li.selected").length == $("#questions li").length) { 
    // all list items are selected 
} 

#questions jest elementem, który zawiera listę i oczywiście może być inna w Twoim kod, ale powinieneś dostać pomysł.

+0

Bardzo dobry pomysł - próbuję! dzięki! – John

+0

Działa dobrze - dzięki za napiwek !! – John

7

Wybierz wszystkie elementy listy, odfiltrować elementy należące do danej klasy, a następnie ustalić, czy są jakieś pozostały:

if($("li").not(".className").length > 0) { 
    //code 
} 
0

Nie jestem pewien, aby zrozumieć problem, ale sprawdzić, czy Obiekt jQuery ma klasę, używasz .hasClass().

3

Można porównać liczbę elementów li z liczbą elementów li z klasą "wybraną". Jeśli te liczby są takie same, to wszystkie li elementy mają tę klasę:

if($("li").length == $("li.selected").length) { 
    //All li elements have class selected 
} 

Można to zrobić w dowolnym momencie, nie trzeba iść wewnątrz pętli each.

+0

Jak na Xion - dzięki za cynk! – John

0

Kiedy rozumiem, że masz rację, chcesz ustawić klasę selected dla wszystkich swoich elementów li po kliknięciu przycisku Pokaż wszystko?

Nie trzeba powtarzać siebie nad wszystkimi elementami li.

Wystarczy je wybrać i zadzwonić addClass na nich:

$('li').addClass('selected'); 
8
$("li:not(.selected)").length 

nie daje liczbę <li> s, które nie mają „wybrany” klasę. Jeśli ta liczba wynosi zero, możesz uruchomić swoją logikę.

2

Albo można spróbować z size()

if($("li.success").size() == $("li").size()){ 
    //return true 
} 
Powiązane problemy