所以代码的结构是
<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解决方案对我来说也是可以接受的。我无法弄清楚如何。
答案 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解决方案(使用has
和not
伪选择器):
$('div.day_graph svg.y_axis:not(:has(text.y_label))')