Javascript 如何在CSS中选择一个不是另一个元素后代的元素(使用属性)

Javascript 如何在CSS中选择一个不是另一个元素后代的元素(使用属性),javascript,css,css-selectors,Javascript,Css,Css Selectors,在重新阅读CSS2.1和CSS3选择器规范之后,我怀疑这是不可能的,但您永远不知道 如果我可以使用CSS Decentant选择器选择一个p元素,即其他p元素的Decent,因此: p p {}; 是否有任何方法来否定Decentant选择器,并且仍然选择on type,以便我可以选择p元素,除了那些是其他p元素的Decentent的元素 p & ( p ! p ) {...}; i、 我想选择p类型的元素,但如果它们与p类型的其他元素分离,则不选择 顺便说一句:我在querySel

在重新阅读CSS2.1和CSS3选择器规范之后,我怀疑这是不可能的,但您永远不知道

如果我可以使用CSS Decentant选择器选择一个p元素,即其他p元素的Decent,因此:

p p {};
是否有任何方法来否定Decentant选择器,并且仍然选择on type,以便我可以选择p元素,除了那些是其他p元素的Decentent的元素

p & ( p ! p ) {...};
i、 我想选择p类型的元素,但如果它们与p类型的其他元素分离,则不选择

顺便说一句:我在querySelector()和querySelectorAll()中使用了这个选项,其中每个选项都是由属性而不是标记类型选择的,但我想展示一个可能的最简单示例

我尝试了这个但没有成功(语法错误!)

这被称为
否定伪类
,您可以找到有关它的更多信息

顺便说一下,它是CSS3,因此您不能将其用于8之前的IE版本。

:not(…)
选择器仅为CSS3,我通常使用此选项以实现CSS2兼容性:

p { color: #abc; border: ... ; ... }
h1 > p { color: inherit; border: inherit; ... }
如果您的
有一个共同的祖先,即您的html如下所示:

<body>
    <p> ... </p>
    <p>
        <p> ... </p>
        <p> ... </p>
    </p>
</body>
当然,也可以使用以下内容重置所有属性:

p p { color: inherit; background: inherit; ... }

如果你猜对了,那是不可能的<代码>:not(s)指定
s
必须是一个简单选择器


您可以做的最接近的事情是将样式应用于所有
p
,然后将其覆盖到
p

对不起,我意识到我的解释不准确,必须更改它!那不行。它的意思是“从非h1元素派生的p元素”。这并不意味着“一个p元素不是h1的后代”。因为
*:not(h1)
将匹配
,而且因为每个
都是
的后代(包括那些也从
派生的),所以它将匹配每个段落。你是对的。不管怎样,我还是把这个作为我的答案,以帮助那些不知道这个选择器的人。对不起,我意识到我的解释不准确,不得不改变它!
<body>
    <p> ... </p>
    <p>
        <p> ... </p>
        <p> ... </p>
    </p>
</body>
body > p { ... }
p p { color: inherit; background: inherit; ... }