2015-09-28 30 views
4

我想把链接文本链接在树布局d3js但它不wlrking,创建了jsfiddle项目here。任何人都可以告诉我,linkText为什么不来。LinkText在树布局不工作d3js

var link = svg.selectAll(".link") 
       .data(links, function (d) { 
        return d.target.id; 
      }); 
link.enter().insert("path", "g") 
.attr("class", "link") 
.attr("d", function (d) { 
    var o = { 
     x : source.x0, 
     y : source.y0 
    }; 
    return diagonal({ 
     source : o, 
     target : o 
    }); 
}); 

link.transition().duration(duration) 
.style("stroke", function (d) { 
    return "#99FFCC"; 
}) 
.attr("d", diagonal); 
link.append("text") 
.attr("font-family", "Arial, Helvetica, sans-serif") 
.attr("fill", "Black") 
.style("font", "normal 12px Arial").attr("transform", function(d) { 
    return "translate(" + 
     (d.target.y - 50) + "," + 
     (d.target.x - 10) + ")"; 
}).attr("text-anchor", "middle").text(function (d) { 
alert(d.target.label); 
return d.target.label; 
}); 

回答

2

你错就错在这里:

link.enter().insert("path", "g") 
.attr("class", "link") 
... 
... 
link.append("text") 
.attr("font-family", "Arial, Helvetica, sans-serif") 
.attr("fill", "Black") 

这个代码将会把文本路径DOM,这是不正确内。 文本DOM不应该在路径DOM内。

正确的代码应该是这样的:

// Update the links… 
    var link = svg.selectAll("path.link") 
     .data(links); 
    //adding the text to the svg 
link.enter().insert("text") 
     .attr("font-family", "Arial, Helvetica, sans-serif") 
     .attr("fill", "Black") 
     .style("font", "normal 12px Arial") 
     .attr("transform", function (d) { 
       return "translate(" + (d.target.y - 30) + "," + (d.target.x - 10) + ")"; 
      }) 
     .attr("text-anchor", "middle") 
     .text(function (d) { 
     console.log(d.target.label); 
     return d.target.label; 
    }); 

全部工作代码here

+0

对于您的完整工作代码链接 - LinkText会好起来,但点击父节点,节点退出调用到子节点正在退出节点和nodeText,但linkText保持在那里。 LinkText也应该在点击父节点时退出。 – RCS

+0

你可以做类似全部选择的事情来删除所有链接_label..svg.selectAll(“。line-label”)。remove(); _ 这里更新代码:https://jsfiddle.net/cyril123/451ko25p/8/ – Cyril

+1

删除链接标签在树形布局的第一个标签中工作正常。即使点击第一个标签中的子节点,也会删除所有linkText。在第一个标签上也双击子节点,所有linkText从另一个节点的链接中删除。只有被点击的节点链接到它的孩子才有linkText。这里是jsfiddle项目,你可以看到 - https://jsfiddle.net/ram140488/s17bfwrh/2/ – RCS