D3.js d3树-限制从搜索返回的节点数
我想限制在树上搜索返回的叶节点的数量,这样返回的树就不会过于杂乱 搜索节点标签:D3.js d3树-限制从搜索返回的节点数,d3.js,D3.js,我想限制在树上搜索返回的叶节点的数量,这样返回的树就不会过于杂乱 搜索节点标签: $( "#searchText" ).on( 'keyup', function ( e ) { if ( e.keyCode === 13 ) { clearAll( root ); expandAll( root ); update( root );
$( "#searchText" ).on( 'keyup', function ( e ) {
if ( e.keyCode === 13 ) {
clearAll( root );
expandAll( root );
update( root );
searchField = "d.name";
searchText = e.target.value;
//console.log(searchText);
searchTree( root );
root.children.forEach( collapseAllNotFound );
update( root );
}
} );
树上的搜索功能是:
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链接中,有32个子节点的标签包含“Mary”,例如“Mary x”
如果返回的节点数大于20,则树将保持折叠状态,并显示警报“匹配的节点太多。请优化搜索条件”。否则,搜索中的节点数为20或更少,然后展开树以显示节点
添加计数搜索结果函数,如下所示
function getSimilarLeafCnt(d, countSum=0) {
if ( d.children ) {
countSum = d.children.reduce( (m,d)=>{return getSimilarLeafCnt(d,m);} , countSum);
}else if ( d._children ){
countSum = d._children.reduce( (m,d)=>{return getSimilarLeafCnt(d,m);} , countSum);
}
var searchFieldValue = eval( searchField );
if ( searchFieldValue && searchFieldValue.toLowerCase().match( searchText.toLowerCase() ) ) {
countSum++
}
return countSum
}
并在搜索前调用它
...
console.log(getSimilarLeafCnt(root))
if( getSimilarLeafCnt(root)) > 20) {
alert('too many results!')
}else {
searchTree( root );
}..
这里的工作示例看起来不错,但我无法让它工作。你能把这个放进我的提琴叉里吗?@illudumpu36在回答中添加提琴url!