ztree模糊搜索并显示父层级&&手动触发oncheck

ztree增加模糊搜索功能

html部分

<div class="add_map_container tonly_add_map_container" id="tonly_add_map_container">
	<div class="zTreeDemoBackground left">
		<input type="text" id="type_search_tonly" placeholder="请输入设备名称" style="padding-left: 5px;font-size: 0.2rem"/>
			<ul class="ztree treeTonly" id="treeDept" style="padding: 0px 5px;"></ul>
	</div>
</div>

js部分

//定义setting
var setting = {
     view: {
         selectedMulti: false, //是否允许多选
         showIcon: false
     },
     data: {
         simpleData: {
             enable: true
         }
     },
     check: {
         enable: true,
     },
     callback: {
         onCheck: treenodeClick
     }
};
var zNodes = []; 

//监听搜索框input的change事件
$("body").off("keyup", '#type_search_tonly').on("keyup", '#type_search_tonly', function () {
     AutoMatch(this);
});

//根据文本框的关键词输入情况自动匹配树内节点 进行模糊查找
function AutoMatch(txtObj) {
	InitialZtree();
    if (txtObj.value.length > 0) {
        var zTree = $.fn.zTree.getZTreeObj("treeDept");
        var nodeList = zTree.getNodesByParamFuzzy("name", txtObj.value);
        //将找到的nodelist节点更新至Ztree内
        $.fn.zTree.init($("#treeDept"), setting, nodeList);
    }
}

//还原zTree的初始数据
function InitialZtree() {
    $.fn.zTree.init($("#treeDept"), setting, zNodes);
}

//勾选树节点,获取该节点的所有叶子节点id
function treenodeClick(event, treeId, treeNode, clickFlag) {
    var nodeParentId = treeNode.getParentNode() ? treeNode.getParentNode().id : null;
    var nodeParentName = treeNode.getParentNode() ? treeNode.getParentNode().name : null;
    console.log(nodeParentId,nodeParentName);
    //此处treeNode 为当前节点
    if (treeNode.checked == false) {
        for (var n = 0; n < tonlyCheckArr.length; n++) {
            if (treeNode.isParent) {
                if (tonlyCheckArr[n].nodeParentId == treeNode.id) {
                    tonlyCheckArr.splice(n, 1);
                    n--;
                }
            } else {
                if (tonlyCheckArr[n].id == treeNode.id) {
                    tonlyCheckArr.splice(n, 1);
                    n--;
                }
            }
        }
    } else if (treeNode.checked == true) {
        if (treeNode.isParent) {
            tonlyCheckArr = getAllChildrenNodes(treeNode, tonlyCheckArr);
        } else {
            var obj = {
                "nodeParentId": nodeParentId,
                "nodeParentName": nodeParentName,
                "name": treeNode.name,
                "id": treeNode.id
            };
            tonlyCheckArr.push(obj);
        }
    }
}

//使用了递归,得到叶子节点的数据
function getAllChildrenNodes(treeNode, arr) {
    if (treeNode.isParent) {
        var childrenNodes = treeNode.children;
        if (childrenNodes) {
            for (var i = 0; i < childrenNodes.length; i++) {
                if (childrenNodes[i].isParent) {
                    getAllChildrenNodes(childrenNodes[i], arr);
                } else {
                    var obj = {
                        "nodeParentId": childrenNodes[i].getParentNode().id,
                        "nodeParentName": childrenNodes[i].getParentNode().name,
                        "name": childrenNodes[i].name,
                        "id": childrenNodes[i].id
                    };
                    arr.push(obj);
                }
            }
        }
    }
    return arr;
}

效果图
在这里插入图片描述

在这里插入图片描述

如果只需要勾选子级不需要显示该子节点的父节点信息,那么目前已经可以了。


如果需要在显示显示某个组下的某个节点,这样是做不到的。在模糊搜索的列表里面勾选是没有父节点的。

ztree增加模糊搜索和显示父级功能&&手动触发oncheck

html部分

给树状同级增加一个专门显示搜索结果的ul,默认将它隐藏,搜索时显示

<div class="add_map_container tonly_add_map_container" id="tonly_add_map_container">
	<div class="zTreeDemoBackground left">
		<input type="text" id="type_search_tonly" placeholder="请输入设备名称" style="padding-left: 5px;font-size: 0.2rem"/>
			 <ul class="ztree treeTonly" id="treeDept" style="padding: 0px 5px;"></ul>
			 <ul class="ztree treeTonly" id="treeDeptSearch" style="padding: 0px 5px;display: none;"></ul>
	</div>
</div>

js部分

input 的监听事件不变,修改触发的函数,没有修改内容,也不需要用到InitialZtree方法

//定义搜索的setting
var settingSearch = {
   view: {
       selectedMulti: false, //是否允许多选
       showIcon: false
   },
   data: {
       simpleData: {
           enable: true
       }
   },
   check: {
       enable: true
   },
   callback: {
       onCheck: treenodeClickSearch
   }
};

//根据文本框的关键词输入情况自动匹配树内节点 进行模糊查找
function AutoMatch(txtObj) {
    if (txtObj.value.length > 0) {
        var zTree = $.fn.zTree.getZTreeObj("treeDept");
        var nodeList = zTree.getNodesByParamFuzzy("name", txtObj.value);
        $("#treeDept").hide();
        $("#treeDeptSearch").show();
        //将找到的nodelist节点更新至搜索的Ztree内
        $.fn.zTree.init($("#treeDeptSearch"), settingSearch, nodeList);
    }else{
        $("#treeDept").show();
        $("#treeDeptSearch").hide();
    }
}

//搜索完成勾选某个 隐藏搜索ul显示主ul并勾选触发主tree的onCheck事件
//手动触发onCheck事件至关重要   这个也找了很久
//当它触发了onCheck事件,那么上面的treenodeClick方法就可以找到他的父级了。
function treenodeClickSearch(event, treeId, treeNode, clickFlag) {
    $("#treeDept").show();
    $("#treeDeptSearch").hide();
    $("#type_search_tonly").val("");
    var treeObj = $.fn.zTree.getZTreeObj("treeDept");
    var node = treeObj.getNodeByParam("name", treeNode.name);
    treeObj.checkNode(node,true,true); //选中
    treeObj.setting.callback.onCheck('','treeDept',node);//手动触发onCheck事件
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值