ノードの束を持つD3.js折りたたみ可能なツリーがあります。ツリーには、子が 1 つしかない一連のノードがあるパスがいくつかあります。このツリーを想像してください:
5
/
1 - 2 - 3 - 4 -6
\
7
ノードをクリックする1
と、次のようになります。
5
/
1 - 4 -6
\
7
現在、私のコードはノードを正常に展開および折りたたみます。これらの中間ノードを選択して、現在行っているようにトグル機能でそれらをターゲットにするにはどうすればよいですか?
私のコードは基本的に例と同じですが、この質問に関係のないものをいくつか追加しました。このtoggle()
関数は a へのポインターを受け取り、node
(配列内の) 可視の子ノードを非可視children
にします (それらを_children
配列に移動することによって)。これにより、すべての子 (および孫、ひ孫など) がその特定のノードにヒットしますが、子が 1 つだけあるノードが見つかるまで続行する必要があり、子を持たないノードが見つかった場合は、見えるようにしたい。ノードに複数の子がある場合、その時点からすべての子を表示したいと思います。
これはtoggle()
、ノードの 1 つで onclick と呼ばれる関数コードです。
function toggle(d) {
var myLength;
if(d.children){myLength = d.children.length;}
else{myLength=0;}
if (myLength === 1) {
//next will be the first node we find with more than one child
var next = d.children[0];
for (;;) {if(next.hasOwnProperty('children')){
if (next.children.length === 1) {
next = next.children[0];
} else if (next.children.length > 1) {
break;
}
} else {
// you'll have to handle nodes with no children
break;
}
}
d._children = d.children;
d.children = [next];
}else{
if (d.children) {
d._children = d.children;
d.children = null;
} else {
d.children = d._children;
d._children = null;
}
}
}