D3使用'select'和'selectAll'

时间:2015-02-14 12:54:05

标签: javascript d3.js

我无法围绕D3的选择陈述。

创建图表时,通常会执行以下操作:

svg.selectAll("rect")
  .data(my_graph_data)
  .enter()
  .append("rect")
  ..//etc.

我不明白的是selectAll。 此时,没有元素可供选择! 这些元素仅在以后根据数据附加。

或者我应该从右到左阅读这些D3语句? 在那种情况下,为什么我需要选择元素?

1 个答案:

答案 0 :(得分:5)

由于后续调用.data(),您需要选择(不存在)元素。此调用指示D3将参数中给出的数据与您选择的元素进行匹配。如果,在您的情况下,选择为空,D3将为所有这些选项创建占位符元素 - 输入选择。然后,您可以像使用此选项来添加新元素。

无论您在SVG中拥有什么,这个.selectAll(...).data(...)模式都是一致的。只要您处理所有三个(输入,更新,退出)选择,它将始终执行预期的操作。在初始选择中,可能没有元素,所有数据的元素或介于两者之间的某个位置。

从技术上讲,在最初添加新元素时, 没有使用此模式,它只是使代码更加一致。特别是,您可以在一个函数中使用此模式,该函数将使用新数据更新SVG,无论其状态如何(即最初以及获取和显示新数据和更改数据时的工作方式相同)。