2011-05-17 144 views
1

以下是我擁有的示例html。JQuery如何選擇ul中沒有特定類別的所有li項目

<ul id="alist"> 
<li class="red">...</li> 
<li class="blue">...</li> 
<li class="red">...</li> 
<li class="green">...</li> 
</ul> 

目的:選擇列表中沒有'紅'類的所有元素並淡出它們。

這是我到目前爲止。我知道它很接近,但是在代碼或選擇器中有一個錯誤。

$('#alist :not(:has(.red))').fadeOut('slow'); 

我也試過

$('#alist li :not(:has(.red))').fadeOut('slow'); 

$('#alist :not(:has(li.red))').fadeOut('slow'); 

他們都不是工作(明顯)。但是當我試圖過濾ul內部的東西時,它確實如此。所以用HTML爲:

<li><a class="red">...</li> 
. 
. 
. 
<li><a class="green">...</li> 

並取得了jQuery選擇

$('#alist li :not(:has(a.red))').fadeOut('slow'); 

它的工作原理。

那麼,爲什麼JQuery不讓我過濾li類呢?

回答

3

:has着眼於要素的孩子。你只需要看看元素的類本身。所以:

$('#alist :not(.red)').fadeOut('slow'); 
6

試試這個:

$('#alist li a').not('.red').parent().fadeOut('slow'); 

這個選擇,現在確實有red作爲一個階級的所有錨標籤和淡出父li

+0

同時檢查[':不()'選擇(http://api.jquery.com/not-selector/) - 在IE慢,與CSS3支持的瀏覽器速度更快([見結果](http://jsperf.com/jquery-css3-not-vs-not)) – 2011-05-17 19:00:50

+0

@Neal:他想匹配html的第一個版本(所以沒有'a'和'.parent()') – 2011-05-17 19:03:57

+0

@丹我不知道這一點。也不要假設OP是'he' – Neal 2011-05-17 19:05:51