2016-05-25 6 views
0

私は4つのノードツリーを持っています.2番目のノードをクリックして、4番目のノードを直接開きたいとします。 平均私は子ノードの子を開きたいです。 私はそれを試しているが、それを得ることができない。ノードをクリックしたとき子ノードの子ノードを開く方法

+0

私は4つのノードa(ルートノード)、b、c、d(最後のノード)を持っています。 私の構造はa => b => c => dのようです。ここで私は "b"をクリックすると "c"と "d"の両方を開きたいと思っています。 "b"をクリックすると "c"と "d"が開きます。 b => c => d。 – user1872177

+0

あなたが試したことのコードスニペットまたはjsfiddleを含めてください –

+0

これは私のfiddle https://jsfiddle.net/5dsnucue/1/です。私が第2レベルノードをクリックすると、それは第4レベルノードを直接開く必要があります。 – user1872177

答えて

0

https://jsfiddle.net/5dsnucue/2/

//Toggle children on click. 
function click(d) { 
    // show is true if children currently hidden 
    var show = !d.children; 
    showKids (show, d); // set the visibility of this node's kids 

    // if on second level node and we want to show children of children 
    // (don't need to same for hide, hiding intermediate node will do the job) 
    if (d.depth === 1 && show) { 
     var arr = d.children || d._children; 
     // loop through kids and set them to visible 
     arr.forEach (function(child) { 
     showKids (true, child); 
     }) 
    } 
    update(d); 
} 

// showKids replaces simple toggle with a show parameter 
function showKids (show, d) { 
    if (!show) { 
     d._children = d.children; 
      d.children = null; 
     } else { 
      d.children = d._children; 
      // blank this line as calling showKids with show=true 
      // twice in a row will end up nulling .children and ._children 
      // so keep d._children populated. 
      // 
      // Same doesn't apply to the 'if' condition above as we don't 
      // pursue hiding down the tree. 
      //d._children = null; 
    } 
} 

これは、あなたが次の動作を行うことができます:

  1. クリックして第2レベルのノード上に、3番目と4番目のレベルのノードは、第2レベルのノードに再び
  2. クリックして表示され、第3回第4レベルのノードが隠されている
  3. 第2レベルのノードでもう一度クリックすると、第3レベルと第4レベルのノードが表示されます
  4. 第3レベルのノードに
  5. クリックは、4レベルのノードは第2レベルのノードに
  6. クリックを隠されている、第3レベルのノードは、第2レベルのノードに
  7. クリック再び隠され、3番目と4番目のレベルのノードは

に示します。上記のコードは必要以上に複雑に思えるかもしれませんが、簡単なトグルでステップ6はステップ4の状態、つまり3番目のレベルのみに戻ります。コード内のロジックは、前の状態にかかわらず第2レベルのノードを拡張するときに常に4レベルのノードが表示されるようにします。

+0

ありがとうございました。この質問にスタックオーバーフローが発生しました。さらに質問を投稿することはできません。 – user1872177

+0

もう1つお願いします。1つを展開するときに他のすべてのノードを折りたたんでいますか? – user1872177

関連する問題