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

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[n]) {
						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.是树加载完后获得的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值