无法从强制有向图中删除标签

时间:2013-06-10 03:52:09

标签: svg d3.js

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

我的标签代码如下:

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/

有人可以帮助我。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

此处的问题似乎是您使用data.links设置标签 - 因此您始终拥有SVG中所有链接的所有标签。您没有看到它们的唯一原因是,如果未展开其组,则xy属性设置为NaN,因此标签位于屏幕外。展开后,会设置xy值;收缩使他们无法更新,但data.links数组不会改变,因此不会删除任何内容。