I have
var $set = $('.foo,.bar').filter(
function() {return $(this).parents('.baz').length < 1;});
作为选择其类的所有元素的一种方式foo
or bar
并且谁不是其类的元素的后代baz
。是否有一个选择器可以完成同样的事情而不需要过滤 lambda?
<div class='foo'/><!--match this-->
<div class='bar'/><!--match this-->
<div class='baz'>
<div class='foo'/> <!--don't match this-->
</div>
事实是,jQuery 根本没有一种特别优雅的方式来完成您想要的事情。虽然 Chaos 的答案确实有效,但您必须想知道复杂的选择器(这与复杂网页中的选择器一样慢)是否比您拥有的更冗长但更快的过滤功能值得。这其实没什么大不了的,我个人只是在可以避免的情况下厌倦了特别长、复杂的选择器。
一个不同的选择是创建您自己的选择器,因为 jQuery 很棒:
jQuery.expr[':'].parents = function(a,i,m){
return jQuery(a).parents(m[3]).length < 1;
};
$('.foo,.bar').filter(':parents(.baz)');
The expr
地图是 Sizzle 选择器引擎的一部分,可以在此处找到文档:Sizzle 自定义伪选择器 https://github.com/jquery/sizzle/wiki#-pseudo-selectors-pseudos
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)