Javascript Can';t删除D3.js力有向图中节点的子元素

Javascript Can';t删除D3.js力有向图中节点的子元素,javascript,d3.js,Javascript,D3.js,我正在使用D3.js力定向图,就像这个演示。例如,我修改了这段代码,用SVG图像和标签更改圆圈,并用SVG路径链接。单击节点它的展开和折叠子节点,意味着在节点的鼠标单击上添加和删除子节点 添加新节点后,所有现有节点也会重新创建图像和标签,旧节点仍然存在,但我希望只更新一个新节点,而不影响现有节点 删除节点也存在同样的问题,应该用新节点替换旧节点,不向节点添加新元素,不影响其他现有节点,只更改添加或删除的节点 function update() { var nodes = flatten(

我正在使用D3.js力定向图,就像这个演示。例如,我修改了这段代码,用SVG图像和标签更改圆圈,并用SVG路径链接。单击节点它的展开和折叠子节点,意味着在节点的鼠标单击上添加和删除子节点

添加新节点后,所有现有节点也会重新创建图像和标签,旧节点仍然存在,但我希望只更新一个新节点,而不影响现有节点

删除节点也存在同样的问题,应该用新节点替换旧节点,不向节点添加新元素,不影响其他现有节点,只更改添加或删除的节点

function update() {
    var nodes = flatten(root),
        links = d3.layout.tree().links(nodes);

    // Restart the force layout.
    force.nodes(nodes)
        .links(links)
        .linkDistance(120)
        .charge(-500)
        .start();

    path = vis.selectAll("path.link");
    path = path.data(force.links());
    path.enter().append("svg:path")
        .attr("class", "link")
        .attr("marker-end", "url(#end)");

    path.exit().remove();
    node = vis.selectAll(".node");
    node = node.data(force.nodes());
    node.enter().append("g")
        .attr("class", "node")
        .on("click", click)
        .call(force.drag);

    node.append("image")
        .attr("xlink:href", function (d) {
        return "http://t2.gstatic.com/images?q=tbn:ANd9GcT6fN48PEP2-z-JbutdhqfypsYdciYTAZEziHpBJZLAfM6rxqYX";
    })
        .attr("class", "image")
        .attr("x", -15)
        .attr("y", -15)
        .attr("width", 24)
        .attr("height", 24);

    node.append("text")
        .attr("class", "text")
        .attr("x", 40)
        .attr("dy", ".35em")
        .style("fill", color)
        .text(function (d) {
        return d.name;
    });

    node.exit().remove();
}

我用我的代码创建了一个小程序。

需要删除节点而不是其中的div,只需在force.start()之前添加两行即可


更新版本的

需要删除节点而不是其中的div,只需在force.start()之前添加两行


更新版本的

这里我了解了如何删除旧节点和链接vis.selectAll(“.node”).remove();和vis.selectAll(“path.link”).remove();删除旧路径和节点,但在节点上绘制路径,因此在更新时使svg非常糟糕。现在有人能告诉我如何更新链接吗?仅因为删除节点工作正常,但当我尝试删除路径时,在创建节点后添加新路径..:(在这里我了解了如何删除vis.selectAll(“.node”).remove()和vis.selectAll(“path.link”).remove()中的旧节点和链接);删除旧路径和节点,但在节点上绘制路径,因此使svg在更新时非常糟糕现在有人能告诉我如何更新链接吗?仅因为删除节点可以正常工作,但当我尝试删除路径时,在创建节点后添加新路径..:(
vis.selectAll("path").remove();
vis.selectAll(".node").remove();