在 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 */ );
基本上,我想将两个单独的 /* do some */
部分提供给单个过滤器。一种用于匹配的内容,另一种用于其他内容 - 无需过滤两次。我是否缺少执行此操作的 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()
。
关于jQuery:使用filter(),但同时使用两种结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2798542/