我一直在使用 http://bl.ocks.org/mbostock/4063570 作为指南来试验 D3 的集群功能。
如果我仔细复制该示例,它可以正常工作,就像我看到的所有其他 D3 SVG 示例一样,SVG 元素是由 D3 创建的。
我所做的改变给我带来了麻烦,是为了将多个 D3 图形插入到静态 HTML 中定义的布局中。
当我尝试让 D3 将元素添加到 HTML 中已经定义的 SVG 标记时:结果很接近,但并不总是足够接近。
检查创建的 DOM 元素,可以清楚地看到差异。
正常工作的代码包括:
var svgGraphic = d3.select("body").append("svg")
.attr("width", totalWidth)
.attr("height", totalHeight)
.append("g").attr("transform", "translate(80,0)");
这(加上这里未显示的几行)导致 DOM 元素处于类似于以下的层次结构中:
<svg width="600" height="200">
<g transform="translate(80,0)">
<path class="link" d="M0,100C95,100 95,50 190,50">
<path class="link" d="M0,100C95,100 95,150 190,150">
<g class="node" transform="translate(0,100)">
<g class="node" transform="translate(190,50)">
<g class="node" transform="translate(380,25)">
</g>
</svg>
当代码更像是:
var svgGraphic = d3.select("#graphic");
svgGraphic.append("g").attr("transform", "translate(80,0)");
路径和节点元素不嵌套在第一个“g”标签内:
<svg id="graphic" height="200" width="600">
<g transform="translate(80,0)">
<path class="link" d="M0,100C95,100 95,50 190,50">
<path class="link" d="M0,100C95,100 95,150 190,150">
<g class="node" transform="translate(0,100)">
<g class="node" transform="translate(190,50)">
<g class="node" transform="translate(380,25)">
</svg>
显然,我没有尝试附加结束 g 标记,但是在第一个示例中它是如何到达那里的?