假设我有以下 DOM 结构:
div
> svg
> defs
> g
> rect
> g
> g
<-- I want to insert an element here
> g
> g
parentg
的子g
元素都没有类、id 或任何我可以用作选择器的东西,我无法修改它们,因为它们来自加载到页面中的第 3 方小部件。
到目前为止,我能做的最好的事情就是插入第三个g
元素,但这是不可接受的。我想g
在当前索引 2 和 3 (或索引 1 和 2 如果你不计算rect
)之间向 parent 的孩子添加第 6 个元素。
这是我到目前为止所做的:
var test = d3.selectAll('#continer svg > g > g');
test = d3.select(test[0][2]);
test.append('foreignObject').
attr('width', 690).attr('height', 500)
.append('xhtml:body').style('font', '14px "Helvetica Neue"')
.html('<h1>An HTML Foreign Object in SVG</h1>');
有了这个,我最终得到了以下结构:
div
> svg
> defs
> g
> rect
> g
> g
> g
> foreignobject & its children inserted here
> g
...我明白为什么。我尝试了 D3 的insert
方法,使用函数作为指定的第二个参数before
,但浏览器一直告诉我:
尝试在不存在的上下文中引用节点。