Javascript 如何获取所有可能有祖先的元素,并且它们的祖先没有指定的类?

Javascript 如何获取所有可能有祖先的元素,并且它们的祖先没有指定的类?,javascript,jquery,html,jquery-selectors,css-selectors,Javascript,Jquery,Html,Jquery Selectors,Css Selectors,我的HTML中有一部分类似于下面的内容,我必须只选择那些没有指定类的祖先的元素。我从事的项目相当大,我想我不应该在这里发布所有代码,我认为这超出了StackOverflow的目的 我想要的是通过他们的祖先过滤元素,而不仅仅是他们的父母。我试过这个: //这将为其中两个元素着色,而不是一个元素。它给“.a>.b”上色,这种行为在我看来是错误的。 $(“:not(.a).b:not(.a)”.css(“颜色”、“红色”); //这个调用只对“.b”的边框着色,我认为这是正确的行为,应该是上面调用的

我的HTML中有一部分类似于下面的内容,我必须只选择那些没有指定类的祖先的元素。我从事的项目相当大,我想我不应该在这里发布所有代码,我认为这超出了StackOverflow的目的

我想要的是通过他们的祖先过滤元素,而不仅仅是他们的父母。我试过这个:

//这将为其中两个元素着色,而不是一个元素。它给“.a>.b”上色,这种行为在我看来是错误的。
$(“:not(.a).b:not(.a)”.css(“颜色”、“红色”);
//这个调用只对“.b”的边框着色,我认为这是正确的行为,应该是上面调用的行为。
$(“:not(.a)>.b:not(.a)”).css(“边框颜色”、“蓝色”)
span{
边框:0.1rem实心灰色;
}

.a>.b
.a>.a.b
B
a.b
选择具有类b但不具有类a的所有元素,这些元素具有任何不具有类a的祖先,例如,
&

选择具有b类(不含a类)且不具有a类的直接父级的所有元素

选择具有类b但不具有类a的所有元素,这些元素具有任何不具有类a的祖先,例如,
&


选择所有b类元素(不含a类)和a类元素没有直接父元素的元素。

您的意思是选择

  • 不是
    .a
    ,并且
  • 没有任何属于
    .a
    的祖先
那么这只能通过jQuery()实现:

如果需要在CSS中执行此操作,可以使用带有上述选择器的jQuery添加类,也可以使用覆盖:

.b {
  /* Style all .b elements */
}

.a .b, .a.b {
  /* Override the previous rule */
}

您的意思是要选择

  • 不是
    .a
    ,并且
  • 没有任何属于
    .a
    的祖先
那么这只能通过jQuery()实现:

如果需要在CSS中执行此操作,可以使用带有上述选择器的jQuery添加类,也可以使用覆盖:

.b {
  /* Style all .b elements */
}

.a .b, .a.b {
  /* Override the previous rule */
}

如果你定义了你要做的事情,而不是解释这个XY问题,你的问题会更好。@Rorymcrossan,我已经更新了这个问题。我希望现在更好。如果你定义了你要做的事情,而不是解释这个XY问题,你的问题会更好。@Rorymcrossan,我已经更新了这个问题。我希望现在好多了。谢谢你的回答!它解释了这种行为。您知道如何更改选择器,使其选择具有类
b
,但不具有类
a
,且具有所有不具有类
a
的祖先的所有元素吗?这可能吗?@silviubogan不知道你说的是什么意思。看起来你的第二个版本(使用的是
)正是你想要的,不是吗?@BoltClock给了我我想要的答案,我测试了他的选择器,它工作了。无论如何谢谢你<代码>:-)
谢谢你的回答!它解释了这种行为。您知道如何更改选择器,使其选择具有类
b
,但不具有类
a
,且具有所有不具有类
a
的祖先的所有元素吗?这可能吗?@silviubogan不知道你说的是什么意思。看起来你的第二个版本(使用的是
)正是你想要的,不是吗?@BoltClock给了我我想要的答案,我测试了他的选择器,它工作了。无论如何谢谢你<代码>:-)
$(".b:not(.a, .a *)")
.b {
  /* Style all .b elements */
}

.a .b, .a.b {
  /* Override the previous rule */
}