从d3 node-graph shuffles标签中删除链接

时间:2016-10-31 07:35:18

标签: javascript d3.js

我想从d3.js节点图中删除链接。更确切地说,我发现所有链接都具有与给定ID相同的源,并删除我graph.links中的匹配条目。这似乎有效,但它有点洗牌我所有的链接标签,标签是在之前的另一个链接。

我准备了一个JSFiddle:https://jsfiddle.net/FFoDWindow/0nf1hod8/

这是我的deleteLinks - 函数。

deleteLinks = function(parentNodeId){

        var linksToChildren = link.filter(function(d){
            return d.source.id ==parentNodeId;
        });

        var correspondingLinkPath = linkPath.filter(function(d){
            return d.source.id ==parentNodeId;
        });

        linksToChildren._groups[0].forEach(function(link){
            var data = d3.select(link).data()[0];
            var indexOfLink = graph.links.indexOf(data);
            graph.links.splice(indexOfLink, 1);
        });
        update();
    }   

您需要更多信息吗?感谢您的帮助,FFoDWindow。

1 个答案:

答案 0 :(得分:0)

由于您要重新分配数据,因此最好使用新数据的键函数来匹配已有数据的现有元素。由于您要删除一个元素,因此默认的索引顺序分配将不起作用。

D3文档:Joining Data

我添加了linkPaths的以下关键功能:

 linkPath = linkPathGroup
                .selectAll(".linkPath")
                .data(graph.links, function(d) {
         return d ? d.linkLabel : this.id;
        });

以下是linkLabels:

    linkLabel = linkLabelGroup
        .selectAll(".linkLabel")
        .data(graph.links,
function(d) {
 return d ? 'T' + d.linkLabel : this.id;
});

以下是更新后的JSFiddle