Javascript 在d3中选择动态DOM元素

Javascript 在d3中选择动态DOM元素,javascript,d3.js,Javascript,D3.js,我正在尝试绘制形状,并使用D3进行选择和交互。我正在学习D3,所以需要更清楚地理解一些逻辑。 我可以画形状,我需要在选择形状时拖动它们。当画布上绘制了多个对象时,我似乎无法选择特定的对象 这就是我到目前为止所处的位置,我请求您查看一下,(代码有点混乱,很抱歉,时间太晚了…:()如果您在画布上绘制多个对象(圆和/或矩形),然后尝试选择一个,您将注意到错误 我试过使用 d3.select(this) 而且 d3.select(this.firstChild) 但是我需要选择一个特定的圆或矩形。我

我正在尝试绘制形状,并使用D3进行选择和交互。我正在学习D3,所以需要更清楚地理解一些逻辑。 我可以画形状,我需要在选择形状时拖动它们。当画布上绘制了多个对象时,我似乎无法选择特定的对象

这就是我到目前为止所处的位置,我请求您查看一下,(代码有点混乱,很抱歉,时间太晚了…:()如果您在画布上绘制多个对象(圆和/或矩形),然后尝试选择一个,您将注意到错误

我试过使用

d3.select(this)
而且

d3.select(this.firstChild)

但是我需要选择一个特定的圆或矩形。我该怎么做?

更新您的
拖动
侦听器以仅处理选定的形状,即此侦听器绑定到的形状。 您所要做的就是通过D3将选择的
this
分配给一个变量,并使用该变量代替外部引用,如下所示:

功能拖动(d){
var shape=d3。选择(此);
如果(isrectMov==true){
shape.attr(“x”,d3.event.x)
.attr(“y”,d3.event.y)
.attr(“光标”、“移动”);
}else if(islineMov==true){
shape.attr(“x1”,d3.event.x)
.attr(“y1”,d3.event.y)
.attr(“x2”,d3.event.x)
.attr(“y2”,d3.event.y)
.attr(“光标”、“移动”);
}else if(iscircleMov==true){
shape.attr(“cx”,d3.event.x)
.attr(“cy”,d3.event.y)
.attr(“光标”、“移动”);
}else{}
}
但是,这只适用于类似的形状,代码还有一些问题需要解决。我建议您从头开始,尽量不使用全局变量,而是在需要时要求(或选择)任何形状(例如,在处理程序内部).这将减少复杂性,因为你不再需要试图在头脑和眼睛中跟踪每个变量的状态



如果我画了两个圆和一个矩形,当我用鼠标按下选择时,我如何知道要拖动哪个圆?对不起,我的错。现在更新