2013-03-12 156 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");