D3.js:将树展开到节点n

时间:2016-05-04 10:59:20

标签: javascript d3.js

我现在正在使用D3.js树布局创建组织结构图。组织结构图将由登录用户打开,并且要求显示默认情况下为用户的节点打开的组织结构图。

例如,如果登录的用户是' n',组织结构图是:

        j   m
       /   /
  b - e - k
 /
a - d - l - n
 \
  c- f - h
      \ 
       i

用户将看到:

a - d - l - n

因此,问题陈述是将组织结构图扩展到节点id / name是登录用户的特定节点。

欢迎任何帮助。

1 个答案:

答案 0 :(得分:6)

首先在每个数据对象中设置父对象:

  function collapse(d) {
    if (d.children) {
      d._children = d.children;
      //set the parent object in all the children
      d._children.forEach(function(d1){d1.parent = d; collapse(d1);});
      d.children = null;
    }
  }

编写一个find函数,找到该节点并打开其所有父节点。

function find(d, name) {
    if (d.name == name){
      while(d.parent){
        d = d.parent;
        click(d);//if found open its parent
      }
      return;
    }

    //recursively call find function on its children
    if (d.children) {
      d.children.forEach(function(d){find(d, name)});
    } else if(d._children){
      d._children.forEach(function(d){find(d, name)});
    }
  }

现在使用您想要查看的节点调用find函数

  var name = "layout";//example open till you find the node layout
  find (root, name)

工作代码here