javascript - 如何从可视化中删除 D3 链接文本

标签 javascript d3.js svg

当单击力定向可视化中的节点时,任何子节点(及其关联的链接)都会打开/关闭。但是,当删除其关联的子节点和链接时,充当这些链接标签的文本不会被删除。见下文:

enter image description here

这是相关的代码部分,最后一行 (linkText.exit.remove()) 是我删除这些标签的尝试:

var nodes = flatten(data);
var links = d3.layout.tree().links(nodes);

var path = vis.selectAll('path.link')
  .data(links, function(d) {
    return d.target.id;
  });

path.enter().insert('svg:path')
  .attr({
    class: 'link',
    id: function(d) {
      return 'text-path-' + d.target.id;
    },
    'marker-end': 'url(#end)'
  })
  .style('stroke', '#ccc');

var linkText = vis.selectAll('g.link-text').data(links);

linkText.enter()
  .append('text')
    .append('textPath')
      .attr('xlink:href', function(d) {
        return '#text-path-' + d.target.id;
      })
      .style('text-anchor', 'middle')
      .attr('startOffset', '50%')
      .text(function(d) {return d.target.customer_id});

path.exit().remove();

linkText.exit().remove();

这也是一个 block 的链接:http://blockbuilder.org/MattDionis/5f966a5230079d9eb9f4

最佳答案

g class link-text 曾经创建 g 元素,因此退出选择为空。

替换

linkText.enter()
    .append('text')
        .append('textPath')
        .attr('xlink:href', function(d) {
            return '#text-path-' + d.target.id;
        });

linkText.enter()
    .append('g')
    .attr('class', 'link-text')
        .append('text')
            .append('textPath')
            .attr('xlink:href', function(d) {
                return '#text-path-' + d.target.id;
            });

另外,有必要为 linkText 指定标识符函数,就像您为 path 所做的那样,否则D3无法与退出选择匹配丢失的数据!

var linkText = vis.selectAll('g.link-text').data(
    links,
    function (d) { return d.target.id; }
);

关于javascript - 如何从可视化中删除 D3 链接文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34142410/

相关文章:

javascript - Jest 中 unmock 和 dontMock 的区别

javascript - 如何显示查询回调数据结果只以开头

javascript - 检查 D3 中潜在的 CSV 文件问题

canvas - Dart 从 Canvas 上的 SVG 文件中绘制 ID

css - 计算平移过程中旋转的 SVG 动画的 CSS 变换矩阵

javascript - 您好,非 ie 浏览器中的字幕延迟

javascript - 如何通过JQuery JSON数据获取Check Box(@Html.CheckBox)的值

javascript - 如何用一个值函数设置多个属性?

javascript - D3 插入 H3 标签 Google 表格

html - 如何设置笔画宽度 :1 on only certain sides of SVG shapes?