2012-02-02 17 views
5

Quiero seleccionar todos los elementos Li De ul tener clase "uno" solamenteCómo seleccionar li desde ul tener sólo una clase de jQuery

<ul class="one"> 
<li class="heading"> 
<li class="list"> 
<li class="list"> 
<li class="list"> 
<li class="list"> 
</ul>  
<ul class="one two "> 
<li class="heading"> 
<li class="list"> 
<li class="list"> 
<li class="list"> 
<li class="list"> 
</ul>       

Respuesta

12

más fácil:

$('ul[class="one"] li'); 

alternativa, seleccione .one pero no .two:

$('ul.one:not(.two) li'); 
+0

Esto no se puede mantener a largo plazo, a menos que las clases utilizadas nunca cambien de 'uno' y 'dos'? –

+0

@Brian: No estoy seguro de a qué te refieres. La primera de mis dos soluciones que publiqué hace exactamente lo que el OP está pidiendo, y es lo suficientemente simple para ser fácilmente mantenible. El segundo hace lo que * podría * haber querido pedir. Creo que tu respuesta es extremadamente complicada, lo que hace que sea mucho más difícil de mantener. –

+0

Además de ser más complicado, la respuesta de Brian también es aproximadamente la mitad de la velocidad de cualquiera de estos. – Sorpigal

2

puede utilizar la función de filtro de jQuery para obtener un recuento de cuántas clases se han asignado al elemento. Cuando se buscan todas las UL con la clase "uno", solo el número de clases únicas contra el elemento será 1. Una vez que tenga las UL filtradas, simplemente puede seleccionar las sub LI.

var listItems = 
$('ul.one') 
.filter(function(index) { 
    return $(this).attr('class').split(' ').length == 1; 
}) 
.find('li'); 
Cuestiones relacionadas