感谢this question我想我已经学会了如何做到这一点,但我不能相信我已经把它弄好了,因为它很丑陋。
我们假设有一个元素#foo
,我想在之前创建一个SVG
元素。我真的必须这样做:
var svg = d3.select(d3.select('#foo').node().parentNode)
.insert('svg', '#foo')
我错过了什么吗? (编辑:要清楚,上面的示例代码确实有效,但它非常不透明,包括重复选择器。)
答案 0 :(得分:1)
您只需要type
和selector
:
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>