D3.js: 'searchFieldValue' и 'searchText' совпадают, но застряли в searchTree () - PullRequest
0 голосов
/ 23 апреля 2019

В настоящее время я пытаюсь связать отступ с вертикальным организационным деревом и выбором ввода 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."

...