在jQuery中,filter()将结果减少到满足特定条件的元素.
这将列表分为两部分.使用“好半”的元素很容易:
$("some selector").filter(function() { // determine result... return result; }).each( /* do something */ );
但是我也可以与我的元素的“另一半”一起工作,但是不用这样做:
$("some selector").filter(function() { // determine result... return !result; }).each( /* do something else */ );
基本上,我想将两个单独的/ *做一些* /部分输入到单个过滤器.一个适合那些匹配的人,一个用于其他人,而不必过滤两次.我错过了一个jQuery函数吗?
我想我可以做:
$("some selector").each(function() { // determine result... if (result) /* do something */ else /* do something else */ });
但是我希望有更好的东西.
解决方法
Kobi推荐的插件形式的方法:
$.fn.invert = function() { return this.end().not(this); }; $('.foo').filter(':visible').hide().invert().show();
请注意,invert()不会向jQuery堆栈添加一个新元素,而是替换最后一个元素:
$('.foo').filter(':visible').invert().end(); // this will yield $('.foo'),not $('.foo:visible')
编辑:在Tomalak的建议中将prevObject更改为end().