需求:
在查询框中输入关键字,按回车键,查询树中所有相关的节点,展开查到结果的文件夹,并将结果高亮显示。效果如下图:
实现:
<div class="easyui-tabs" data-options="fit:true">
<!-- 查询工具 -->
<div title="脚本管理">
<div class="zTreeDemoBackground left">
。。。
</div>
</div>
<div title="元数据" class="metaDbInfoTree" >
<input class="easyui-searchbox" data-options="searcher:searchDept,prompt:'请输入表名称'"
id="searchText" onchange="resetTreeNode()" style="width: 186px; height: 32px;"></input>
<ul id="metaDbInfo" class="easyui-tree"> </ul>
</div>
<div title="任务列表">
。。。
</div>
<div title="脚本缓存">
。。。
</div>
</div>
function searchDept(){
var parentNode=$('#metaDbInfo').tree('getRoots'); //得到tree顶级node
var searchCon = $("#searchText").val();
var children;
for(var i=0;i<parentNode.length;i++){ //循环顶级 node
children = $('#metaDbInfo').tree('getChildren',parentNode[i].target);//获取顶级node下所有子节点
if(children){ //如果有子节点
for(var k=0;k<children.length;k++){ //循环所有子节点
var subchildren = $('#metaDbInfo').tree('getChildren',children[k].target);
// if($('#metaDbInfo').tree('isLeaf',children[j].target)){ } //判断子级是否为叶子节点,即不是父节点
for(var j=0;j<subchildren.length;j++) { //循环所有子节点
if (subchildren[j].text.indexOf(searchCon) >= 0) { //判断节点text是否包含搜索文本 ||children[j].id.indexOf(searchCon)>=0
if (subchildren[j]){
$('#metaDbInfo').tree('update', {
target: subchildren[j].target,
text: "<span style='color:red;'>"+ subchildren[j].text+"</span>"
});
}
// selectNode(subchildren[j]); //设置此节点为选择状态
expandParent(subchildren[j]); //设置此节点所有父级展开
// return;
}else{
subchildren[j].text = subchildren[j].text.replace('red','black');
$('#metaDbInfo').tree('update', {
target: subchildren[j].target,
text:subchildren[j].text
});
}
}
}
}else{
if(parentNode[i].text.indexOf(searchCon)>=0){ //||children[j].id.indexOf(searchCon)>=0
if (parentNode[i]){
$('#metaDbInfo').tree('update', {
target: parentNode[i].target,
text: "<span style='color:red;'>"+ parentNode[i].text+"</span>"
});
}
// selectNode(parentNode[i]);
expandParent(parentNode[i]);
// return;
}
}
}
}
function selectNode(node){
$('#metaDbInfo').tree('select',node.target);
};
function expandParent(node){
var parent = node;
var t = true;
do {
parent = $('#metaDbInfo').tree('getParent',parent.target); //获取此节点父节点
if(parent){ //如果存在
t=true;
$('#metaDbInfo').tree('expand',parent.target);
}else{
t=false;
}
}while (t);
};