Estoy trabajando con un diseño dirigido por fuerza d3 con etiquetas de nodo HTML implementadas con elementos SVG foreignObject
. Me gustaría seleccionar estos elementos en varias ocasiones para actualizar sus posiciones y otras propiedades (y rastrearlas a medida que se crean y borran con enter()
y exit()
), pero no parece poder seleccionarlas como otros elementos SVG .No se puede seleccionar el elemento foreignObject de SVG en d3
Aquí está un ejemplo compacta:
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"));
}
Esto también corresponde a http://bl.ocks.org/3217448. La salida de la consola es:
[Array[1]]
[Array[0]]
donde la primera matriz contiene el elemento circle
, mientras que el segundo está vacía. ¿Por qué es el objeto circle
seleccionable, pero el foreignObject
no? Supongo que tiene que ver con la naturaleza inusual del foreignObject
. ¿Cómo lo seleccionaría para manipularlo en mi código? Muchas gracias.
(Actualizado para eliminar el error de coma adicional) –