2 回答
TA贡献1805条经验 获得超10个赞
作为对已接受答案的补充:如果您想要纯 D3 解决方案,则可以使用selection.append函数。在你的情况下:
d3.xml(svgfile).then(function(xml) {
var svgNode = d3.select(xml).select("#MyGroup");
svg.append(() => svgNode.node()) ;
});
或者更短:
d3.xml(svgfile).then(function(xml) {
svg.append(() => d3.select(xml).select("#MyGroup").node()) ;
});
这是使用其他答案中链接的维基百科 SVG 的演示:
var svgfile = "https://simple.wikipedia.org/static/images/mobile/copyright/wikipedia-wordmark-en.svg";
var svg = d3.select('body').append("svg")
.attr("width", '120')
.attr("height", '20');
d3.xml(svgfile).then(function(xml) {
var svgNode = d3.select(xml).select("#Wikipedia");
svg.append(() => svgNode.node());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
TA贡献1860条经验 获得超9个赞
你快到了。我已经说明了在这个 codepen 中添加元素的两种方法。第一种方法的问题在于svgNode它不是 a node,而是 a nodeList。您可以使用循环添加列表中的每个节点,如代码所示:
...
var toAdd = svgNode.childNodes;
for (var i = 0; i < svgNode.childElementCount; i++){
svg.node().appendChild(toAdd[i]);
}
...
关于第二种方法,我不能说有什么问题。我从不同的 svg 文件导入了一个路径,它显示在下部。我更改的唯一细节是我明确设置了 svg 元素的大小,而不是100%. 是否有可能因为它在可见部分之外而没有被渲染?
添加回答
举报