2016-05-04 3 views
3

Я сейчас создаю диаграмму Org, используя макет дерева D3.js. Организационная диаграмма будет открыта зарегистрированным пользователем, и требование заключается в том, чтобы показать диаграмму org, открытую для узла пользователя по умолчанию.D3.js: Развернуть дерево до узла n

Например, если зарегистрированный пользователь является «п», а орг диаграмма:

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

пользователь увидит:

a - d - l - n 

Таким образом, постановка задачи заключается в расширении диаграмма Org до определенного узла, где идентификатор/имя узла является зарегистрированным пользователем.

Любая помощь приветствуется.

+0

Слышали ли вы о ДФСЕ или 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

Смежные вопросы