您的位置:首页 > 其它

zTree模糊查询(仅保留符合查询条件节点及其所有父节点)

2017-07-17 15:29 507 查看
var hiddenNodes=[];	//用于存储被隐藏的结点
var showNoddesTreeId = []; // 用于保存显示那些有子节点符合查询条件的父节点的treeId

//获取符合查询条件的总函数
function filter(){
if($('#keyword').val()!=""){
//获取input中的查询条件
var _keywords = $("#keyword").val();
//清空需要从隐藏节点的数组中删除的父节点的treeId数组
showNoddesTreeId = [];
//显示上次搜索后被隐藏的结点
departmenttree.data.zTreePlugin.showNodes(hiddenNodes);
//清空暂存的父节点(其第一层子节点中没有符合查询条件的节点)
var nodesTreeId = [];
// 遍历某节点的所有子节点函数
function getAllChildInfo(node){
// 初始化用来标识本次查询的node是否符合查询条件的值为''
nodeKey = '';
// 如果该节点为父节点,并且节点名称不符合查询条件的
if(node.isParent && node.name.indexOf(_keywords) == -1){
// 用来判断this node是否为模糊查询结果中的一员初始化为2,如果是变为1
outerloop: //命名外圈语句
for(var i = 0; i < node.children.length; i++) {
while(node.children[i].name.indexOf(_keywords) != -1) {
nodeKey = '1';
break outerloop;
}
nodesTreeId.push(node.treeId);
getAllChildInfo(node.children[i]);
}
}
// 如果该节点符合查询条件(不管是父节点还是子节点)
else if(node.name.indexOf(_keywords) != -1) {
nodeKey = '1';
}
// 根据上面的判断执行完后,如果nodeKey的值为'1'
while(nodeKey == '1') {
// 去重复制数组 nodesTreeId 到数组showNoddesTreeId
for(var i = 0, j = nodesTreeId.length; i < j; i++) {
if(showNoddesTreeId.indexOf(nodesTreeId[i]) == -1) {
showNoddesTreeId.push(nodesTreeId[i]);
}
}
// 最后返回false,表示该node符合查询条件
return false;
}
// 如果nodeKey !='1',就清空暂存的父节点,返回true
nodesTreeId = [];
return true;
}
//获取根节点
var rootTreeNode = departmenttree.data.zTreePlugin.getNodeByParam('treeId', '00');
// 接收需要隐藏的节点,从根节点开始过滤  查询条件( 自定义过滤器函数,查找节点集合,从根节点开始查)
hiddenNodes = departmenttree.data.zTreePlugin.getNodesByFilter(getAllChildInfo, false, rootTreeNode);
if(hiddenNodes.length != null) {
// 两层for循环,将符合查询条件节点的所有父节点从隐藏数组中删除
for(m = 0; m < hiddenNodes.length; m++) {
for(n = 0; n < showNoddesTreeId.length; n++) {
if(hiddenNodes[m].treeId == showNoddesTreeId
) {
hiddenNodes.splice(m, 1); // 从M开始删除1个对象
}
}
}
}
// 隐藏节点
departmenttree.data.zTreePlugin.hideNodes(hiddenNodes);
// 展开全部
departmenttree.data.zTreePlugin.expandAll(true);
}
if($('#keyword').val()==""){// 查询条件删除后
$.fn.zTree.init($("#departmentTree"),departmenttree.setting,departmenttree.data.data);
var treeRoot=departmenttree.data.zTreePlugin.getNodeByParam("treeId","00");
// 缺省展开根节点后面的第一级节点
departmenttree.data.zTreePlugin.expandNode(treeRoot,true,false);
// 缺省选择根节点
departmenttree.data.zTreePlugin.selectNode(treeRoot);
// 传值
departmenttree.data.treeNode=treeRoot;
}
}

备注:

departmenttree.data.zTreePlugin.是树加载完后获得的对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: