d3如何在现有的其他元素之前插入新的SVG元素?

时间:2016-11-16 12:24:35

标签: javascript d3.js svg

感谢this question我想我已经学会了如何做到这一点,但我不能相信我已经把它弄好了,因为它很丑陋。

我们假设有一个元素#foo,我想在之前创建一个SVG元素。我真的必须这样做:

var svg = d3.select(d3.select('#foo').node().parentNode)
  .insert('svg', '#foo')

我错过了什么吗? (编辑:要清楚,上面的示例代码确实有效,但它非常不透明,包括重复选择器。)

1 个答案:

答案 0 :(得分:1)

您只需要typeselector

selection.insert(type, before)

例如,在此演示中,圆圈是ID为foo的元素。所以,

var svg2 = svg.insert("svg", "#foo");

在圆形元素之前插入子SVG。

var svg = d3.select("body").append("svg")
var circle = svg.append("circle").attr("id", "foo");
var svg2 = svg.insert("svg", "#foo");
svg2.attr("id", "childSVG");

var mySVG = (new XMLSerializer()).serializeToString(svg.node());
console.log(mySVG)
<script src="https://d3js.org/d3.v4.min.js"></script>