从jQuery对象集合中可见

时间:2013-03-12 16:30:25

标签: javascript jquery

我有这行代码:

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

在filterInputs上执行一些工作。稍后,我想将filterInputs的集合减少到可见的那些。

显然,我可以这样做:

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

但这似乎效率低下,因为我已经对我希望减少的集合有一个参考。

有没有办法说出类似的话:

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

无需再次遍历DOM树?感谢

1 个答案:

答案 0 :(得分: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");