JQuery - Come aggiungere una classe per ogni ultimo elemento della lista?
Domanda
Hai un codice qui che non funziona:
$("#sidebar ul li:last").each(function(){
$(this).addClass("last");
});
In sostanza 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>
La speranza che abbia un senso, Cheers!
Soluzione
errore facile da fare. Prova questo:
$("#sidebar ul li:last-child").addClass("last");
In sostanza: ultima non abbastanza fai quello che pensi lo fa. Esso corrisponde solo l'ultimo nel documento, non l'ultimo in ogni elenco. Questo è quello che:. Last-child è per
Altri suggerimenti
con jQuery aggiungere questo
$("ul li").last().addClass('last');
Il motivo per cui non funziona è dovuto al fatto che :last
corrisponde un solo elemento. Dalla documentazione jQuery:
Partite l'ultimo elemento selezionato.
Quindi, ciò che il codice sta facendo è sempre un insieme di tutti gli elementi in un <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 tuo codice sarebbe tornato l'elemento <li>6</li>
. (Internamente, sarebbe raccogliere <li>1</li>
a <li>6</li>
e poi lop fuori l'ultimo e restituirlo).
Quello che stai cercando è quello che le altre risposte qui hanno detto:. :last-child
In alternativa si potrebbe dare la vostra lista un id e utilizzarla come un contesto di 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>
E allora si può fare:
jQuery("li:last", "ul#myList").addClass("lastItem");
Ora l'ultimo Li nel primo elenco sarebbe di classe "lastItem".
Edit: Scusa, letto male la domanda. Ignorare questo per favore.
Se avete bisogno di aggiungere classe a 3 liste separate si può 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 previsto.
si può provare
$('#sidebar ul li:last').addClass('last');