2010-12-21 39 views
3

給定一些jQuery對象集合,也是該集合的一個子集,是否有方法返回inverse子集?jQuery方法來選擇一個子集,也是它的逆?

如果答案是「否」,有什麼辦法可以避免形成秒選擇得到逆子集?

解釋例如:

<ul> 
    <li class="subset"></li> 
    <li class="subset"></li> 
    <li class="inverse"></li> 
    <li class="inverse"></li> 
</ul> 

首先,我想要做的事,以所有<li>,然後東西只有.subset,最後別的,只.inverse

$('li').css('background-color','blue') 
    .filter('.subset') 
    .css('color','black') 
    .inverse() // <-- White Whale?!? 
    .css('color','white'); 

我知道這可以通過.end().filter('.inverse')輕鬆完成,但假設選擇器實際上是討厭和運行兩次將是一個大的性能打。然後怎樣呢?

在API文檔中沒有找到類似的東西,但我是jQuery新手,可能忽略了一些明顯的東西(另外,.andSelf()的存在意味着這不會不合理以期...)。

回答

5

這裏沒有內置功能,反向過濾器就是你之後的......替代品不可鏈接。另一種方法是.not(),像這樣:

var all = $('li').css('background-color','blue'); 
var sub = all.filter('.subset').css('color','black'); 
all.not(sub).css('color','white'); 

...但同樣不漂亮,我會用.end().filter()辦法堅持下去。但是,如果性能至關重要,請使用上面的方法.not(),效率更高(因爲沒有選擇器針對反轉集合運行)。


針對您的特殊例子(儘管不是一般的問題),這將會是相當快做到這一點:

$('li').css('background-color','blue').css('color','white') 
     .filter('.subset').css('color','black'); 
+0

+1,乾淨和精確的.. – 2010-12-21 18:22:19

+0

大。感謝您討論所有選項。 – dmb 2010-12-21 18:50:39

1

這裏是一個小擴展到jQuery的這件事,我只是做。 。

(function($) { 
    $.fn.reverse = function() 
    { 
     var orig = this.prevObject || jQuery(null); 
     return orig.not(this); 
    } 
})(jQuery); 

它將保持鏈接,所以你仍然可以後做.end()並返回到先前的過濾。

你可以用你的榜樣稱呼它

$('li').css('background-color','blue') 
    .filter('.subset') 
    .css('color','black') 
    .reverse() // <-- White Whale?!? 
    .css('color','white'); 

演示http://www.jsfiddle.net/gaby/THLkn/

相關問題