d3删除连接到被点击节点的节点

时间:2015-08-20 00:20:23

标签: javascript d3.js

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

现在我的问题是,无论如何,当您右键单击删除节点以更改功能时,您不会删除实际节点,而是连接到某个类型的节点。

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

http://imgur.com/MhPL34P

我试过但我失败了。

1 个答案:

答案 0 :(得分:0)

似乎你想要选择性崩溃。 这是一些节点应该崩溃但其他节点不应该崩溃。 为此,您需要创建一个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”外,其所有子节点都将崩溃,因为类型为蓝色