Javascript c:nextNode.c }; 变量差异={ x:nextNode.x-currentNode.x, y:nextNode.y-currentNode.y }; var保证金={ 当前:{ x:0,, y:0 }, 下一步:{ x:0,, y:0 } }; if(diff.x>0&&diff.y==0){ 利润率.current.x=30; }else if(diff.x0){ 利润率.current.x=20; }否则如果(差值x0&&diff.x==0){ 保证金。当前。y=30; }else if(diff.y0){ 利润率。当前。y=20; }否则如果(差异y

Javascript c:nextNode.c }; 变量差异={ x:nextNode.x-currentNode.x, y:nextNode.y-currentNode.y }; var保证金={ 当前:{ x:0,, y:0 }, 下一步:{ x:0,, y:0 } }; if(diff.x>0&&diff.y==0){ 利润率.current.x=30; }else if(diff.x0){ 利润率.current.x=20; }否则如果(差值x0&&diff.x==0){ 保证金。当前。y=30; }else if(diff.y0){ 利润率。当前。y=20; }否则如果(差异y,javascript,d3.js,svg,transition,Javascript,D3.js,Svg,Transition,当您在else条件下执行此操作时 paths = graph.selectAll('path') 。。。您也在选择标记,这不是您想要的 解决方案:给你的路径一个类 .attr("class", "nodes") 。。。然后按该类选择: paths = graph.selectAll('.nodes') 或者,创建一个适当的“更新”选项(查看下面的Post Scriptum) 这里是一个更新的小提琴: PS:我做了一个缓慢的转换,只是为了让你看到标记正在移动。然而,代码中仍然存在很多问题(请

当您在
else
条件下执行此操作时

paths = graph.selectAll('path')
。。。您也在选择标记,这不是您想要的

解决方案:给你的路径一个类

.attr("class", "nodes")
。。。然后按该类选择:

paths = graph.selectAll('.nodes')
或者,创建一个适当的“更新”选项(查看下面的Post Scriptum)

这里是一个更新的小提琴:


PS:我做了一个缓慢的转换,只是为了让你看到标记正在移动。然而,代码中仍然存在很多问题(请查看console中的错误),与当前问题无关,这可能值得一提新问题。这些错误与
开关
如果
的奇怪组合有关,我建议您将其删除。您不需要这样做:只需创建一个基本的“输入”、“更新”和“退出”选择,这是D3惯用的方法

我知道代码并不理想,但我之所以使用
开关
,是因为代码取自一个leaver.js演示文稿,其中幻灯片中的每个“片段步骤”都将推进图形的状态。另外,我不太明白
.selectAll('path')
如何选择一个未命名为
path
的元素。你能解释一下吗?最后,转换现在将路径缩减为零。这在添加类名之前没有发生。你能解释一下为什么吗?但箭头是一条路径。请在代码中查看一下:
arrow.append('path').attr('d','M0,0 V4 L2,2 Z').attr('fill','#aaa')选择所有(“路径”)
选择所选内容中的所有
path
元素。关于转换,正如我在PS中告诉您的,这是因为您在交换机中使用的计数器存在一些问题。
paths = graph.selectAll('.nodes')