在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().