【发布时间】:2016-12-24 06:01:02
【问题描述】:
我正在使用 D3 强制布局并尝试折叠子节点,同时保持图形固定,例如只需更改它们及其链接的不透明度即可。但是,我并不想一次折叠所有节点 - 实际上我在每个节点中都有一个名为“组”的属性,可以是 1,2 或 3。
当我单击一个节点时,会出现一个工具提示,其中每个组都有 3 个按钮 - 单击正确的按钮后,我希望该类型的子节点折叠,但它的所有子节点(全部 3组)也可以折叠。
这里是fiddle。
到目前为止,我尝试创建节点组 ID 和相应链接 ID 的数组,然后使用 JQuery 隐藏这些 DOM 对象,但这不起作用:
function collapseNodes(node, collapseType, isCollapsed) {
var collapseData = minimise(node, collapseType);
var cNodes = collapseData.nodes,
cLinks = collapseData.links;
console.log(collapseData);
var newClass = isCollapsed ? "uncollapsed" : "collapsed";
cNodes.forEach(function(n) {
d3.select(n).style("opacity", 0);
});
cLinks.forEach(function(l) {
d3.select(l).style("opacity", 0);
});
}
function minimise(node, assetMinType = "") {
// Function to minimise a node
var minNodes = [];
var minLinks = [];
if (node.group == 'asset') {
node.children.forEach(function(child) {
if (child.group == assetMinType)
minimiseRec(child, node.id);
});
}
else {
minimiseRec(node, "");
// We want to keep the top node and link
minNodes.shift();
minLinks.shift();
}
function minimiseRec(node, parentID) {
minNodes.push("#" + node.id);
minLinks.push("#parent_" + parentID + "_child_" + node.address);
node.children.map(function(child) {
minimise(child, node.id);
});
}
return { nodes: minNodes, links: minLinks };
}
有谁知道如何最好地做到这一点?
谢谢。
【问题讨论】:
标签: javascript jquery d3.js force-layout