假设我用 d3.js 创建了一个像这样的 svg:
svg = d3.select('.svgContainer').append("svg")
.attr("width", '100%')
.attr("height", '100%')
.call(d3.zoom().on("zoom", function () {
svg.attr("transform", d3.event.transform)
}))
.append("g");
我现在想向它添加不同的组(动态地和来自不同的文件)。例如那个:
<svg>
<g id="myGroup">
<rect width="100" height="100" fill="blue" />
</g>
</svg>
我知道,我可以像这样添加整个 svg(假设文件名为 test.svg):
d3.xml("test.svg").then(function(xml) {
var svgNode = xml.getElementsByTagName("svg")[0];
svg.node().appendChild(svgNode);
});
但是,这会产生以下 DOM:
svg
-svg
--myGroup
但是因为我需要相对于主 svg 转换我的组,所以我需要以下 DOM 结构:
svg
-myGroup
--(eventually more dynamically added groups)
我尝试了以下方法并获得了正确的 DOM,但该组没有出现在我的 svg 中:
d3.xml("test.svg").then(function(xml) {
var svgGroup = xml.getElementById("myGroup");
svg.node().append(svgGroup);
});
编辑:我发现,这应该已经可以工作了,问题是我<defs>的 SVG 内部有几个关键(例如渐变)。当我只添加组时,我丢失了它们。我结束了,把我的<g>周围包裹起来,<defs>现在一切正常。
holdtom
慕码人2483693
相关分类