Есть пара подходов, один из них - использовать обычные слежки, чтобы скрыть разметку дочерних элементов (непрозрачность: 0 или отображение: нет).Однако это просто делает данные невидимыми, дерево сохраняет свою форму, как будто данные там, вы просто не можете их видеть.
Обычно вы хотите, чтобы дерево притворялось, что данных там нети обновите соответствующим образом, для этого вы можете использовать тот же подход, что и в примере силового макета в приведенной выше ссылке.
Это сводится к следующему: 1) Используйте функцию для построения дерева d3 2) добавьте щелчоксобытие для складных узлов 3) событие click переименовывает свойство children узла и вызывает функцию в 1), которая перерисовывает дерево без дочерних узлов этого узла.
Вот соответствующий код по ссылке в ответе nkoren (http://bl.ocks.org/1062288):
function update() {
// build the tree layout here
// append on("click", click) to the collapsible nodes
}
// Toggle children on click
function click(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else {
d.children = d._children;
d._children = null;
}
update();
}