d3 - 将元素附加到外部SVG文件

时间:2013-11-27 04:19:52

标签: svg d3.js

我有一个图片,我想加载作为我的d3可视化的背景(或简单地作为svg,我可以追加circle元素)。插图采用svg格式。我试图将其加载到我的html文件中,这样我就可以将元素(例如圆圈)附加到svg文件(或顶部)或{ {1}}它是在。我尝试了两种方法:

div

svg图像看起来很完美,但没有圆圈出现。在Firefox中,外部<script> d3.xml("bal.svg", "image/svg+xml", function(xml) { document.body.appendChild(xml.documentElement); }); var circle = svg.append("circle") .attr("cx", 100) .attr("cy", 100) .attr("r", 20) .style("fill", "red"); </script> 文件的html显示为:

svg

我也尝试过:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 
width="250px" height="250px" viewBox="0 0 250 250" 
enable-background="new 0 0 250 250" xml:space="preserve">

同样,svg图像看起来非常精细,但没有圆圈出现。在这种情况下,html在浏览器中显示为:

<div id="htmlEmbed"></div>

<script>

d3.select("#htmlEmbed")
.append("object")
.attr("data", "tba2.svg")
.attr("width", 500)
.attr("height", 500)
.attr("type", "image/svg");

d3.select("#htmlEmbed")
.append("circle")
.attr("cx", 600)
.attr("cy", 600)
.attr("r", 20)
.style("fill", "red"); 

我觉得这应该是相当简单的,但我不知道。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:9)

您尝试过的代码存在两个问题。首先,您需要正确定义svg,其次,您需要执行在加载SVG后修改SVG的代码。由于d3.xml的异步性质,情况并非如此。

所以你需要运行的代码就是这个。

d3.xml("http://openvz.org/images/1/17/Warning.svg", function(xml) {
  document.body.appendChild(xml.documentElement);

  var circle = d3.select("svg").append("circle")
            .attr("cx", 100)
            .attr("cy", 100)
            .attr("r", 20)
            .style("fill", "red");
});

工作小提琴(模数安全限制)here