2009-02-19 15 views
15

ottenuto alcuni qui il codice che non funziona:JQuery - Come aggiungere una classe a ogni ultimo elemento della lista?

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

Fondamentalmente ho 3 liste e si desidera aggiungere una classe (ultima) per ogni elemento che appare ultima in ogni lista non ordinata.

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

speranza che abbia un senso, Cheers!

+0

È questa classe aggiunta utilizzata per aggiungere un margine nella parte inferiore dell'elenco? Se è così, potresti semplicemente usare la proprietà margin-bottom di ul. Altrimenti, continua. = P – EndangeredMassa

+0

Inoltre, non è necessario fare '.each' in questo caso, puoi semplicemente fare' .addClass' direttamente. jQuery applicherà tutti i comandi all'intero insieme di elementi corrispondenti. – cdmckay

+0

Inoltre, un buon sito per testare diversi selettori e vedere come funzionano può essere trovato qui: http://www.woods.iki.fi/interactive-jquery-tester.html – cdmckay

risposta

36

errore facile da fare. Prova questo:

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

Fondamentalmente: l'ultimo non fa esattamente quello che pensi che faccia. Corrisponde solo all'ultimo nel documento, non l'ultimo in ciascuna lista. Ecco cosa: l'ultimo bambino è per.

+0

grazie per il suggerimento, mai inciampato su quello ora – smoothdeveloper

+0

Perfetto! - Grazie per avermi dedicato del tempo per aiutarmi, amico –

+0

molto informativo, grazie! – Heihachi

-1

si può provare

$('#sidebar ul li:last').addClass('last'); 
3

Il motivo per cui non funziona è dovuto al fatto che :last corrisponde solo a un elemento. Dalla documentazione jQuery:

Corrisponde all'ultimo elemento selezionato.

Quindi, ciò che il codice sta facendo è sempre un insieme di tutti gli elementi in una <li><ul> e poi da quello impostato di prendere l'ultimo valore. Esempio:

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

Il codice restituirà l'elemento <li>6</li>. (Internamente raccoglierebbe <li>1</li> a <li>6</li> e quindi ne interrompe l'ultimo e lo restituisce).

Quello che stai cercando è quello che le altre risposte qui hanno detto: :last-child.

0

Oppure è possibile fornire un id al proprio elenco e utilizzarlo come contesto per chiamare jquery.

<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> 

E allora si può fare:

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

Ora l'ultimo Li nel primo elenco sarebbe di classe "lastItem".

Modifica: Scusa, ho letto erroneamente la domanda. Ignora questo per favore.

4

con jQuery aggiungere questo

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

Se avete bisogno di aggiungere classe a 3 liste separate è possibile assegnare una classe per loro e usare 'ogni':

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

Questo dovrebbe funzionare esattamente come ti aspettavi.

Problemi correlati