删除某些节点时更新D3树

时间:2016-10-14 14:38:43

标签: javascript d3.js svg

我有example中的树。 当我删除一些节点时,应该更新树。但我不想完全清理svg和重绘树。要移除的代码:

function click(d) {
  d.children = d.children[0].children[0].children;
  update(); // there is call inside to link.exit().remove(); and node.exit().remove();
}

问题是树被破坏(删除C和D后): enter image description here enter image description here

以下是代码 - JSfiddle link

在没有完全重绘的情况下正确绘制树的最佳方法是什么?

我试图更新深度,但没有帮助

function click(d) {
  d.children = d.children[0].children[0].children;
  d.children[d].depth =  d.children[d].depth -2;
  update(); // there is call inside to link.exit().remove(); and node.exit().remove();
}

1 个答案:

答案 0 :(得分:1)

您需要为圈子和链接添加更新功能。

由于您只进行了添加和删除,因此正在添加和删除元素,但是当需要更新元素时​​,不会执行任何操作。通过在任何更改时添加圆圈和链接的更新功能,它们将“更新”到新位置。

// ** UPDATE CIRCLES ***
node.attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; })

// *** UPDATE LINK ***
link.attr("d", diagonal);

以下是更正的小提琴:http://jsfiddle.net/t0mhsauf/15/

希望这有帮助。