15

这里有一些不起作用的代码:

$("#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>

希望这是有道理的,干杯!

4

6 回答 6

36

容易犯错误。试试这个:

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

基本上 :last 并没有完全按照你的想法做。它只匹配文档中的最后一个,而不是每个列表中的最后一个。这就是 :last-child 的用途。

于 2009-02-19T02:46:17.527 回答
4

用jquery添加这个

$("ul li").last().addClass('last');
于 2011-03-21T10:37:58.393 回答
3

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

匹配最后选择的元素。

因此,您的代码正在做的是获取 a 中所有<li>元素的集合<ul>,然后从该集合中获取最后一个值。例子:

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

于 2009-02-19T02:54:14.183 回答
0

或者您可以给您的列表一个 id 并将其用作 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>

然后你可以这样做:

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

现在第一个列表中的最后一个 li 将具有类“lastItem”。

编辑:对不起,误读了这个问题。请忽略这个。

于 2009-02-19T15:20:27.537 回答
0

如果您需要将类添加到 3 个单独的列表中,您可以为它们分配一个类并使用“每个”:

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

这应该完全按照您的预期工作。

于 2013-12-05T15:36:07.927 回答
-1

你可以试试

$('#sidebar ul li:last').addClass('last');
于 2009-02-19T02:44:09.607 回答