之前写的一篇文章仅符合自己项目需求的一种写法,现提供通用的书写方式,废话少说见代码。
页面效果:
代码如下:
//container左侧边栏ztree搜索
var queryHideNodes = [];//查询隐藏的
var queryShowNodes = [];//查询展示的
$(".ztreeSearch").keyup(function(e){
if(e.keyCode!=13&&e.keyCode!=32&&$(this).val()!=""){
return;
}
var treeId = $(".ztree").attr("id");
var treeObj = $.fn.zTree.getZTreeObj(treeId);
var queryWord=$(".ztreeSearch").val().toUpperCase();
//颜色重置
function resetColor(){
for( var i=0; i<queryShowNodes.length;i++) {//初始将上次查询的内容颜色改回黑色
treeObj.setting.view.fontCss["color"]="black";
treeObj.updateNode(queryShowNodes[i]);
}
}
resetColor();
//展示查询的节点儿
function showQueryNode(node){
if(node.getParentNode()!=null){
treeObj.expandNode(node.getParentNode(),true);
}
}
function hideQueryNode(node){
if(node.isParent){
treeObj.expandNode(node,false);
}
}
function filter(queryShowNode,node){
if(queryShowNode.getParentNode()!=null){
if(queryShowNode.name==node.name){
return true;
}else{
return filter(queryShowNode.getParentNode(),node);
}
}else if(queryShowNode.name==node.name){
return true;
}else{
return false;
}
}
function filterHideFunc(node){
var boolen=true;
for(var i=0;i<queryShowNodes.length;i++){
if(filter(queryShowNodes[i],node)){
boolen=false;
}
}
return boolen;
}
function filterShowFunc1(node){
if(node.name.toUpperCase().indexOf(queryWord)==-1) return false;
return true;
}
function filterShowFunc2(node){
var boolen=false;
for(var i=0;i<queryShowNodes.length;i++){
if(filter(queryShowNodes[i],node)){
boolen=true;
}
}
return boolen;
}
queryShowNodes=treeObj.getNodesByFilter(filterShowFunc1);//过滤得到匹配的名称的节点
queryHideNodes=treeObj.getNodesByFilter(filterHideFunc);//过滤得到隐藏的
var queryShowNodes2=[];
queryShowNodes2=treeObj.getNodesByFilter(filterShowFunc2);//过滤得到展示的节点
if(!queryShowNodes.length){
treeObj.showNodes(queryHideNodes);
return true;
}
if(queryHideNodes.length){
for( var i=0; i<queryShowNodes.length;i++) {
showQueryNode(queryShowNodes[i]);
}
for( var i=0; i<queryShowNodes.length;i++) {
//改变展示节点的颜色
treeObj.setting.view.fontCss["color"]="red";
treeObj.updateNode(queryShowNodes[i]);
}
}else{
for( var i=0; i<queryShowNodes.length;i++) {
hideQueryNode(queryShowNodes[i]);
}
}
treeObj.hideNodes(queryHideNodes);
treeObj.showNodes(queryShowNodes2);
$(this).focus();
});