2016-09-21 2 views
0

У меня есть группа svg, на которую я вызываю функцию перетаскивания.Что делает d3.select (this) return?

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