0

我有一个 D3 力有向图,它首先显示有几个节点。每个节点都有一个单击处理程序,它将进一步扩展图形并动态添加更多节点和链接到单击的节点。每个节点也有一个 SVG 矩形。因为新的链接和节点被添加到现有的图表中,链接出现在点击节点的顶部,因为 SVG 是“画家”模型。所以我使用 d3.selectAll().filter().sort() 以正确的顺序放置 DOM 节点。除了节点和链接在有向图上放错位置外,这是可行的。有什么方法可以使用 sort() 并且保持 force.nodes() 和 force.links() 数据同步?

更新:我创建了一个 jsfiddle 来演示这种情况。单击几下创建新节点后,链接变得不稳定。如果注释掉对“reorder_nodes_and_links()”的调用,则图表是稳定的,但由于 DOM 顺序,链接会呈现在节点之上。

http://jsfiddle.net/bobfaist/MURwA/

4

1 回答 1

1

selection.insert 接受第二个参数,告诉它在其他东西之前插入东西。

我现在看不到你的小提琴,但这是一个类似项目的东西。

这会在任何归类为节点的内容之前插入新行。

lines.enter().insert("svg:line", ".node")

https://github.com/mbostock/d3/wiki/Selections#wiki-insert

于 2012-06-28T15:21:01.473 回答