Graph 有选择地删除D3力定向图中的节点标签

Graph 有选择地删除D3力定向图中的节点标签,graph,d3.js,force-layout,Graph,D3.js,Force Layout,总体环境:我有一个维基空间中页面间交叉引用的数据库,并且希望链接的可视化程度不断提高 我有一个工作代码,可以在鼠标悬停时显示标签簇。但是,当您移开时,我希望保留某些关键点标签(例如簇的中心),而不是隐藏所有标签 我提出了一个现有的例子,并使其大致可行 信息在 在该页面或该空间中任何其他页面的底部附近,在以“反向链接:”开头的块中,最后您将找到“单击此处查看WikiGraphBrowser”,它将启动一个带有该界面的窗口 等效静态子集示例可见于: 该示例的代码位于 用于删除所有标签的代码

总体环境:我有一个维基空间中页面间交叉引用的数据库,并且希望链接的可视化程度不断提高

我有一个工作代码,可以在鼠标悬停时显示标签簇。但是,当您移开时,我希望保留某些关键点标签(例如簇的中心),而不是隐藏所有标签

我提出了一个现有的例子,并使其大致可行

  • 信息在
  • 在该页面或该空间中任何其他页面的底部附近,在以“反向链接:”开头的块中,最后您将找到“单击此处查看WikiGraphBrowser”,它将启动一个带有该界面的窗口
  • 等效静态子集示例可见于:

  • 该示例的代码位于
用于删除所有标签的代码:

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++;
}
代码试图留下一些标签,但这些标签不起作用:

我知道我只是没有摸索的d3模型在所有。。。。
thx

问题归结为您在中使用
来搜索数组中的名称。关键字中的Javascript
搜索对象键而不是对象值。对于数组,键是索引值。因此,测试
(单击的名称中的d.name)
将始终返回false

试一试

i=j=0;
如果(!bo){//bo=False-从mouseout
//labels.select('text.label').remove();
标签.过滤器(功能(o){
返回(单击名称索引(o.name)<0);
})
.text(函数(o){return”“;});
j++;
}
如果数组中没有一个元素与参数相等(按三重等于标准),则该方法返回-1。或者,如果您试图支持IE8(我假设不支持,因为您使用的是SVG),则可以使用测试


顺便说一下,删除标签和将其文本内容设置为空字符串是有区别的。使用哪一个取决于您是否希望稍后再次显示文本。不管是哪种方式,都要确保不会出现大量的空标签堵塞浏览器。

您是否尝试过修改工作解决方案中的过滤功能?额外注意:可能会重新绘制多次未褪色的标签,使其看起来相当混乱。检查现有非空标签并避免绘制的最佳方法?在您的筛选器函数中,
将引用
元素本身,因此您可以检查它是否具有非空的
textContent
属性,因此不需要包含在筛选器中:
函数(o){return((this.textContent)&&(单击了_names.indexOf(o.name)<0));})
。按该顺序指定两个过滤器还可以确保只检查当前包含文本内容的标签的单击名称数组,这样也会更快。
labels.forEach(function(o) {
    if (!(d.name in clicked_names)) {
        d.text.label.remove();
    }
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++;

    }