2013-03-12 153 views
1

我有這行代碼的jQuery的收集可見:獲取從對象

var filterInputs = $(this).siblings('.filterInputs'); 

,其對filterInputs一些工作。稍後,我想將我的filterInputs集合減少爲僅顯示那些。

很顯然,我可以這樣做:

var visibleFilterInputs = $(this).siblings('.filterInputs:visible'); 

但鑑於我已經有我希望能降低集合的引用,似乎效率不高。

有沒有辦法這樣說:

//TODO: Example 
var visibleFilterInputs = $(filterInputs:visible); 

,而無需再次遍歷DOM樹?謝謝

回答

3

你是完全正確的,沒有理由回憶DOM元素,因爲你已經有了它們在一個jQuery對象。所以,這也正是.filter()方法是什麼:http://api.jquery.com/filter/

試試這個:

var visibleFilterInputs = filterInputs.filter(":visible"); 

這裏有一個例子:http://jsfiddle.net/FC9sH/

請注意,這是更好地定位到特定的HTML標籤,如<div>,以使:visible選擇器更高效一些(因爲它不是CSS規範的一部分,不能通過本地方法進行優化)。至少在你的情況下,你已經在使用filterInputs類。不管怎麼說,也許是這樣的:

var visibleFilterInputs = filterInputs.filter("div:visible"); 

只有如果這是適用的。我的意思是,即使選擇多個已知元素標籤可能會更好:

var visibleFilterInputs = filterInputs.filter("div:visible, p:visible");