2009-02-19 56 views
15

这里有一些代码不工作:JQuery - 如何将类添加到每个最后的列表项?

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

基本上我有3个清单,并希望一个类(最后一个)添加到最后出现在每个无序列表中的每个项目。

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

希望有道理, 干杯!

+0

此添加的类用于在列表底部添加页边距吗?如果是这样,您可以使用ul的margin-bottom属性代替。如果没有,继续。 = P – EndangeredMassa 2009-02-19 02:54:05

+0

另外,在这种情况下,您不需要执行`.each`,您可以直接执行`.addClass`。 jQuery将所有命令应用于整个匹配元素集。 – cdmckay 2009-02-19 02:58:41

回答

36

容易犯的错误。试试这个:

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

基本上:最后不完全按照你的想法做。它只匹配文档中的最后一个,而不是每个列表中的最后一个。这就是:最后一个孩子是为了。

-1

你可以尝试

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

不起作用的原因是因为:last只匹配一个元素。从jQuery文档:

匹配上次选择的元素。

那么你的代码做的是得到一个集合中的所有的<ul><li>元素,然后从该组采取的最后一个值。示例:

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

您的代码将返回元素<li>6</li>。 (在内部,它会收集<li>1</li><li>6</li>,然后取消最后一个并返回它)。

你在找什么是其他答案这里说::last-child

0

或者你可以给你的列表一个id,并用它作为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> 

然后你就可以这样做:

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

现在,在第一个列表中的最后李将有一流 “lastItem”。

编辑:对不起,错误的问题。请忽略此。

4

与jQuery添加此

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

如果您需要添加类到3名单独的列表中,您可以指定一个类为他们和使用“每个”:

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

这应该正是上班你的预期。

相关问题