2011-10-05 179 views

回答

4

選擇應該是這樣的:

$('ul li:not(:has(span.show))') 

例子:http://jsfiddle.net/Mkj7Z/

因爲這樣的選擇是相當昂貴的,請確保您緩存所產生的DOM節點的變量進一步訪問。

+0

Jep那是一個THX – ajitam

0

嘗試隱藏所有,然後顯示那些有span.show

$('ul li').hide().find('span.show').parent().show(); 
+0

是的,這是一種方式,但我必須使用slideToggle,所以這種方法是不可能的 – ajitam

0

jAndy的解決方案,$('ul li:not(:has(span.show))')作品很好,但:not:has普遍表現較差的選擇(和他指出,他們是昂貴的)。看看你的標記,是否可以根據文本選擇<li>元素?

// Using `:contains` we can look for *Hide* 
$('ul > li:contains("Hide")') 

// Or using `filter()` for an exact match 
$('ul > li').filter(function() { 
    return $.text(this) === "Hide"; 
}); 

這是一個快一點,整潔一點。

0

用途:

$('ul li').filter(function(){ 
    return $('.show',this).length==0; 
}); 

可以延長過濾器,以更復雜的查詢。