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

art*_*bot 2 javascript svg d3.js

感谢这个问题,我想我学会了如何做到这一点,但我不太相信我已经做对了,因为它像你喜欢的那样丑陋。

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

var svg = d3.select(d3.select('#foo').node().parentNode)
  .insert('svg', '#foo')
Run Code Online (Sandbox Code Playgroud)

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

Ger*_*ado 5

你只需要typeselector

selection.insert(type, before)
Run Code Online (Sandbox Code Playgroud)

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

var svg2 = svg.insert("svg", "#foo");
Run Code Online (Sandbox Code Playgroud)

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

selection.insert(type, before)
Run Code Online (Sandbox Code Playgroud)
var svg2 = svg.insert("svg", "#foo");
Run Code Online (Sandbox Code Playgroud)