我想从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。
答案 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