In a nutshell: you cannot append a HTML element to a SVG. The reason is simple: <div>
, <p>
, <h1>
, <h2>
, <td>
, <li>
and so on are not valid SVG elements.
This has been asked and answered many, many times. However, I'd like to answer this question because of a specific part of it (which is normally not asked):
When using chrome's inspect I see the newly created elements.
Yes, the elements are there. But this doesn't mean it's going to work.
Let's show this in the following snippet, in which I'm appending <div>
s to the SVG. look at the console.log
, it shows the SVG structure:
var svg = d3.select("svg");
var data = d3.range(5);
var divs = svg.selectAll("foo")
.data(data)
.enter()
.append("div")
.html("Where are you?")
var mySVG = (new XMLSerializer()).serializeToString(svg.node());
console.log(mySVG)
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg></svg>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…