我正在尝试实现圆形打包示例:http://bl.ocks.org/4063530 - 但我希望它使用嵌套的“g”节点,因此更容易设置和控制每个圆的子项的可见性 - 但在此示例中,所有节点都在dom中的相同深度。我该如何筑巢?或者,如果没有嵌套,我如何只选择圆的直接子项(并非所有圆的所有子项)。我目前修改了示例以添加具有对象深度的类,如下所示:
d3.json("skills.json", function(error, root) {
var node = svg.datum(root).selectAll(".node")
.data(pack.nodes)
.enter().append("g")
.attr("class", function(d) { return "node node"+ d.depth; })
现在想要这样做:
d3.selectAll(".node1").on("mouseover",function(){
d3.select(this).classed("active",true).//SELECT ALL CHILDREN OF THE HOVERED NODE HERE
有人有什么想法吗?
答案 0 :(得分:1)
在pack
数据之后,我无法想出一种嵌套g元素的方法,所以这是一个不那么优雅的解决方案:
function checkParent(d, w) {
if(!d.parent) return false;
if(d.parent == w) {
return true;
} else {
return checkParent(d.parent, w);
}
}
node.on("mouseover",function(d){
d3.select(this).classed("active",true);
d3.selectAll(".node")
.filter(function(w){ return checkParent(w, d); })
.classed("active",true);
});
node.on("mouseout",function(d){
d3.select(this).classed("active",false);
d3.selectAll(".node")
.filter(function(w){ return checkParent(w, d); })
.classed("active",false);
});