2017-10-20 194 views
3

我在javascript /瓶初學者,我試圖用這個實驗D3樹狀圖例如:https://bl.ocks.org/mbostock/4063570獲得給定節點的父節點D3樹狀圖

什麼我試圖得到的是,當一個節點被單擊,將父節點返回到應用服務器。

例如:如果我display節點上單擊,然後服務器獲取「flare,display

如果點擊cluster節點,則服務器獲取「flare,analytics,cluster

+2

如果我正確地理解了這個問題,對於本例和其他人使用相同的方法創建的,datum屬性'id'保存父節點名,'display'具有'flare.display'的id。所以你只需要用逗號替換句點,並使用點擊事件來獲取相關的ID並觸發你需要的任何內容:https://bl.ocks.org/Andrew-Reid/raw/4358ca9989902fae71cf91b38dc4de56/ –

回答

2

我t很容易得到被點擊的節點的父母。只要使用ancestors(),其中:

返回祖先節點的數組,從與該節點,則隨後每個父到根。

所以,你的情況......

node.on("click", function(d){ 
    console.log(d.ancestors()) 
}); 

..將顯示在控制檯中的所有祖先,作爲數組。

這裏是分叉bl.ocks:https://bl.ocks.org/anonymous/e36d4af364642a70818987941aa192c8/c75e620e662a6899d8df34c287fc5ea00d049513

在該代碼中,我映射陣列來獲得每個節點的id財產。

+0

嗨,謝謝你響應.. noob問題..但如何/我在哪裏指定服務器可以捕獲此請求的網址? – Fraz

+0

那麼,你在這裏有兩個截然不同的問題(這是在SO關閉的原因)。所以,現在你已經爲第一個問題找到了答案,用相應的標籤發佈其他問題。 –

+0

感謝您的建議,我在這裏發佈了問題:https://stackoverflow.com/questions/46847130/how-to-send-the-click-data-from-d3-to-flask-server – Fraz

1

您可以通過點擊數據遞歸:

var node = g.selectAll(".node") 
     .data(root.descendants()) 
    .enter().append("g") 
     .attr("class", function(d) { return "node" + (d.children ? " node--internal" : " node--leaf"); }) 
     .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; }) 
     //attach a click listener to the group 
     .on("click", function(d){ 
     var children = []; 
     //recursively call parent 
     var recurse = function(c){ 
      //recurse unless no parent is found 
      if (c.parent){ 
      children.push(c.parent.id); 
      recurse(c.parent) 
      } 
     } 
     recurse(d)//call recurse on clicked node 
     console.log(children) 
     //send children to server via AJAX 
     }) 

工作示例here