2011-09-20 4 views
10

Ho creato una pagina di domande frequenti con l'opzione per nascondere e mostrare il contenuto sotto ogni domanda. Ho una funzionalità "Espandi tutto" che consente all'utente di visualizzare tutte le domande onclick. Quando una domanda viene espansa ottiene una classe di "selezionata".Verifica se tutti gli articoli hanno la stessa classe

Sto tentando di modificare lo stato "Espandi tutto" quando tutte le domande (LI) vengono espanse.

Come posso verificare che tutti i LI abbiano la CLASS "selezionata" allo stesso tempo?

Io uso il metodo EACH per ottenere i LI e la loro CLASSE.

Grazie in anticipo

+0

io non sono sicuro di ottenere quello che stai chiedendo; non potresti semplicemente selezionare gli elementi della lista che hanno la classe 'selected'? Anche se non sono sicuro che tu voglia farlo, sembra che sarebbe meglio gestire solo il singolo elemento dell'elenco che è stato espanso. –

risposta

25

Probabilmente si può contare il voci di elenco con selected classe contro tutti gli elementi di una lista:

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

#questions è l'elemento che contiene l'elenco e, naturalmente, potrebbe essere diverso nel vostro codice, ma dovresti avere l'idea.

+0

Ottima idea - ci provo! Grazie! – John

+0

Funziona bene - grazie per il suggerimento !! – John

7

Selezionare tutti gli elementi della lista, filtrare gli elementi appartenenti ad una certa classe e quindi determinare se ci sono eventuali sinistra sopra:

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

Non sono sicuro di capire il problema, ma il controllo di se un L'oggetto jQuery ha una classe, si usa .hasClass().

3

È possibile confrontare il numero di elementi li con il numero di elementi li con la classe "selezionato". Se questi numeri sono gli stessi, quindi tutti gli elementi hanno li quella classe:

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

È possibile farlo in qualsiasi punto, non deve andare all'interno di un ciclo each.

+0

Secondo Xion - grazie per il suggerimento! – John

0

Quando ti capisco bene, vuoi impostare la classe selected su tutti i tuoi elementi li quando fai clic su un pulsante ShowAll?

Non è necessario iterare su tutti gli elementi li.

Basta selezionarli e chiamare addClass su di loro:

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

darebbe il numero di <li> s che non hanno la classe 'selezionato'. Se questa cifra fosse pari a zero, potresti eseguire la tua logica.

2

Oppure si potrebbe provare questo con size()

if($("li.success").size() == $("li").size()){ 
    //return true 
}