2014-06-17 74 views
1

似乎無法將HTML鏈接的文字,在D3樹的節點......分配HTML鏈接樹節點文本

的完整代碼,請訪問:http://bl.ocks.org/Guerino1/raw/ed80661daf8e5fa89b85/

我用下面的代碼(在大約線162):

 nodeEnter.append("svg:a") 
      .attr("xlink:href", function(d) { return d.hlink; }) 
     .append("text") 
      .attr("x", function(d) { return d.children || d._children ? -10 : 10; }) 
      .attr("dy", "-10") 
      .attr("fill", "Blue") 
      .attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; }) 
      .text(function(d) { return d.name; }) 
      .style("fill-opacity", 1e-6); 

的代碼似乎好工作與部隊向圖,但我不能讓它與此樹。當我打開DOM樹時,我發現即使存在DOM元素「a」和「text」,HTML鏈接也沒有被分配。

回答

2

您正從數據中刪除href屬性。看看nodes當通過update功能,然後看看它在傳遞到.data功能。

這條線是罪魁禍首:var nodes = tree.nodes(root).reverse();

編輯:

更正:nodeByName功能是罪魁禍首。

這樣做:

function nodeByName(name) { 

    for (var i = 0; i < nodeSet.length; i++){ 
     if(nodeSet[i].name === name) return nodeSet[i]; 
    } 

    console.log("ERROR: This node name is not in the node set.") 

    return nodeSet[name] = {name: name}; 

    //return nodeSet[name] || (nodeSet[name] = {name: name}); 
} 
+0

我看到它。 API指出tree.nodes()方法遍歷樹併爲每個節點設置特定的屬性。它似乎不適當地「剝離」所有其他數據。後續問題現在變成了...... 1)爲什麼tree.nodes()方法會剝離節點集中的所有其他數據? 2)什麼是防止或修復它的最好方法?謝謝。 –

+0

看起來你實際上正在替換'節點'。傳遞給'nodes()'的'root'參數不包含'href'數據。 – david004

+0

更正,它是'nodeByName'函數。看到新的答案。這一切都工作。 – david004