0

我尝试在我的力有向图中添加一些标签,但由于某种原因,当我尝试扩展/缩小我的节点集时,我不知道我不能“删除”它们。

我的标签代码如下:

var labels = labelg.selectAll('text .textlabel').data(data.links);
    labels.exit().remove();
    labels.enter().append('text')
        .attr('class','textlabel')
        .attr("x", function(d) {return d.size ? (d.source.group_data.x + d.target.group_data.x) / 2 : (d.source.x + d.target.x)/2 ;})
        .attr("y", function(d) { return (d.size ? (d.source.group_data.y + d.target.group_data.y) / 2 : (d.source.y + d.target.y))/2 ; })
        .attr("text-anchor", "middle")
        .text(function(d) {return d.reason;});

在我的“tick”功能中,我定位如下

force.on("tick", function() {
//... node & link stuff ...

  labels
      .attr("x", function(d) { return (d.size ? (d.source.group_data.x + d.target.group_data.x) / 2 : (d.source.x + d.target.x)/2) ; })
      .attr("y", function(d) { return (d.size ? (d.source.group_data.y + d.target.group_data.y) / 2 : (d.source.y + d.target.y))/2 ; });

});

现在,如果我单击一个节点,该组将展开并显示节点之间的标签。但是,如果我扩展第二组和/或收缩第一组,则不会删除标签。

为了更好地理解我的问题,我做了一个小提琴http://jsfiddle.net/NVmf5/

有人可以帮助我吗。

任何帮助,将不胜感激。

4

1 回答 1

1

看起来这里的问题是您正在设置标签data.links- 因此您始终拥有 SVG 中所有链接的所有标签。您看不到它们的唯一原因是,如果它们的组未展开,则xandy属性设置为NaN,因此标签不在屏幕上。展开后,设置xy值;收缩会阻止它们更新,但data.links数组不会改变,因此不会删除任何内容。

于 2013-06-10T21:56:30.690 回答