Sto lavorando con un layout d3 force-directed con etichette di nodo HTML implementate con elementi SVG foreignObject
. Vorrei selezionare questi elementi in momenti diversi per aggiornare le loro posizioni e altre proprietà (e tenerne traccia mentre vengono creati e scaricati con enter()
e exit()
), ma non mi sembra possibile selezionarli come altri elementi SVG .Impossibile selezionare l'elemento SVG foreignObject in d3
Ecco un esempio compatta:
HTML:
<html>
<head>
<title>Cannot Select SVG Foreign Object</title>
<script src="http://d3js.org/d3.v2.js"></script>
<script src = "fo_select.js"></script>
</head>
<body>
<svg id="example_svg" width="600" height="600">
<g>
<circle r="40" cx = "80" cy="80"></circle>
<foreignObject width = "100" height = "100" x = "200" y="200">
<body>Hello, world</body>
</foreignObject>
</g>
</svg>
<script>run()</script>
</body>
</html>
Javascript:
function run() {
svg = d3.select("#example_svg");
console.log(svg.selectAll("circle"));
console.log(svg.selectAll("foreignObject"));
}
Questo è anche fino a http://bl.ocks.org/3217448. L'output della console è:
[Array[1]]
[Array[0]]
dove il primo array contiene l'elemento circle
, mentre la seconda è vuoto. Perché l'oggetto circle
è selezionabile, ma lo foreignObject
non lo è? Presumo che abbia a che fare con la natura insolita di foreignObject
. Come lo selezionerei per manipolarlo nel mio codice? Grazie mille.
(aggiornato per rimuovere l'errore di battitura extra) –