2016-09-21 106 views
0

我有一個svg組,我稱之爲拖動功能。d3.select(this)返回什麼?

var container=d3.select("#id"); 
container.call(dragcontainer); 
var dragcontainer = d3.drag() 
         .on("start", function() {}) 
         .on("drag", function (d, i) { 
          //(d3.select(this)).select("rect"); 
         }) 
         .on("end", function() {}); 

顯然,d3.select(this)不返回container,但它們是相似的(通過檢查屬性),只是不完全一樣。

爲什麼會發生這種情況?如何在被調用函數中訪問container

+2

您可以簡單地訪問封閉中的「容器」。 –

+0

我在這裏只是一個簡單的場景,在實際情況下,有多個容器調用相同的拖動函數,並且每個容器都必須傳遞給另一個函數。 – SachiDangalla

+1

好吧,'d3.select(this)'應該選擇容器元素(儘管對象本身可能不完全相同)。 –

回答

3

有些重複的評論,但原因是,d3.select返回一個D3選擇。即使您選擇了相同的DOM節點,每個選擇都是不同的對象。以下顯示的差異:

var container = d3.select("body").node(); 

var sel1 = d3.select(container); 
var sel2 = d3.select(container); 

console.log(sel1 === sel2);    // false 
console.log(sel1.node() === sel2.node()); // true