我在javascript /瓶初學者,我試圖用這個實驗D3樹狀圖例如:https://bl.ocks.org/mbostock/4063570獲得給定節點的父節點D3樹狀圖
什麼我試圖得到的是,當一個節點被單擊,將父節點返回到應用服務器。
例如:如果我display
節點上單擊,然後服務器獲取「flare,display
」
如果點擊cluster
節點,則服務器獲取「flare,analytics,cluster
」
我在javascript /瓶初學者,我試圖用這個實驗D3樹狀圖例如:https://bl.ocks.org/mbostock/4063570獲得給定節點的父節點D3樹狀圖
什麼我試圖得到的是,當一個節點被單擊,將父節點返回到應用服務器。
例如:如果我display
節點上單擊,然後服務器獲取「flare,display
」
如果點擊cluster
節點,則服務器獲取「flare,analytics,cluster
」
我t很容易得到被點擊的節點的父母。只要使用ancestors()
,其中:
返回祖先節點的數組,從與該節點,則隨後每個父到根。
所以,你的情況......
node.on("click", function(d){
console.log(d.ancestors())
});
..將顯示在控制檯中的所有祖先,作爲數組。
這裏是分叉bl.ocks:https://bl.ocks.org/anonymous/e36d4af364642a70818987941aa192c8/c75e620e662a6899d8df34c287fc5ea00d049513
在該代碼中,我映射陣列來獲得每個節點的id
財產。
您可以通過點擊數據遞歸:
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
如果我正確地理解了這個問題,對於本例和其他人使用相同的方法創建的,datum屬性'id'保存父節點名,'display'具有'flare.display'的id。所以你只需要用逗號替換句點,並使用點擊事件來獲取相關的ID並觸發你需要的任何內容:https://bl.ocks.org/Andrew-Reid/raw/4358ca9989902fae71cf91b38dc4de56/ –