2011-09-20 23 views
10

Creé una página de Preguntas frecuentes con la opción de ocultar y mostrar el contenido debajo de cada pregunta. Tengo una funcionalidad de "Expandir todo" que permite al usuario mostrar todas las preguntas al hacer clic. Cuando se expande una pregunta, obtiene una clase de "seleccionado".Compruebe si todos los artículos tienen la misma clase

Estoy tratando de cambiar el estado "Expandir todo" cuando todas las preguntas (LI) se expanden.

¿Cómo puedo verificar que todos los LI tengan la CLASE "seleccionada" al mismo tiempo?

Utilizo el método EACH para obtener los LI y su CLASE.

Gracias de antemano

+0

No estoy seguro de que consiga lo que está pidiendo; ¿No podrías simplemente seleccionar los elementos de la lista que tienen la clase 'seleccionada'? Aunque no estoy seguro de que quiera hacerlo, parece que sería mejor manejar solo el elemento de la lista única que se ha expandido. –

Respuesta

25

probablemente usted puede contar con los elementos de la lista con selected clase contra todos los elementos de la lista:

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

#questions es el elemento que contiene la lista y por supuesto que podría ser diferente en su código, pero deberías tener la idea.

+0

Muy buena idea - ¡Pruébalo! ¡Gracias! – John

+0

Funciona bien, ¡gracias por el consejo! – John

7

Seleccionar todos los elementos de la lista, filtrar los elementos que pertenecen a una determinada clase y luego determinar si hay algún sobrante:

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

No estoy seguro de entender el problema, pero la comprobación de si un El objeto jQuery tiene una clase, usa .hasClass().

3

Puede comparar el número de elementos li con el número de elementos li con la clase "seleccionada". Si los números son los mismos, entonces todos los elementos tienen que li clase:

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

Usted puede hacer esto en cualquier momento, no tiene que ir dentro de un bucle each.

+0

Según Xion, ¡gracias por la sugerencia! – John

0

Cuando le entiendo bien, ¿desea establecer la clase selected en todos sus elementos li al hacer clic en un botón Mostrar todo?

No necesita iterar sobre todos los elementos li.

Sólo seleccionarlos y llamar addClass en ellos:

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

le daría el número de <li> s que no tienen la clase 'selected'. Si esta cifra fuera cero, podría ejecutar su lógica.

2

O usted podría intentar esto con size()

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