给定一些jQuery对象集,以及该集合的子集,是否有一个方法可以返回逆子集?
如果答案是" 否 ",有没有办法避免进行第二次选择以获得逆子集?
解释性的例子:
<ul>
<li class="subset"></li>
<li class="subset"></li>
<li class="inverse"></li>
<li class="inverse"></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
首先,我想对所有人做一些事情<li>
,然后对某些事情做一些事情.subset
,最后只做其他事情.inverse
:
$('li').css('background-color','blue')
.filter('.subset')
.css('color','black')
.inverse() // <-- White Whale?!?
.css('color','white');
Run Code Online (Sandbox Code Playgroud)
我知道这可以很容易地完成.end().filter('.inverse')
,但假设选择器实际上是大而且讨厌并且运行两次将是一个很大的性能影响.然后怎样呢?
在API文档中没有找到这样的东西,但我是jQuery的新手并且可能忽略了一些明显的东西(同样,存在.andSelf()
意味着这并不是不合理的......).
对此没有内置功能,反向滤波器就是您所追求的......替代方案是无法链接的.替代方案是.not()
这样的:
var all = $('li').css('background-color','blue');
var sub = all.filter('.subset').css('color','black');
all.not(sub).css('color','white');
Run Code Online (Sandbox Code Playgroud)
......但又不是很漂亮,我坚持这种.end().filter()
做法.但是,如果性能是最重要的,使用.not()
上面的方法,它更有效(因为没有选择器运行反向集).
对于您的具体示例(虽然不是一般问题),这样做很快:
$('li').css('background-color','blue').css('color','white')
.filter('.subset').css('color','black');
Run Code Online (Sandbox Code Playgroud)