Подтвердить что ты не робот

D3.JS получить ссылку на связанные данные щелкнутого объекта

Я новичок в javascript и D3.js

Я работаю с примером графика, приведенным в Force, на https://gist.github.com/4062045

Мне нужно получить ссылку на связанные данные элемента clicked circle, чтобы я мог добавить ссылку на него.

У меня есть следующая строка кода в обработчике кликов круга:

d3.select(this).each(function(d){console.log(d)});

Я могу напечатать объект на консоли, но я не могу понять, как получить ссылку на этот объект, чтобы я мог нажать его в объект ссылки, например:

{source: <reference to node should go here>, target: some_other_node}

Цените свою помощь ребятам!

4b9b3361

Ответ 1

circles.on('click', datum => {
  console.log(datum); // the datum for the clicked circle
});

# на (typenames [, listener [, capture]])

Когда указанное событие отправляется на выбранный node, указанный слушатель будет оцениваться для каждого выбранного элемента, передавая текущую дату (d), текущий индекс (i) и текущую группу (узлы), с этим в качестве текущего элемента DOM.

Ответ 2

В интересах других новичков, вот как я решил это:

//Register the event handler with you selection
myselection.on("click", click);

//Obtain reference to data of currently clicked element by obtaining the first argument of      the event handler function

function click(element){ 
    console.log(element); 
}

Ответ 3

Вот мое решение:

/* CSS used in Javascript snippet */
.source { 
  stroke-width: 3px !important;
  stroke-opacity: 1;
  stroke: #0f0;
}

.target { 
  stroke-width: 3px !important;
  stroke-opacity: 1;
  stroke: #f00;
}


// this goes inside the d3.json call
node.on("mouseover", function() {
  idx = this.__data__.index
  for (i = 0; i < graph.links.length; i++) {
    if (graph.links[i].source.index == idx) {
      link[0][i].classList.add("source");
    }
    else if (graph.links[i].target.index == idx) {
      link[0][i].classList.add("target");
    }
    else {
      link[0][i].classList.remove("source");
      link[0][i].classList.remove("target");
    }
  }
});

Идея заключается в том, что при запуске данного события вы просмотрите список ссылок и выделите (добавьте класс) каждому, источник или цель которого соответствует индексу, найденному в данных node. Вероятно, это не делает все, что способен d3, но он не требует дополнительных библиотек, и я быстро выделяю ссылки на исходные/целевые ссылки.