如果要将选择减少到选定元素的子集,请使用filter。如果要选择后代元素,请使用select或selectAll。
大多数情况下,过滤器用于根据数据或索引过滤元素。this
但是,您可以像在过滤器函数中一样访问选定的元素。因此,如果您选择了一些元素,并且您想将该选择减少到仅那些不透明度为 1 的元素,您可以说:
var opaque = selection.filter(function() {
return this.style.opacity == 1;
});
为了安全起见,您可能更喜欢查看计算的样式而不是元素的样式属性。这样,如果不透明度是从样式表继承的,您将获得正确的值;否则,当样式被继承this.style.opacity
时将是空字符串。
var opaque = selection.filter(function() {
return window.getComputedStyle(this, null).getPropertyValue("opacity") == 1;
});
或者等效地,选择节点并使用selection.style:
var opaque = selection.filter(function() {
return d3.select(this).style("opacity") == 1;
});
如果您按数据或按类而不是按计算的样式属性进行过滤,您可能会发现它更容易。例如,如果您在节点上设置了一个类,则可以改为按类过滤选择:
var opaque = selection.filter(".opaque");