我目前正在尝试将一个缩进的垂直组织树和一个select2输入select链接起来,由于某种原因,我被困在“ searchTree()”函数中。这是一个缩进的垂直树的样本:
Mike Bostock's Indented Vertical Org Tree
这是另一棵将select2搜索化为一棵树的示例:
Patrick Brockmann's D3 Tree Search
我正在尝试将所有这些结合起来。这是另外两个链接,可能会给您带来更多的启示:
我遇到问题的代码部分是以下功能:
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;
}
}
}
以下是当前情况的一些屏幕截图。
Select2 and D3 Tree on initial page load.
select2下拉菜单进行交互并展开D3树,但选择未链接到适当的节点,如Patrick Brockman的代码所示:
Tree opened after select2 selection
这也是searchTree()函数中各种console.logs的结果。一切看起来都不错(与Brockman的版本相比),直到“ parent”变为null为止。那就是功能停止的地方。
Console.log of parents and ancestors
基本目标是允许用户从select2下拉菜单select搜索中自动“跳转”到具有各种父/子节点和突出显示/填充的链接的节点。我目前被困在searchTree()函数末尾的while循环中。
为什么会出现错误“无法将属性'class'设置为null”。