J'utilise une disposition de force D3 et tente de réduire des nœuds enfants tout en conservant le graphique corrigé, par ex. en les changeant simplement et l'opacité de leurs liens. Cependant, je n'essaye pas de simplement réduire tous les nœuds à la fois - j'ai en fait un attribut dans chaque nœud appelé "groupe", qui peut être 1,2 ou 3.Disposition de force D3: Réduire le sous-ensemble de nœuds enfants (changement d'opacité)
Lorsque je clique sur un nœud, une info-bulle apparaît avec 3 boutons pour chacun de ces groupes - en cliquant sur le bouton correct, je voudrais que le nœud enfant de ce type s'effondre, mais tous ses enfants (des 3 groupes) s'effondrent également.
Voici le fiddle.
J'ai jusqu'à présent essayé de créer des tableaux des ids de groupe de noeuds et les ID de liaison correspondants, puis utilisez JQuery pour cacher les objets DOM, mais cela ne fonctionne pas:
function collapseNodes(node, collapseType, isCollapsed) {
var collapseData = minimise(node, collapseType);
var cNodes = collapseData.nodes,
cLinks = collapseData.links;
console.log(collapseData);
var newClass = isCollapsed ? "uncollapsed" : "collapsed";
cNodes.forEach(function(n) {
d3.select(n).style("opacity", 0);
});
cLinks.forEach(function(l) {
d3.select(l).style("opacity", 0);
});
}
function minimise(node, assetMinType = "") {
// Function to minimise a node
var minNodes = [];
var minLinks = [];
if (node.group == 'asset') {
node.children.forEach(function(child) {
if (child.group == assetMinType)
minimiseRec(child, node.id);
});
}
else {
minimiseRec(node, "");
// We want to keep the top node and link
minNodes.shift();
minLinks.shift();
}
function minimiseRec(node, parentID) {
minNodes.push("#" + node.id);
minLinks.push("#parent_" + parentID + "_child_" + node.address);
node.children.map(function(child) {
minimise(child, node.id);
});
}
return { nodes: minNodes, links: minLinks };
}
Est-ce que quelqu'un sait comment mieux pour faire ça?
Merci.
Je suis désolé d'avoir assez de temps pour terminer. La logique est assez simple, il suffit de vérifier si le nœud appartient au groupe que vous souhaitez cacher et si c'est le cacher et ses enfants – thatOneGuy
Merci beaucoup! – annikam