У меня есть карта мира с отдельными странами в качестве элементов пути. Каждая страна принадлежит кластеру, который является объектом, содержащим названия стран. Названия соответствуют именам в свойствах geojson отдельных объектов. При нажатии на страну мне хотелось бы изменить стиль всего кластера, к которому принадлежит страна.Выбор нескольких элементов пути в карте d3
Я могу выделить щелкнул узел, так как она передается в обработчик события, как это:
svg.selectAll("path").data(json.features).enter().append("path")
.attr("d", path)
.style("fill", function(d) {
var value = d.properties.value;
var size = d.properties.size;
if (value) {
var hsv = hsvToRgb((value/moreThanOne) *0.66, 1, 0.1 + (size/maxSize) * 0.9);
if (size == 1) return "#000000";
else return "rgba(" + Math.floor(hsv[0]) + "," + Math.floor(hsv[1]) + "," + Math.floor(hsv[2]) + ",255)";
} else return "#999999";
}).on("click", function(d) {
var name = d.properties.name;
var value = d.properties.value;
hilite(value, this);
})
здесь есть функция подсветки:
function hilite(cluster, node) { //highlights the single clicked node
d3.select(node).style("stroke", "#ff0000");
//clustermap is the object holding the clusters data
Object.keys(clusterMap[cluster]).forEach(function(key) {
svg.selectAll("svg").data().each(function(d) {
if (d.properties.name.toLowerCase() == key.replace(".gif", "").toLowerCase()) {
//if it matches, style ... but how?
console.log(d.properties.name.toLowerCase() + " " + key.replace(".gif", "").toLowerCase());
}
});
});
}
Как выбрать все узлы по именам и применять стили к ним? Я новичок в d3, поэтому, я думаю, должен быть простой способ сделать это, но я не могу понять это.
Спасибо!
спасибо, я постараюсь, но я должен изменить его, так как «кластер» это просто идентификатор в clusterMap, который затем содержит объекты с названиями стран, например: 1: Танзания: Танзания Австралия: Австралия 2: название страны: название страны и т.д. так, что функция придется вернуться на множественный выбор ... это моя проблема :) – Solipsy
Итак, откуда вы взяли имя кластера для выбранной страны? –
yes ... когда я сначала разбираю geojson, добавляю свойство («значение») с именем кластера (число), затем я получаю его из объекта с «var value = d.properties.value» перед вызовом хилит. Я изменил код согласно вашему предложению с добавленным циклом, который проходит через страны в переданном кластере, но он ничего не делает на лицевой панели. возможно, увидеть код онлайн? : http://virostatiq.com/data/flags/ – Solipsy