2013-10-15 115 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