Javascript 要在d3树结构层次结构中的特定节点之后变换所有节点的位置吗

Javascript 要在d3树结构层次结构中的特定节点之后变换所有节点的位置吗,javascript,typescript,d3.js,Javascript,Typescript,D3.js,我有一棵d3树。每个节点都有一个EntityType。如果某个特定节点的EntityType等于“Battery”,我会将其位置设置为比通常离其父节点稍微远一点。问题是EntityType为“Battery”的节点也有子节点,但它们的位置不会根据此节点的位置进行修改 这是我修改的代码 .attr("transform", (d) => { if(d.data.EntityType === 'Battery') { return "translate(" + (d.y +100

我有一棵d3树。每个节点都有一个EntityType。如果某个特定节点的EntityType等于“Battery”,我会将其位置设置为比通常离其父节点稍微远一点。问题是EntityType为“Battery”的节点也有子节点,但它们的位置不会根据此节点的位置进行修改

这是我修改的代码

.attr("transform", (d) => {
  if(d.data.EntityType === 'Battery') {
     return "translate(" + (d.y +100 ) + "," + (d.x) + ")";
  }
我使用这一行来修改这个节点的位置。但如何修改其子对象的位置

编辑:

我发现,如果我可以检查节点层次结构中的所有父节点,如果父层次结构中存在EntityType Battery节点,我可以相应地设置其位置


但现在我必须检查所选节点的完整父层次结构。这可能吗?

我找到了解决办法。通过设置节点的深度并使用d3.subjects()属性相应地设置其所有子节点的深度,我们可以实现这一点

还有一个d3.祖先()属性用于获取节点的所有祖先