何时在d3中使用selection.data(...)。something()与selection.merge()。something()?

时间:2017-06-16 20:06:47

标签: javascript d3.js

new data is joined选择时,我对d3中UPDATE和MERGE之间的区别感到困惑。

ENTER很容易;它适用于新元素。

退出很容易;它适用于旧数据中的元素。

我如何知道何时使用UPDATE与MERGE?

var thingies = d3.selectAll('.mythingy')
thingies.data(newData).call(handle_update)  // UPDATE
  .enter().call(handle_enter)               // ENTER
  .merge().call(handle_merge)               // MERGE
  .exit().call(handle_exit)                 // EXIT

1 个答案:

答案 0 :(得分:2)

TLDR:更新在概念上指的是一组元素; .merge()是一种可用于组合输入和更新选择的方法。

更新是一个概念,指的是数据更改之前在DOM中的DOM元素,并在数据更改后保留在那里(即链接中维恩图的中间部分)。但是,没有.update()方法 - 您可以使用.selectAll()进行更新选择。

这可能导致一些冗余,您将相同的属性/样式应用于刚刚输入的元素(.enter()选择)并且已经存在。 D3v4中引入的.merge()方法提供了一个解决方案,您可以选择输入和更新元素。

仍然可以在不使用.merge()的情况下执行更新过程,并且在某些情况下,为输入和更新选择编写单独的语句可能仍然有意义。