Я работаю над графиком, ориентированным на силу в D3. Я хочу выделить узел mouseover'd, его ссылки и его дочерние узлы, установив все остальные узлы и ссылки на меньшую непрозрачность.Выделите выбранный узел, его ссылки и его дочерние элементы в диаграмме направленности D3.
В этом примере http://jsfiddle.net/xReHA/, я могу исчезать все ссылки и узлы, затем исчезают в соединенных ссылках, но до сих пор я не мог элегантно исчезать в связанных узлах, которые являются дочерними текущего узла mouseover'd.
Это ключевая функция из кода:
function fade(opacity) {
return function(d, i) {
//fade all elements
svg.selectAll("circle, line").style("opacity", opacity);
var associated_links = svg.selectAll("line").filter(function(d) {
return d.source.index == i || d.target.index == i;
}).each(function(dLink, iLink) {
//unfade links and nodes connected to the current node
d3.select(this).style("opacity", 1);
//THE FOLLOWING CAUSES: Uncaught TypeError: Cannot call method 'setProperty' of undefined
d3.select(dLink.source).style("opacity", 1);
d3.select(dLink.target).style("opacity", 1);
});
};
}
Я получаю ошибку Uncaught TypeError: Cannot call method 'setProperty' of undefined
когда я пытаюсь установить непрозрачность на элемент я загружен из source.target. Я подозреваю, что это неправильный способ загрузить этот узел в качестве объекта d3, но я не могу найти другой способ загрузить его без повторения всех узлов, чтобы найти те, которые соответствуют цели или источнику ссылки. Чтобы поддерживать работоспособность, я не хочу перебирать все узлы больше, чем необходимо.
Я взял пример угасания ссылки из http://mbostock.github.com/d3/ex/chord.html:
Однако это не показано, как изменить подсоединенные дочерние узлы.
хорошие предложения о том, как решить или улучшить это будет неистово upvoted :)
Это отлично работает @mbostock, большое вам спасибо: D Я обновил [jsfiddle] (http://jsfiddle.net/xReHA/1/) с вашим решением. –
Удалено ненужное обращение к стилю по ссылке: http://jsfiddle.net/xReHA/2/ –
Майк, это решение было просто красиво. Просто говорю'. – Vivek