В настоящее время я пытаюсь связать отступ с вертикальным организационным деревом и выбором ввода select2, и по какой-то причине я застрял в функции searchTree (). Вот образец вертикального дерева с отступом:
Вертикальное органное дерево Майка Бостока
Вот пример другого дерева, которое использует поиск select2:
Поиск Патрика Брокмана по дереву D3
Я пытаюсь объединить все это. Вот две другие ссылки, которые могут дать вам дополнительную информацию:
Мой Плункр
Личный репозиторий GitHub
Следующая часть кода, с которой у меня возникают проблемы, представляет собой следующую функцию:
function searchTree(d) {
if (d.children) {
d.children.forEach(searchTree);
}
else if (d._children) {
d._children.forEach(searchTree);
}
var searchField = "d.data.name";
var searchFieldValue = eval(searchField);
if (searchFieldValue && searchFieldValue.match(searchText)) {
// Walk parent chain
var ancestors = [];
var parent = d.data;
console.log(searchFieldValue);
console.log(searchText);
while (typeof(parent) !== "undefined") {
ancestors.push(parent);
console.log("Ancestors: " + ancestors);
console.log("Parent: " + parent);
parent.parent.class = "found";
parent = parent.parent;
}
}
}
Вот несколько скриншотов того, что сейчас происходит.
Выберите 2 и дерево D3 при начальной загрузке страницы.
Раскрывающийся список select2 взаимодействует и расширяет Дерево D3, но выбор не связывается с соответствующим узлом, как в коде Патрика Брокмана:
Дерево, открытое после выбора select2
Здесь также приведены результаты различных console.logs в функции searchTree (). Все выглядит хорошо (по сравнению с версией Брокмана), пока «родитель» не станет нулевым. Вот где функциональность прекращается.
Console.log родителей и предков
Основная цель - позволить пользователю автоматически «переходить» к узлу из выпадающего списка select2 select с различными родительскими / дочерними узлами и выделенными / заполненными ссылками. В настоящее время я застрял в цикле while, который существует в конце функции searchTree ().
Почему я получаю сообщение об ошибке «Невозможно установить свойство 'class' для null."