2016-05-04 153 views
3

我現在正在使用D3.js樹佈局創建組織結構圖。組織結構圖將通過登錄用戶打開,並且要求顯示默認情況下向用戶節點打開的組織結構圖。D3.js:展開樹直到節點n

例如,如果登錄的用戶是「N」,以及組織結構圖是:

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

用戶將看到:

a - d - l - n 

所以,問題陳述是擴大組織結構圖直到節點id /名稱爲登錄用戶的特定節點。

任何幫助,歡迎。

+0

你聽說過DFS或BFS? http://stackoverflow.com/questions/3332947/when-is-it-practical-to-use-dfs-vs-bfs – 0x90

回答

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)}); 
    } 
    } 

現在打電話跟你想的節點查找功能看

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

工作代碼here