【发布时间】:2017-07-18 12:41:08
【问题描述】:
我正在使用 D3.js (v4) 构建一个交互式图表,其中每个父节点都有一组可折叠的子节点。因为我还想创建工具提示等,所以我用g 包裹每个圆圈。我的代码的相关部分如下所示:
var node = svg.append("g").selectAll(".node");
...
function update() {
nodes = getVisibleNodes()
...
node = node.data(nodes, function(d) { return d.name; });
node.exit().remove();
node = node.enter()
.append("g")
.classed("node", true)
.merge(node);
node
.append("circle")
.attr("r", function(d) { return d.size / 500; })
.on("click", click)
.on("contextmenu", rightclick)
.call(drag);
}
起初一切似乎都正常,但后来我注意到每次运行update 并且显示/隐藏一些节点时,新的输入节点会附加在旧节点之上。如果我点击一下,我最终会在每个g 中画出几十个圆圈,一个在另一个之上(当它们是半透明时很容易看到)。
我真的不明白这里发生了什么,我做错了什么。对我有什么好的建议吗?
【问题讨论】:
标签: javascript d3.js