在使用d3.js(example)的树布局上,我想要折叠不在已被点击的分支中的节点。
例如,在上面的演示中,请尝试以下操作:
现在你应该看到“孩子1”和“孩子2”的孩子。
我希望发生以下情况:
因此,应隐藏除“活动”分支之外的节点的子节点。
我怎样才能最好地接近这个? (当然有效,因为我将使用相当大的数据集)
答案 0 :(得分:5)
一个简单的解决方案是修改click函数,这样如果节点有父节点,则父节点的子节点都会折叠,但前提是子节点不是被点击的节点。
function click(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else {
d.children = d._children;
d._children = null;
}
// If the node has a parent, then collapse its child nodes
// except for this clicked node.
if (d.parent) {
d.parent.children.forEach(function(element) {
if (d !== element) {
collapse(element);
}
});
}
update(d);
}
更新了jsbin:http://jsbin.com/etIJABU/2/edit
答案 1 :(得分:0)
如果您只想在点击包含子项的节点时折叠其他节点,请添加"&& d.children"在第二个IF ..
function click(d) {
if (d.children) {
d._children = d.children;
d.children = null;
}
else {
d.children = d._children;
d._children = null;
}
if (d.parent && d.children) { //add here,
d.parent.children.forEach(function(element) {
if (d !== element) {
collapse(element);
}});
}
update(d);
}