Javascript 删除D3中可拖动的SVG元素会导致无法读取属性';业主协议';空的

Javascript 删除D3中可拖动的SVG元素会导致无法读取属性';业主协议';空的,javascript,d3.js,svg,Javascript,D3.js,Svg,我只是尝试在SVG元素上使用d3添加和删除元素(节点/圆)。但是,我的代码不断生成以下异常 Uncaught TypeError: Cannot read property 'ownerSVGElement' of null at d3_mousePoint (VM2163 d3.js:1127) at d3.mouse (VM2163 d3.js:1122) at moved (VM2163 d3.js:1177) at VM2163 d3.js:1084 d3

我只是尝试在SVG元素上使用d3添加和删除元素(节点/圆)。但是,我的代码不断生成以下异常

Uncaught TypeError: Cannot read property 'ownerSVGElement' of null at d3_mousePoint (VM2163 d3.js:1127) at d3.mouse (VM2163 d3.js:1122) at moved (VM2163 d3.js:1177) at VM2163 d3.js:1084 d3_mousePoint @ VM2163 d3.js:1127 d3.mouse @ VM2163 d3.js:1122 moved @ VM2163 d3.js:1177 (anonymous) @ VM2163 d3.js:1084 未捕获的TypeError:无法读取null的属性“ownerSVGElement” 在d3_鼠标点(VM2163 d3.js:1127) 在d3.mouse上(VM2163 d3.js:1122) 移动时(VM2163 d3.js:1177) 在VM2163 d3.js:1084 d3_mousePoint@VM2163 d3.js:1127 d3.mouse@VM2163 d3.js:1122 移动到@VM2163 d3.js:1177 (匿名)@VM2163 d3.js:1084 问题似乎在于向元素添加拖动行为,因为如果我删除
.call(someDragFunction)
,那么添加和删除元素不会产生异常(当然,我不能在SVG画布上拖动这些元素)

此处显示了一个示例?。如果单击“+节点”并单击SVG框,将绘制一个节点。如果单击“-node”并单击绘制的节点/圆,该节点将被删除。只有在尝试删除最后一个节点时,才会显示异常


你知道我做错了什么吗?顺便说一句,我使用的是D3V3.5.3。

找到了答案

我的控制台错误如下:

d3.v3.min.js:1 Uncaught TypeError: Cannot read property 'ownerSVGElement' of null
    at J (d3.v3.min.js:1)
    at ao.mouse (d3.v3.min.js:3)
    at a (d3.v3.min.js:3)
    at d3.v3.min.js:1
var container = d3.select("#charts")
        .append("g")
        .data([ {"x":node_pos_x, "y":node_pos_y} ])
        .attr("width", node_width)
        .attr("height", node_height)
        .attr("class", classname)
        .attr("id", "node_1")
        .attr("transform", "translate(" + node_pos_x + "," + node_pos_y + ")")
        .call(in_editor_drag);
我的svg元素

<svg id="charts" width="1356" height="579"></svg>
如果我运行下面的行来删除g#node_1,我会像您一样得到上面的控制台错误

d3.select('g#node_1').remove();
解决方案是

d3.select('g#node_1').on('mousedown.drag', null);
现在我可以删除g元素,而不会出现任何控制台错误

我从这里找到的


收到相同错误,并尝试删除.call方法,但没有错误。如果我找到一个解决方案,我会回答。这花了很长时间,但我测试过了,效果很好。在删除备份数据后,我再执行
d3.select('circle#nodeId')。on('mousedown.drag',null),然后重新绘制,错误消失。谢谢!