我有一个力导向图,我可以在其中显示和隐藏节点。我希望根据边缘源和目标是显示还是隐藏来对边缘执行此操作。
这里我选择边,遍历所有选定的节点以查看它们是否与边源匹配,如果匹配,再次循环它们以查看它们是否也与边的目标匹配,然后我想如果它不显示源和目标,则将该边缘类设置为“可见”,然后将类设置为“隐藏”。
var selectedNodes = d3.selectAll(".selectedNode");
var linksVisible = d3.selectAll(".link.visible");
var countOfVisibleLinks = [];
linksVisible.each(function(o)
{
selectedNodes.each(function(i)
{
if(o.source.index === i.index)
{
//clog("yes1");
selectedNodes.each(function(j)
{
if(o.target.index === j.index)
{
countOfVisibleLinks++;
//visibleLinks.push(o);
var myLink = d3.selectAll(".link.visible")
.classed("hidden", function(d) {
return d === o ? false : true;
});
//.filter(function(d) { return d === o; })
//.attr('class', 'hidden');
}
})
}
})
});
“countOfVisibleLinks”有效,因为它正确地计算了可见边缘,但此后的函数不会将选定的边缘设置为“可见”,将未选定的边缘设置为“隐藏”
有什么想法吗?
最佳答案
我会尝试类似的东西
d3.selectAll(".link").attr("class", function(d) {
var c = "link";
if (d.source.visible && d.target.visible) { // or however you check the nodes?
c += " visible";
} else {
c += " hidden";
}
return c;
});
对于您的场景,您可以使用 if (selectedNodes.indexOf(d.source)...
关于javascript - 我如何给某些边缘上课?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27566369/