首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >哪个JQuery选择器会排除父选择器与给定选择器匹配的项目?

哪个JQuery选择器会排除父选择器与给定选择器匹配的项目?
EN

Stack Overflow用户
提问于 2009-06-08 16:39:51
回答 6查看 34.1K关注 0票数 72

我有过

var $set = $('.foo,.bar').filter(
    function() {return $(this).parents('.baz').length < 1;});

作为选择其类为foobar的所有元素的一种方式,并且这些元素不是其类为baz的元素的后代。有没有一个选择器可以在不需要过滤lambda的情况下完成同样的事情?

<div class='foo'/><!--match this-->
<div class='bar'/><!--match this-->
<div class='baz'>
    <div class='foo'/> <!--don't match this-->
</div>
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-06-08 17:13:26

事情的真相是,jQuery根本没有一种特别优雅的方法来做你想做的事情。虽然chaos的答案确实有效,但你不得不怀疑,与你拥有的更冗长但更快的过滤功能相比,复杂的选择器(它的速度与复杂网页中的选择器的速度一样慢)是否值得。这真的不是什么大问题,我个人只是厌倦了当我可以避免的时候,特别长的,令人费解的选择器。

另一种选择是创建自己的选择器,因为jQuery非常棒:

jQuery.expr[':'].parents = function(a,i,m){
    return jQuery(a).parents(m[3]).length < 1;
};

$('.foo,.bar').filter(':parents(.baz)');

Sizzle映射是expr选择器引擎的一部分,可以在以下位置找到文档:Sizzle Custom Pseudo-Selectors

票数 80
EN

Stack Overflow用户

发布于 2009-06-08 16:44:15

$('.foo:not(.baz .foo),.bar:not(.baz .bar)')
票数 31
EN

Stack Overflow用户

发布于 2009-09-28 05:12:54

我不能让它工作:

$(".children:not(#parent .children)");

但我可以让它起作用:

$(".children").not($("#parent .children"));

注意:不确定这是否与我使用的1.2.6版本的jQuery有关

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/965816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档