2010-03-01 37 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');