javascript - 努力应对 D3 一般更新模式和组

标签 javascript d3.js

我想使用 D3、SVG 组和文本元素动态更新图例。这是我的函数,在更新图例时会被调用。

目标是如果文本元素尚不存在,它将添加它们。如果它们确实存在,它将根据新数据更新这些文本元素的内容。

function updateCountryLegend(data) { 
  var countries = rightPanel.selectAll('g.country').data(data);    
  var cEnter = countries.enter()
                      .append('g')
                      .attr('class', 'country');    
  var countryText = cEnter.append('text')
         .attr('x', 0)
         .attr('y', 10);
  countryText.text(function(d) { return d.name; }); 
}

当前代码添加元素正常,但未更新它们。我认为这是因为文本仅在输入选择上设置。但无论我如何尝试,我都无法弄清楚如何在更新选择上设置文本。

我想继续使用 SVG 组元素,以便我可以添加矩形来指示图例颜色等。

JSFiddle 包含完整代码:http://jsfiddle.net/1qhnbqbw/1/

最佳答案

您的情况的困难在于更新选择包含 g 元素,但您想要更改 text 元素。为此,请在更新选择上调用另一个 .select() - countries.select("text")。这个新选择将包含 text 元素,您现在可以以通常的方式更新这些元素,同时将新数据从 g 继承到 text 元素。

完整演示 here 。我已将 HTML 的 g 替换为 div,删除了一些不必要的变量,并处理了退出选择。

关于javascript - 努力应对 D3 一般更新模式和组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28561251/

相关文章:

javascript - 如何从值函数中访问数据的父数组?

javascript - 按高度百分比填充最后一个在象形图中绘制的 svg 图形(d3.js)

javascript - 同一页面上的多个脚本版本 (d3.js)

javascript - D3 v4 - 饼图,饼图外有连接器和点。

javascript - 我正在尝试退回尚未完成的任务

javascript - react Hook 形式 : Making append() Asynchronous

javascript - javascript中的内存问题

javascript - 实时显示所有当前访客光标

javascript - 如何通过 JavaScript 获取类名

javascript - 使用 d3 获取事件监听器中输入元素的值