2016-06-24 9 views
0

リンクを介して接続されているすべてのノードを取得する方法はすでに誰も知っていますか?ここで リンクを介して接続されているすべてのノードを取得します。

が一つだけのレベルで動作します私の現在のコードです:

function checkIfLinkIsInPipeline(){ 
for(var i in connectedLinks){ 
    if(connectedLinks[i]['type'] == "indirect") { 
    console.log("a " + JSON.stringify(connectedLinks[i])); 
    digNeighbor(connectedLinks[i]['s'], connectedLinks[i]['t']);   
    } 
} 
} 

    function digNeighbor(s, t) { 
    for(var j in connectedLinks) { 
     if(connectedLinks[j]['type'] == "direct"){ 
     console.log("b " + JSON.stringify(connectedLinks[j])); 
     } 

if(connectedLinks[j]['type'] == "direct" && 
    (connectedLinks[j]['s'] == s || 
    connectedLinks[j]['s'] == t || 
    connectedLinks[j]['t'] == s || 
    connectedLinks[j]['t'] == t)) { 
    connectedLinks.push({type: "direct", s: s, t: t}); 
    console.log("changed to direct " + JSON.stringify({type: "direct", s: s, t: t})); 
    } 
} 
} 
+0

私の直感では、その関数を名前付き関数にしてから、リンクを再帰的に実行する必要があると言います。あなたはjsfiddleを供給することができますか? – derp

+0

こんにちは@derp。私は使用している機能のスニペットを追加し、さらにjsfiddleを追加しました。ありがとう –

答えて

1

オーケーリンクを反復処理する

var connectedLinks = []; 
.on('mouseover', function(d) { 
    link.style('stroke-width', function(l) { 
     if (d === l.source || d === l.target) { 
      connectedLinks.push({type: 'direct', s: l.source.index, t: l.target.index}); 
     return 5; 
     } else { 
     connectedLinks.push({type: 'indirect', s: l.source.index, t: l.target.index}); 
     return 4; 
     } 
    }); 

マイjsfiddle Nodes Highlighting

My機能、私は非効率的なサンプルを得ましたこのjsfiddleで働くこと。それをあなたのフィドルに適用できるはずです。

重要なコード

はここにある:

.on('mouseover', function fillBlue(datum, index) { 
    console.log('firing for ', this); 
    d3.select(this).style("fill", "aliceblue"); 
    links.forEach(function(link) { 
     if (link.source.index === index) { 
     svg.selectAll('.node').each(function(d, i) { 
      if (i === link.target.index) { 
      fillBlue.call(this, d, i); 
      } 
     }) 
     } 
    }) 
    }) 

は、ステップバイステップを経ることができます。

  1. 現在のノードの塗りつぶしスタイルを適用します。
  2. 次に、現在のノードから始まるリンクを見つけます。
  3. これらのリンクから終わるすべてのノードを見つけます。
  4. これらのノードに対してこの関数を呼び出します。
+0

ありがとう。それは働く –