提问人:Eli 提问时间:12/17/2012 更新时间:12/17/2012 访问量:294
不是从其他项目派生的项目的选择器
Selector for item NOT descended from another item
问:
鉴于下面的 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>
谢谢!
答:
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()
评论