我有一个树形图,其中每个节点都有一个描述节点颜色的元素(绿色或红色)。这些颜色是分层的,如果一个节点是红色的,那么它的父节点将是红色。这个想法是颜色在树上移动(我希望这是有道理的。
下图显示了一个示例树,其中(例如)Bilbo为红色表示Durin为红色,这反过来表示Level 2-B为红色等。
我在JSFiddle here中的代码应该加载树数据并显示节点为红色的那些分支。如果它打到一个绿色的节点并且有一个绿色的子节点,我希望它们 不 被扩展。
例如,下面是树加载时我想要发生的图片;
但这是实际发生的事情;
(请注意,当我不想要它们时,Merry和Pipen已经扩展了,但Gandalf和Saruman正确地崩溃了)
我用来递归扩展相应节点的代码如下:
root = treeData[0];
root.x0 = height / 2;
root.y0 = 0;
function toggleAll(d) {
if (d.children) {
if (d.status == "green") {
d._children = d.children;
d._children.forEach(toggleAll);
d.children = null;
}
}
}
root.children.forEach(toggleAll);
我有一种感觉,我错误的地方在
d._children.forEach(toggleAll);
(因为它没有我能辨别的效果)但我无法弄清楚为什么它不起作用。
非常感谢你阅读这篇文章:-)。
答案 0 :(得分:3)
如果状态不是绿色,您仍然需要遍历树:
function toggleAll(d) {
if (d.children) {
if (d.status == "green") {
d._children = d.children;
d._children.forEach(toggleAll);
d.children = null;
}
else
d.children.forEach(toggleAll);
}
}
更新了FIDDLE。