Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该如何删除d3 force中的节点?_Javascript_Svg_D3.js_D3 Force Directed - Fatal编程技术网

Javascript 我应该如何删除d3 force中的节点?

Javascript 我应该如何删除d3 force中的节点?,javascript,svg,d3.js,d3-force-directed,Javascript,Svg,D3.js,D3 Force Directed,我想在单击此节点时删除节点,因此我只需在单击with nodes=nodes.filterv=>v.id!==d、 事实上,它第一次起作用,但下一次就不起作用了 这是我的密码: uuid=函数uuid{ 风险值模板='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxx'; 返回模板。替换/[xy]/g,c=>{ var r=Math.random*16 | 0; 如果c=='y'r=r&3 | 8; 返回r.toString16; }; } 常数宽度=800; 常数高度=40

我想在单击此节点时删除节点,因此我只需在单击with nodes=nodes.filterv=>v.id!==d、 事实上,它第一次起作用,但下一次就不起作用了

这是我的密码:

uuid=函数uuid{ 风险值模板='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxx'; 返回模板。替换/[xy]/g,c=>{ var r=Math.random*16 | 0; 如果c=='y'r=r&3 | 8; 返回r.toString16; }; } 常数宽度=800; 常数高度=400; 常数计数=10; 设nodes=Array.from{length:count}.map\i=>{x:width/count*i+20,y:height/2,id:uuid}; const svg=d3.selectsvg.attrviewBox,[0,0,宽度,高度]; 让节点=svg .选择All.node; 常数模拟=d3 .力模拟 .Nodes节点 .力中心,d3.力中心宽度/2,高度/2 停止 函数更新{ node=node.datanodes,d=>d.id .joing A.附加圆 attrr先生,12岁 .移动光标,移动 .attrfill,ccc .000美元 .笔划宽度,1.5px .attrtransform,函数d{return translate+d.x+,+d.y+;} .onclick,ev,d=>{ nodes=nodes.filterv=>v.id!==d.id; 使现代化 }; 模拟节点;
如果simulation.alpha我不知道问题出在哪里,但是看看您的代码生成的DOM。 有一个g元素的列表,每个g包含很多嵌套的圆。这很奇怪,也没有意义。 因此,我建议您重构代码,使其具有以下特性:

然后,在单击圆元素时,获取类名并删除该节点

您只想为新节点追加一个圆,对于任何其他节点,追加一个圆意味着下次单击时,实际上要删除两个圆,而不是一个

.join可以传递三个函数,您可以将它们应用于输入、更新和退出选择。执行这些函数后,将返回值合并,然后您可以对所有组合的选择执行操作

在本例中,我将所有一次性循环逻辑移到了enter部分,小心不要返回循环,而是返回您首先附加的g元素。如果返回循环,它会将这些元素与现有的`g元素组合,逻辑将中断

uuid=函数uuid{ 风险值模板='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxx'; 返回模板。替换/[xy]/g,c=>{ var r=Math.random*16 | 0; 如果c=='y'r=r&3 | 8; 返回r.toString16; }; } 常数宽度=800; 常数高度=400; 常数计数=10; 设nodes=Array.from{length:count}.map\i=>{x:width/count*i+20,y:height/2,id:uuid}; const svg=d3.selectsvg.attrviewBox,[0,0,宽度,高度]; 让节点=svg .选择All.node; 常数模拟=d3 .力模拟 .Nodes节点 .力中心,d3.力中心宽度/2,高度/2 停止 函数更新{ console.lognodes.length; node=node.datanodes,d=>d.id 参加 输入=>{ 常数g=enter .附录 .attr类,节点; G A.附加圆 attrr先生,12岁 .移动光标,移动 .attrfill,ccc .000美元 .笔划宽度,1.5px; 返回g; }, 更新=>更新, exit=>exit.remove .attrtransform,函数d{return translate+d.x+,+d.y+;} .onclick,ev,d=>{ nodes=nodes.filterv=>v.id!==d.id; 使现代化 }; 模拟节点;
例如,如果simulation.alpha,当您想要向节点添加标签时,这可能会很有帮助。请记住,有经验的用户通常会将他们的问题简化为a,使他们做出的一些决定不太清楚。对于d3新手或明确遵循示例的人,您的陈述通常是正确的,但请注意不要问pe人们可能会故意改变他们选择的结构。哇,太好了。非常感谢你。但我有一个问题,为什么每次我单击时节点都会移动?我能避免吗?这是因为你应用了力模拟。你用它将所有东西拖到中心。如果你移除了它,节点会保持原位