2013-10-15 117 views
6

D3中有一种方法可以连接选择吗?D3.js:连接选择?

用例:我想添加一个mouseover事件到这两个的更新和输入选择的特定选择。

我能做到这一点,如下所示:

var s = d3.selectAll('.yellow').data(myData); 
s.on('mouseover'... 
s.enter().append('path').attr('class','yellow').on('mouseover'... 

但我更喜欢用一行代码来做到这一点。

+1

在这种特殊情况下,你不需要连接 - 在被调用后,'enter'选择合并到'update'选择中,所以所有你需要做的就是在'update'选择之前处理'.enter()'。 –

+0

啊我明白了,谢谢。 – Richard

+0

我会添加一个答案作为参考。 –

回答

7

在这种特殊情况下,您不需要连接 - 输入选择在被调用后合并到更新选择中,因此您需要在更新选择前处理.enter()

一般而言,你不能真正地连接选择,但实际上这并不是真的必要。您可以修改选择条件以选择所需的所有元素,或者,如果这不可行,请使用.call()在所有选定的元素上运行功能。这种方式你不需要重复代码来设置属性等。

+4

如果在d3中有选择连接,它将非常有用。有时在选择和将代码移入一个函数时涉及复杂的逻辑,并且在两个单独的位置调用的可读性比类似(选择1 +选择2)的可读性要低.doYourThings().. – mehmet