2016-09-21 1 views
0

私はドラッグ機能を呼び出すsvgグループを持っています。d3.select(これ)は何を返しますか?

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

あなたは単にクロージャの 'container'にアクセスすることができます。 –

+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 
関連する問題