javascript - enter() 选择上的 extra select() 究竟做了什么?

标签 javascript select d3.js selectall

enter() 选择上的额外 select() 究竟做了什么,为什么它没有 selectAll()?

现在我可能应该张贴更多的文字来“满足您的质量标准”,但我很确定这个问题足够精确并且希望不会太愚蠢。我花了几天时间阅读了各种 d3 教程和文档,这部分我还是没看懂。

最佳答案

调用 selectenter selection 上很少见;使用 append 更为常见或 insert反而。然而,所有这三种方法的最终结果都是相同的:它指定如何实例化输入选择中的元素

当您执行 data-join 时, 返回三个新选择:

  • 更新选择:选择与数据对应的元素
  • 退出选择:任何剩余元素(无对应数据)
  • 输入选择:任何剩余数据(无对应元素)

由于输入选择是剩余数据,因此根据定义没有对应的元素。因此,输入选择最初包含占位符节点,您必须将其实例化为适当的元素。您几乎看不到这些节点,因为您会立即告诉 D3 如何创建缺失的元素,通常是通过调用追加或插入。这些方法创建新元素并将它们插入到 DOM 中。 (父节点由前面的 select 确定,如 nested selections 教程中所述。)

在极少数情况下,您可能想要执行超出标准追加或插入以实例化输入节点的操作。例如,标准的 append 方法总是创建同名元素(例如“div”或“rect”)。如果您想动态指定名称,您可以改用 select 并传入一个函数来创建新元素(如 this thread in the d3-js mailing list 中所讨论):

enterSelection.select(function(d) {
  return this.appendChild(document.createElement(d.name));
});

事实上,如果你看how append is implemented ,您会看到它只是 select 之上的包装器。一个稍微简化的实现是:

d3.selection.prototype.append = function(name) {
  return this.select(function() {
    return this.appendChild(document.createElement(name));
  });
};

这些示例实现得到了简化,因为它们不处理带命名空间的 SVG 元素。因此,使用内置方法更容易,这些示例仅用于解释 D3 的内部工作方式。

关于javascript - enter() 选择上的 extra select() 究竟做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12304357/

相关文章:

javascript - 如何执行与 ES5 和 ES6 兼容的导出?

javascript - React JS onClick 事件在标签内

javascript - 如何将光标移动到图表上的任何位置而不仅仅是系列数据点上?

javascript - greasemonkey javascript 执行命令

javascript - 使用 jQuery select2 设置多个值

javascript - AngularJs:无法以编程方式设置在选择中选择的选项

mysql - 从两个不同的表中选择两个字段作为一个(使用联接)(MYSQL)

javascript - 当根节点传递给它时,d3 TreeMap 布局是否被缓存?

javascript - 如何将 svg 组或异物正确定位到 d3 地球上?

json - 带有 JSON 嵌套数据的 D3 分组条形图