2010-03-01 35 views
3

的jQuery 1.4:jQuery的:不是()问题

$('#menu li:last:not(.ignore)').addClass('last'); 

HTML:

<div id="menu"> 
    <ul> 
     <li>item 1</li> 
     <li>item 2</li> 
     <li class="ignore">item3</li> 
    </ul> 
</div> 

... last类不适用于item 2。我在这里做错了什么?

感谢

回答

5

变化:last:not()顺序:

$('#menu li:not(.ignore):last') 
+0

啊!我之所以解雇这个想法是因为:上次:以前没有工作过,但没有在jQuery 1.4中我猜。不管怎么说,还是要谢谢你!! :) – 3zzy 2010-03-01 14:11:50

+0

@Nimbuz:选择器':not(...):last'和':last:not(...)'具有不同的语义。前者将首先排除所有不匹配':not(...)'表达式的元素,然后得到它们的最后一个元素。后者将首先获取最后一个元素,然后如果它不符合':not(...)'条件,则将其排除。 – Gumbo 2010-03-01 14:17:54

2

表达式的工作方式是这样的:

  • 找到ID为 “菜单” 的元素;
  • 查找该元素的所有后代列表项;
  • 将结果限制为该集合中的最后一个元素;
  • 过滤掉没有“忽略”类的元素(这是仅有的一点,最后一个元素)。

最后一个元素有一类忽略,所以它被过滤掉。这就是为什么它不起作用。颠倒顺序:

$("#menu li:not(.ignore):last").addClass("last"); 
0

这似乎更符合逻辑至少对我说“.IGNORE第一次出现之前得到我的列表项”:

// tested 
$("#menu li.ignore:first").prev("li").addClass('last');