[英]How do I give certain edges a class?
我有一个力导向图,可以显示和隐藏节点。 我希望根据是否显示或隐藏边缘源和目标来对边缘进行此操作。
我在这里选择边缘,遍历所有选定的节点以查看它们是否与边缘源匹配,如果匹配,请再次遍历它们以查看其是否也与边缘的目标匹配,然后我要设置该边缘如果未同时显示源和目标,则将class设置为“ visible”,然后将class设置为“ hidden”。
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)...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.