在jQuery中,filter()将结果减少到满足特定条件的元素.
这将列表分为两部分.使用元素的"好半部分"很容易:
$("some selector").filter(function() {
// determine result...
return result;
}).each( /* do something */ );
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能使用我的元素的"另一半" - 但是没有做相当于这个:
$("some selector").filter(function() {
// determine result...
return !result;
}).each( /* do something else */ );
Run Code Online (Sandbox Code Playgroud)
基本上,我想将两个独立的/* do something */部件送入一个过滤器.一个用于匹配,一个用于其他 - 无需过滤两次.我错过了一个jQuery函数吗?
PS:我想我能做到:
$("some selector").each(function() {
// determine result...
if (result)
/* do something */
else
/* do something else */
});
Run Code Online (Sandbox Code Playgroud)
但我希望有更好的东西.
Tgr*_*Tgr 16
Kobi以插件形式推荐的方法:
$.fn.invert = function() {
return this.end().not(this);
};
$('.foo').filter(':visible').hide().invert().show();
Run Code Online (Sandbox Code Playgroud)
请注意,invert()不会向jQuery堆栈添加新元素,而是替换最后一个:
$('.foo').filter(':visible').invert().end(); // this will yield $('.foo'), not $('.foo:visible')
Run Code Online (Sandbox Code Playgroud)
编辑:改变prevObject要end()在托默勒格的建议.
Kob*_*obi 10
我通常使用not它 - 它可以采用一系列元素并从您的选择中删除它们,为您留下补充:
var all = $("some selector");
var filtered = all.filter(function() {
// determine result...
return result;
});
var others = all.not(filtered);
Run Code Online (Sandbox Code Playgroud)