css复杂的选择器查询

时间:2014-02-26 19:00:15

标签: css d3.js

所以代码的结构是

<div class="day_graph">
   <svg class='y_axis'>
     .....
     <text class='y_label'>
     ...
为了简单起见,我省略了标签。基本上我想用&#39; y_axis&#39;选择所有svg元素。在包含&#39; day_graph&#39;的div中并且svg元素不应包含具有类y_label的文本元素。任何人都可以帮我这个吗?

编辑: 对此感到抱歉。使用javascript解决方案对我来说也是可以接受的。我无法弄清楚如何。

4 个答案:

答案 0 :(得分:3)

执行此操作的D3方法如下:

d3.selectAll(".day_graph > .y_axis")
  .filter(function() { return d3.select(this).selectAll("text.y_label").empty(); });

答案 1 :(得分:0)

除了你的最终条件外,这是可能的。这不能用css来完成,你需要javascript。

尝试重构您的html,以便为所有svg元素添加另一个类,这些元素没有带有类y_label的子text元素。

答案 2 :(得分:0)

我可以看到两种可能的解决方法:

1)仅限CSS - 如果没有<svg>元素的<text>元素不包含任何其他元素,例如:

<div class="day_graph">
    <svg class='y_axis'>
    </svg>
</div>

然后,您可以使用:empty选择器来定位这些元素。像这样的东西可以解决这个问题:

.day_graph .y_axis:empty {
    //apply style
}

2)Javascript - 如果不是这样的话,那么Javascript,在这种情况下是jQuery,因为我不太熟悉D3,必须使用你做这样的事情:

$('.day_graph .y_axis').not(':has(.y_label)').addClass('whatever');

答案 3 :(得分:0)

不幸的是,

CSS没有父选择器。您需要使用javascript来执行此操作。这是一个jquery解决方案(使用hasnot伪选择器):

$('div.day_graph svg.y_axis:not(:has(text.y_label))')

DEMO