不是从其他项目派生的项目的选择器

Selector for item NOT descended from another item

提问人:Eli 提问时间:12/17/2012 更新时间:12/17/2012 访问量:294

问:

鉴于下面的 HTML,您将如何选择所有不是 .itemcontainer(s) 后代的 .name(s)。

类似于 .group .header .name:not(descended from .itemcontainer)

我知道这可以通过jQuery或添加其他类轻松完成,但是有纯粹的css解决方案吗?我找不到“非后裔”选择器......

<div class='group'>

    <!-- Any number of ancestors of any type -->

    <div class='header'>

         <!-- Any number of ancestors of any type -->

        <div class='name'>

            SELECT ME!!!

        </div>

    </div>

    <div class='body'>

        <div class='itemcontainer'>

            <div class='item1'>

                <!-- Any number of ancestors of any type -->

                <div class='header'>

                        <!-- Any number of ancestors of any type -->

                    <div class='name'>

                            DON'T SELECT ME!!!

                    </div>

                </div>

                <div class='body'>

                    ...

                </div>

            </div>

                ...

        </div>

    </div>

        ...

</div>

谢谢!

css css-selectors

评论


答:

2赞 Amadan 12/17/2012 #1

我不知道有什么方法可以在CSS选择器中排除它;但是,您可以为所有人定义一个规则,然后为特定规则取消定义。

.group .header .name {
    background-color: green;
}
.group .itemcontainer .header .name {
    background-color: inherit;
}

编辑:鉴于您要实现的目标(从评论到我的答案),不将其作为纯CSS选择器进行操作更有意义,但实际上使用jQuery:

$('.group .header .name').filter(':not(.itemcontainer *)')​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​.click(onClick);

评论

0赞 Eli 12/17/2012
好主意。在这种情况下,我实际上是在尝试将事件处理程序绑定到将显示/隐藏正文的组名称,因此我必须在jQuery中排除它们。我只是通过在组名中添加一个单独的类 (.group_expand) 来处理它,尽管我更愿意有一种方法来指定所需的组 =o)
2赞 Josep 12/17/2012 #2

我认为你要做的是:

.name:not(.itemcontainer .name)

但这行不通,因为选择器只接受简单的选择器。换句话说:对不起,我认为您无法使用选择器完成此操作。:not():not()