Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪个JQuery选择器排除父项与给定选择器匹配的项?_Jquery_Jquery Selectors_Css Selectors - Fatal编程技术网

哪个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'));
})