我在d3.js v3中有一个搜索功能适用于我的d3树。搜索使用的是select2.js选择列表,该列表中填充了所有叶节点,如this example
从选择列表中选择一个节点项目会打开树以显示该节点,并将该节点更改为红色。
迁移到d3 v5之后,搜索现在返回树中的所有节点,而不仅仅是返回选择列表中的选定项。我认为该问题的出现部分是由于以下原因中的TypeError: parent is null
:
function searchTree( d ) {
if ( d.children )
d.children.forEach( searchTree );
else if ( d._children )
d._children.forEach( searchTree );
var searchFieldValue = eval( searchField );
if ( searchFieldValue && searchFieldValue.toLowerCase().match( searchText.toLowerCase() ) ) {
// Walk parent chain
var ancestors = [];
var parent = d;
while ( typeof ( parent ) !== "undefined" ) {
ancestors.push( parent );
console.log(parent);
parent.class = "found";
parent = parent.parent;
}
console.log(ancestors);
}
}
有什么想法吗?
请参见fiddle