我有一个D3力导向图,它首先显示几个节点。每个节点都有一个单击处理程序,它将进一步扩展图形并动态添加更多节点和链接到单击的节点。每个节点也有一个SVG矩形形状。由于新链接和节点已添加到现有图形中,因此链接显示在单击节点的顶部,因为SVG是“画家”模型。所以我使用d3.selectAll()。filter()。sort()来按正确的顺序放置DOM节点。除了节点和链接在有向图上放错位置之外,这是有效的。有没有办法使用sort()但同时保持force.nodes()和force.links()数据同步?
更新:我创建了一个jsfiddle来演示这种情况。点击几下创建新节点后,链接就会变得不稳定。如果对“reorder_nodes_and_links()”的调用被注释掉,则图表是稳定的,但由于DOM顺序,链接将在节点顶部呈现。
答案 0 :(得分:1)
selection.insert接受第二个参数,告诉它在其他事情之前插入东西。
我现在很难看到你的小提琴,但这是来自类似项目的东西。
在任何被归类为节点的行之前插入新行。
lines.enter().insert("svg:line", ".node")