Я работаю над графом, ориентированным на силу, в D3. Я хочу выделить узел, на который наведен указатель мыши, его связи и его дочерние узлы, установив для всех других узлов и ссылок более низкую непрозрачность.
В этом примере, http://jsfiddle.net/xReHA/ , я могу скрыть все ссылки и узлы, а затем исчезнуть в связанных ссылках, но пока я не не удалось элегантно исчезнуть в подключенных узлах, которые являются дочерними по отношению к узлу, на который в данный момент наведен указатель мыши.
Это ключевая функция из кода:
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: невозможно вызвать метод setProperty из неопределенной
ошибки, когда я пытаюсь установить непрозрачность для элемента, из которого я загрузил source.target. Я подозреваю, что это неправильный способ загрузить этот узел как объект d3, но я не могу найти другой способ загрузить его, не повторяя снова все узлы, чтобы найти те, которые соответствуют цели или источнику ссылки. Чтобы сохранить разумную производительность, я не хочу перебирать все узлы больше, чем необходимо.
Я взял пример исчезновения ссылок из http://mbostock.github.com/d3/ex/chord.html :
Однако это не показывает, как изменить подключенные дочерние узлы.
Любые хорошие предложения о том, как решить или улучшить эту проблему, будут яростно поддержаны:)