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

时间:2018-07-11 06:45:50

标签: javascript typescript d3.js

我有一棵d3树。每个节点都有一个EntityType。如果特定节点的EntityType等于“电池”,则我将其位置设置为比其父节点更远。问题在于,实体类型为“电池”的节点也有子节点,但其位置不会根据该节点的位置进行修改。

这是我修改的代码。

.attr("transform", (d) => {
  if(d.data.EntityType === 'Battery') {
     return "translate(" + (d.y +100 ) + "," + (d.x) + ")";
  }

我使用此行来修改此节点的位置。但是,如何修改其子级的位置?

编辑:

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

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

1 个答案:

答案 0 :(得分:0)

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

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