哪个JQuery选择器排除父项与给定选择器匹配的项?
我有哪个JQuery选择器排除父项与给定选择器匹配的项?,jquery,jquery-selectors,css-selectors,Jquery,Jquery Selectors,Css Selectors,我有 将:not('.baz')添加到顶级选择器。选择器chaos应该可以: $('.foo:not(.baz .foo),.bar:not(.baz .bar)') 只是想给你一个关于调用的扩展的提示,你可以用它来测试你的css/jquery选择器 来自网站:Firefinder是Firebug(在Firefox中)的扩展,提供了快速查找与选定CSS选择器或XPath表达式匹配的HTML元素的功能。它允许您在查看内容的同时立即测试页面中的CSS选择器,匹配的元素将突出显示。事实是,jQuer
将:not('.baz')添加到顶级选择器。选择器chaos应该可以:
$('.foo:not(.baz .foo),.bar:not(.baz .bar)')
只是想给你一个关于调用的扩展的提示,你可以用它来测试你的css/jquery选择器
来自网站:Firefinder是Firebug(在Firefox中)的扩展,提供了快速查找与选定CSS选择器或XPath表达式匹配的HTML元素的功能。它允许您在查看内容的同时立即测试页面中的CSS选择器,匹配的元素将突出显示。事实是,jQuery并没有一种特别优雅的方式来做您想要做的事情。虽然chaos的答案确实有效,但你必须想一想,这个复杂的选择器(在一个复杂的网页中,它的速度可能和选择器一样慢)是否比你拥有的更详细但更快的过滤功能更值得。这其实没什么大不了的,我只是个人厌倦了特别长的、复杂的选择器,因为我可以避免它 另一种选择是创建自己的选择器,因为jQuery非常棒:
$('.foo:not(.baz .foo),.bar:not(.baz .bar)')
jQuery.expr[':'].parents=function(a,i,m){
返回jQuery(a).parents(m[3]).length<1;
};
$('.foo.bar').filter(':parents.baz');
expr
映射是Sizzle选择器引擎的一部分,可以在此处找到文档:我无法让它工作:
jQuery.expr[':'].parents = function(a,i,m){
return jQuery(a).parents(m[3]).length < 1;
};
$('.foo,.bar').filter(':parents(.baz)');
$(".children:not(#parent .children)");
但我可以让它工作:
jQuery.expr[':'].parents = function(a,i,m){
return jQuery(a).parents(m[3]).length < 1;
};
$('.foo,.bar').filter(':parents(.baz)');
$(".children:not(#parent .children)");
注意:不确定这是否与我正在使用的jQuery版本1.2.6有关代码>
我使用的是根主题,它们将下拉菜单从“子菜单”更改为“.dropdown menu”试试这个:
$(".children").not($("#parent .children"));
接受,因为它比混乱更完整”-我在哪里可以找到expr数组的API文档?据我所知,实际上没有。这很整洁,尽管我认为我可能会将表达式名称更改为noparents,因为这说明它做得更好。指向该JSBin的链接与答案不匹配。已经有一段时间了,所以URL一定是被回收的。我在这个答案中添加了对
expr
文档的引用。你可以使用最接近的方法,而不是父母,使它更快closest
在找到匹配元素后停止查找,而parents
则沿DOM树向上移动到文档的根元素以查找匹配元素。使用$().not()
是最简单的解决方案。按照要求去做是很好的。
$('div').filter(function () {
return ($(this).parent().not('.baz'));
})