【问题标题】:D3.js collapsible tree - expand/collapse nodesD3.js 可折叠树 - 展开/折叠节点
【发布时间】:2015-11-27 15:15:53
【问题描述】:

我有一个 D3.js 可折叠树,它有一堆节点,如下图所示

现在我想在节点展开时折叠所有其他节点。例如在图中如果analytics node 被展开,那么它应该折叠data node。我指的是D3.js collapsible tree - expand/collapse intermediate nodes,但它没有多大帮助。

【问题讨论】:

  • 展开节点的结构是什么,折叠节点的结构是什么?

标签: javascript jquery d3.js


【解决方案1】:

把点击功能改成这个

function click(d) {
    for (var i = 0; i < d.parent.children.length; i++) {
        if (d.parent.children[i].name !== d.name) {

            console.log(d.parent.children[i])

            if (d.parent.children[i].children) {
                d.parent.children[i].children = d._children;
                d.parent.children[i].children = null;
            }           
        }
    };

    if (d.children) {
        d._children = d.children;
        d.children = null;
    } else {
        d.children = d._children;
        d._children = null;
    };

    update(d);
}

希望对你有帮助

【讨论】:

  • 它对我没有帮助。它只是折叠展开的节点,但是在单击同一个节点后没有给出任何东西,即它正在取消定义。
  • 感谢您的帮助@Przemek
【解决方案2】:

在 Przemek 提示的帮助下,我得到了解决方案。现在它工作得很好。 :)

function click(d) {
var index;
for(var i=0;i<d.parent.children.length;i++){//length of current label
    if(d.parent.children[i].name===d.name)
        index = i;
};

for(var i=0;i<d.parent.children.length;i++){
    if(typeof d.parent.children[i].children!=="undefined" && i!=index){//if child is expnd then make null
        d.parent.children[i]._children=d.parent.children[i].children;
        d.parent.children[i].children= null;
    }
}
if (d.children) {
    d._children = d.children;
    d.children = null;
} else {
    d.children = d._children;
    d._children = null;
}
update(d);
}

【讨论】:

    猜你喜欢
    • 2013-07-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多