JQuery - Comment ajouter une classe à chaque dernier élément de la liste?
Question
Vous avez ici un code qui ne fonctionne pas:
$("#sidebar ul li:last").each(function(){
$(this).addClass("last");
});
En fait, j'ai 3 listes et que vous souhaitez ajouter une classe (dernier) à chaque élément apparaissant dans chaque dernière liste non ordonnée.
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li class="last">Item 3</li>
</ul>
L'espoir qui fait sens, Vive!
La solution
erreur facile à faire. Essayez ceci:
$("#sidebar ul li:last-child").addClass("last");
En gros: dernière ne fait pas tout à fait ce que vous pensez. Il correspond uniquement à la dernière dans le document, pas le dernier dans chaque liste. C'est ce que:. Dernier enfant est pour
Autres conseils
avec jquery ajouter cette
$("ul li").last().addClass('last');
La raison qui ne fonctionne pas est due au fait que :last
correspond à un seul élément. De la documentation jQuery:
Correspond au dernier élément sélectionné.
Alors, que votre code est en train de faire est d'obtenir un ensemble de tous les éléments de <li>
dans un <ul>
puis de cet ensemble en prenant la dernière valeur. Exemple:
<ul>
<li>1</li>
<li>2</li>
</ul>
<ul>
<li>3</li>
<li>4</li>
</ul>
<ul>
<li>5</li>
<li>6</li>
</ul>
Votre code renverrait le <li>6</li>
élément. (En interne, il serait recueillir <li>1</li>
à <li>6</li>
puis élaguer le dernier et le retourner).
Qu'est-ce que vous cherchez est ce que les autres réponses ici ont dit:. :last-child
Ou vous pouvez donner à votre liste une carte d'identité et l'utiliser comme un contexte jquery appel.
<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>
Et vous pouvez alors faire:
jQuery("li:last", "ul#myList").addClass("lastItem");
Maintenant, la dernière li dans la première liste aurait la classe « lastItem ».
Edit: Désolé, mal lu la question. Ignorer cette s'il vous plaît.
Si vous devez ajouter la classe 3 listes distinctes, vous pouvez assigner une classe pour eux et utiliser chaque ':
$('#sidebar ul.class li:last-child').each(function(e){
$(this).addClass("last");
});
Cela devrait fonctionner exactement comme prévu.
vous pouvez essayer
$('#sidebar ul li:last').addClass('last');