【问题标题】:D3 Collapsable Tree - Collapse one level at a timeD3 可折叠树 - 一次折叠一层
【发布时间】:2019-03-02 16:30:44
【问题描述】:

我有 d3 可折叠树。我有控制树的扩展和折叠的外部按钮。我可以全部展开,全部折叠。而且,我可以一次扩展一个级别。我无法一次折叠一个级别。

对于没有事先了解 d3 的任何人。 如果节点展开,则 d.children 不为空 & d.children 为空,如果节点折叠 d.children 不为空且 d.children 为空

这是我扩展一级的逻辑:

private expandNodeOneLevel(d) {
    var children = (d.children) ? d.children : d._children;
    if (!d.children) {
       if (children) {
           d.children = d._children;
           d._children = null;
       }
       return;
     }
    if (children) {
       children.forEach((node) => this.expandNodeOneLevel(node));
     }
}



 public expandOneLevelNodes() {
    this.expandNodeOneLevel(this.root);
    this.update(this.root);
  }

这是我一次折叠一层的逻辑,这是错误的,因为它会折叠所有树节点。我很难打破递归。

private collpaseOneLevelNodes = (d) => {
    var children = (d.children) ? d.children : d._children;
    if (!children) {
      return;
    }
    children.forEach((node) => {
      this.collpaseOneLevelNodes(node);
    });
    if (d.children) {
        d._children = d.children;
        d.children = null;
    }
    return;
  }



 public collapseOneLevel() {
    this.collpaseOneLevelNodes(this.root);
    this.update(this.root);
  }

如果有人指出我的错误在哪里或任何其他更好的方法,我将不胜感激。

【问题讨论】:

    标签: javascript algorithm typescript d3.js tree


    【解决方案1】:

    想通了。没注意到 d3 提供了父信息。

     private collpaseOneLevelNodes = (d) => {
    var children = (d.children) ? d.children : d._children;
    if (!children || !d.children) {
      if (!d.parent._children) {
        d.parent._children = d.parent.children;
        d.parent.children = null;
      }
      return;
    }
    if (d.children) {
      children.forEach((node) => {
        this.collpaseOneLevelNodes(node);
      });
    }
    

    }

     public collapseOneLevel() {
        this.collpaseOneLevelNodes(this.root);
        this.update(this.root);
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多