【发布时间】:2011-02-17 10:02:52
【问题描述】:
在 jQuery 中,filter() 将您的结果缩减为满足特定条件的那些元素。
这会将列表分成两部分。使用“好的一半”元素很容易:
$("some selector").filter(function() {
// determine result...
return result;
}).each( /* do something */ );
但是我如何也可以使用我的“另一半”元素 - 但不做 this 的等价物:
$("some selector").filter(function() {
// determine result...
return !result;
}).each( /* do something else */ );
基本上,我想将两个单独的 /* do something */ 部分提供给单个过滤器。一个用于匹配的,另一个用于其他的 - 无需过滤两次。我是否缺少执行此操作的 jQuery 函数?
P.S.:我想我可以做到:
$("some selector").each(function() {
// determine result...
if (result)
/* do something */
else
/* do something else */
});
但我希望有更好的东西。
【问题讨论】:
-
我想它会是
each()。 -
jsfiddle.net/nZtRF 可能值得注意的一点是,使用
not()方法时,性能会随着元素数量的增加呈指数下降。对于较小的数量,这是微不足道的。对于大批量,您将在过滤器中使用if()语句获得更好的性能。请参阅上面 jsfiddle 链接上的测试,并弄乱数量。 -
@patrick:非常正确。这是一个严重的缺点。 :-\
-
标题对我来说看起来很有描述性,标签是它们所属的地方。
-
@Justin Johnson:title 是 Google 将突出显示的内容,而不是标签。我不认为这个编辑是一个实质性的改进,我要把它回滚。此外,这个问题根本不是关于 JavaScript,而是关于 jQuery。请不要仅仅根据纯粹的个人喜好进行编辑而不增加任何重量。