整体背景:我在维基空间的页面之间有一个交叉引用的数据库,并希望逐步增加链接的可视化。
我有工作代码,可以在鼠标悬停时显示标签簇。但是当你离开时,我想保留某些关键标签(例如集群的中心),而不是隐藏所有标签。
我分叉了一个现有的例子并且大致正常工作。
用于删除所有标签的代码:
i = j = 0;
if (!bo) { //bo=False - from mouseout
//labels.select('text.label').remove();
labels.filter(function(o) {
return !(o.name in clicked_names);
})
.text(function(o) { return ""; });
j++;
}
代码试图留下一些标签,不工作:
labels.forEach(function(o) {
if (!(d.name in clicked_names)) {
d.text.label.remove();
}
我知道我根本就没有去玩d3模型...... THX
答案 0 :(得分:0)
问题归结为您使用in
来搜索数组中的名称。 Javascript in
关键字搜索对象键而非对象值。对于数组,键是索引值。因此,测试(d.name in clicked_names)
将始终返回false。
尝试
i = j = 0;
if (!bo) { //bo=False - from mouseout
//labels.select('text.label').remove();
labels.filter(function(o) {
return (clicked_names.indexOf(o.name) < 0);
})
.text(function(o) { return ""; });
j++;
}
如果数组中没有元素与参数相等(通过三等于标准),则array .indexOf(object)
方法返回-1。或者,如果您尝试支持IE8(我假设没有,因为您使用的是SVG),您可以使用.some(function)
测试。
顺便说一句,删除标签并将其文本内容设置为空字符串之间存在差异。使用哪一个取决于您是否要稍后再次显示文本。无论哪种方式,只要确保你最终没有堵塞浏览器的大量空标签。