2009-02-19 12 views
15

dieron un poco de código aquí que no está funcionando:JQuery - ¿Cómo agregar una clase a cada elemento de la última lista?

$("#sidebar ul li:last").each(function(){ 
     $(this).addClass("last"); 
}); 

Básicamente tengo 3 listas y desea agregar una clase (última) a cada tema incluido en último lugar en cada lista desordenada.

<ul> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li class="last">Item 3</li> 
</ul> 

esperanza que tiene sentido, Salud!

+0

¿Se utiliza esta clase para agregar un margen en la parte inferior de la lista? Si es así, podrías usar la propiedad de margen inferior de la ul en su lugar. Si no, continúa. = P – EndangeredMassa

+0

Además, no necesita hacer '.each' en este caso, simplemente puede hacer' .addClass' directamente. jQuery aplicará todos los comandos al conjunto completo de elementos coincidentes. – cdmckay

+0

Además, un buen sitio para probar diferentes selectores y ver cómo funcionan se puede encontrar aquí: http://www.woods.iki.fi/interactive-jquery-tester.html – cdmckay

Respuesta

36

error fácil de hacer. Pruebe esto:

$("#sidebar ul li:last-child").addClass("last"); 

Básicamente, el último no acaba de hacer lo que usted piensa que hace. Solo coincide con el último del documento, no el último de cada lista. Para eso es: último-hijo.

+0

gracias por la sugerencia, nunca se tropezó con eso ahora – smoothdeveloper

+0

¡Perfecto! - Gracias por tomarse el tiempo para ayudarme compañero, lo aprecio –

+0

muy informativo, gracias! – Heihachi

3

El motivo por el que no funcionará se debe a que :last solo coincide con un elemento. De la documentación jQuery:

Coincide con el último elemento seleccionado.

Entonces, ¿qué está haciendo su código es conseguir un conjunto de todos los elementos en un <li><ul> y después de la establecida tomando el último valor. Ejemplo:

<ul> 
    <li>1</li> 
    <li>2</li> 
</ul> 
<ul> 
    <li>3</li> 
    <li>4</li> 
</ul> 
<ul> 
    <li>5</li> 
    <li>6</li> 
</ul> 

Su código devolverá el elemento <li>6</li>. (Internamente, recolectaría <li>1</li> a <li>6</li> y luego cortará la última y la devolverá).

Lo que estás buscando es lo que las otras respuestas aquí han dicho: :last-child.

0

O podría dar a su lista una identificación y usarla como contexto para jquery-call.

<ul id="myList"> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
</ul> 

<ul id="anotherList"> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
</ul> 

Y entonces usted puede hacer:

jQuery("li:last", "ul#myList").addClass("lastItem"); 

Ahora el último li en la primera lista tendría clase "lastItem".

Editar: Perdón, leyó mal la pregunta. Ignora esto por favor.

4

con jQuery agregar este

$("ul li").last().addClass('last'); 
0

Si es necesario agregar la clase a 3 listas separadas puede asignar una clase para ellos y utilizar 'cada uno':

$('#sidebar ul.class li:last-child').each(function(e){ 
    $(this).addClass("last"); 
}); 

Esto debería funcionar exactamente como se lo esperabas

Cuestiones relacionadas