2016-11-16 103 views
0

感谢this question我想我学会了如何做到这一点,但我不能完全相信我已经做好了,因为它很丑,只要你喜欢。d3如何在现有的其他元素之前插入新的SVG元素?

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

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

我是否错过了什么? (编辑:要清楚,上面的示例代码的工作,但它是相当不透明的,包括选择的重复。)

回答

0

你只需要typeselector

selection.insert(type, before) 

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

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

在circle元素之前插入一个子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>

+0

感谢您详细的答复。然而,我不确定它是否回答我的问题 - 您首先假定选择是您想要插入内容的父项。我的问题是关于在DOM中的已知其他元素之前初始创建SVG元素的问题。 – artfulrobot