【问题标题】:d3 remove nodes connected to clicked noded3 删除连接到单击节点的节点
【发布时间】:2015-11-13 11:20:01
【问题描述】:

所以我使用这个示例D3 force layout - .exit().remove() just giving back errors on tick event 来创建我的强制导向布局。

现在我的问题是,当您右键单击删除节点以更改功能时,我的问题仍然存在,因此您不会删除实际节点,而是删除特定类型的连接到它的节点。

例如,如下图所示,如果我单击 A,我想删除任何蓝色和红色的东西,但不要从 c 中删除红色或蓝色,如果我单击 b,它不会删除任何东西。

http://imgur.com/MhPL34P

我试过了,我失败了。

【问题讨论】:

  • 你的散文会破坏任何语法解析器,但是,我假设你问是否有可能编写一些 js 来提供删除与单击节点共享链接的所有节点的行为,而不删除说点击节点。根据这个假设,你的问题的答案是肯定的。如果您需要有关如何完成此任务的指导,请发布您的尝试并推动自己提出一些具体问题。

标签: javascript d3.js


【解决方案1】:

您似乎想要选择性地折叠。 那就是一些节点应该崩溃,但其他节点不应该。 为此,您需要创建一个 JSON 来指示此节点永远不会崩溃 摘自我的 JSON 红色的那个是可折叠的

    {
    "name": "cluster",
        "type": "red",
        "children": [{
        "name": "AgglomerativeCluster",
            "type": "red",
            "size": 3938
    },

下图蓝色是不可折叠的

    , {
        "name": "ShortestPaths",
            "type": "blue",
            "size": 5914
    },

在您的点击功能中,您将删除除蓝色类型之外的所有其他节点,如下所示

function click(d) {
    if (d3.event.defaultPrevented) return; // ignore drag
    if (!d.collapsed) {
        d.collapsed = true;
        d._children = d.children;
        var openNodes = [];
        //on collapse remove all nodes except the one with type blue.
        d.children.forEach(function (d) {
            if (d.type == "blue") openNodes.push(d);
        });
        d.children = openNodes;
    } else {
        d.collapsed = false;
        d.children = d._children;
        d._children = null;
    }
    update();
}

完整的工作代码是here

请注意,在点击节点 "cluster" 时,它的所有子节点都会崩溃,除了节点“mergeEdge”,因为它类型是蓝色

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多