D3.js D3中的选择:如何使用parentNode.appendChild?

D3.js D3中的选择:如何使用parentNode.appendChild?,d3.js,D3.js,我想使用以下方法处理D3.js中重叠的SVG元素 但是,由于代码的性质,我希望使用D3选择器而不是this将元素重新添加到DOM中。我的问题是:如何使用D3选择器获取相关节点 原始示例就是这样做的: this.parentNode.appendChild(this); 这是我的尝试,失败的原因是“UncaughtTypeError:无法调用undefined的方法'appendChild”: 此JSFIDLE(改编自)演示了以下问题: 我的D3选择与原始示例中的此有何不同?我尝试使用thisN

我想使用以下方法处理D3.js中重叠的SVG元素

但是,由于代码的性质,我希望使用D3选择器而不是
this
将元素重新添加到DOM中。我的问题是:如何使用D3选择器获取相关节点

原始示例就是这样做的:

this.parentNode.appendChild(this);
这是我的尝试,失败的原因是“UncaughtTypeError:无法调用undefined的方法'appendChild”:

此JSFIDLE(改编自)演示了以下问题:

我的D3选择与原始示例中的
有何不同?我尝试使用
thisNode.node().parentNode.appendChild(thisNode)
,但也失败了

用于DOM元素,而不是

从d3选择访问DOM元素有点棘手,通常有更好的方法来实现您想要做的事情。无论如何,如果您选择了单个元素,它将是d3选择的第一个项目中的第一个也是唯一一个项目-即,您需要像这样访问它:

var someIdDOMelement = d3.select("#someid")[0][0];
使用以下内容编辑的原始文件示例:

如果您有id,并且特别想要获取DOM元素,我只想使用:

我们可以看到,在绑定的函数中,
this
变量是触发事件的DOM元素。因此,在d3中处理事件处理时,您可以使用
this
从绑定函数中获取DOM元素

但是,看看您的代码,我认为更容易坚持使用原始实现,使用原始javascript方法重新附加节点,然后使用
d3创建d3选择。在绑定到
this
的dom元素上选择
。原始代码就是这样做的:

this.parentNode.appendChild(this);

如果您对此有任何困难,请发表评论,以便我可以解决这些问题。

您也可以在D3中使用selection.node()

使用
d3.select(“#someid”)[0][0]
非常有效,谢谢!作为d3.select(“#someid”).node()
如果我记得使用它作为参数,那么它就会有。谢谢你的解释。
var someIdDOMElement = document.getElementById("someid")  
var thisNode = d3.select("#" + id);
thisNode.node().parentNode.appendChild(thisNode.node());