很可能您的代码不起作用,因为d
它是一个对象(表示树中的一个节点),并且对象的默认 to-string 行为返回“[object Object]”;将类属性设置为“[object Object]”不会帮助您按类选择节点。
您需要将 class 属性定义为 data 的属性。例如,如果您的数据有一个type
属性,那么您可以将类属性定义为
.attr("class", function(d) { return "node " + d.type; })
接下来,注册一个 mouseover 和 mouseout 处理程序以进行交互:
.on("mouseover", function(d) { highlight(d.type); })
.on("mouseout", function(d) { highlight(null); })
最后,highlight 函数按类选择节点并切换覆盖填充颜色的活动类。
function highlight(type) {
if (type == null) d3.selectAll(".node").classed("active", false);
else d3.selectAll(".node." + type).classed("active", true);
}
活动类定义为:
.node.active {
fill: red;
}
现场示例:
有关如何选择相关节点的更多详细信息,请参阅我对如何选择(然后修改)相关元素的回答?