ztree自动模糊搜索

是否可以借助于zTree实现文本框输入关键词自动模糊匹配zTree下拉树,然后选择下拉树内节点显示在文本框内且隐藏下拉树。

看到这个需求脑子里头大致已经想到了要如何实现这样一个需求,当时是限于时间问题所以没有动手处理。今天闲来无事琢磨了一下这个需求。我的解决思路如下所示:

1、监听文本框的onkeyup事件;实时传递其值到某个函数;

2、编写某个函数接收文本框的值通过zTree的模糊查找方法getNodesByParamFuzzy(key,value)获得;

3、将匹配到的节点列表结合重新赋值给zTree且显示在文本框下方;

4、通过zTree的onClick事件实现选中节点后将其节点名称显示在文本框内。

5、当关键词变动时,及时将zTree的数据恢复至原始完整状态;这样可以保证从新从完整数据内匹配节点数据。

实际操作:

1、UI设计

提供一个文本框且设置onkeyup事件,另外设置一个div层用于放置zTree树控件;

 

复制代码

<div class="content_wrap">
        <div class="zTreeDemoBackground left">
            <ul class="list">
                <li class="title">&nbsp;&nbsp;城市:<input id="citySel" type="text" value="" οnkeyup="AutoMatch(this)"
                    style="width: 120px;" />
                </li>
            </ul>
        </div>
</div>
<div id="menuContent" class="menuContent" style="displayx: none; position: absolute;">
        <ul id="treeDemo" class="ztree" style="margin-top: 0; width: 110px;">
        </ul>
</div>

复制代码

 

2、zTree的基本配置

 

复制代码

var setting = {
            view: {
                selectedMulti: false //是否允许多选
            },
            data: {
                simpleData: {
                    enable: true
                }
            },
            callback: {
                //zTree节点的点击事件
                onClick: onClick
            }
};

复制代码

 

 

zTree的初始化数据:

 

复制代码

//Ztree的初始数据
        var zNodes = [
            { id: 1, pId: 0, name: "北京" },
            { id: 2, pId: 0, name: "天津" },
            { id: 3, pId: 0, name: "上海" },
            { id: 6, pId: 0, name: "重庆" },
            { id: 4, pId: 0, name: "河北省", open: true },
            { id: 41, pId: 4, name: "石家庄" },
            { id: 42, pId: 4, name: "保定" },
            { id: 43, pId: 4, name: "邯郸" },
            { id: 44, pId: 4, name: "承德" },
            { id: 5, pId: 0, name: "广东省", open: true },
            { id: 51, pId: 5, name: "广州" },
            { id: 52, pId: 5, name: "深圳" },
            { id: 53, pId: 5, name: "东莞" },
            { id: 54, pId: 5, name: "佛山" },
            { id: 6, pId: 0, name: "福建省", open: true },
            { id: 61, pId: 6, name: "福州" },
            { id: 62, pId: 6, name: "厦门" },
            { id: 63, pId: 6, name: "泉州" },
            { id: 64, pId: 6, name: "三明" }
         ];

复制代码

 

zTree节点的click事件实现:

 

复制代码

//点击某个节点 然后将该节点的名称赋值值文本框
function onClick(e, treeId, treeNode) {
            var zTree = $.fn.zTree.getZTreeObj("treeDemo");
            //获得选中的节点
            var nodes = zTree.getSelectedNodes(),
            v = "";
            //根据id排序
            nodes.sort(function compare(a, b) { return a.id - b.id; });
            for (var i = 0, l = nodes.length; i < l; i++) {
                v += nodes[i].name + ",";
            }
            //将选中节点的名称显示在文本框内
            if (v.length > 0) v = v.substring(0, v.length - 1);
            var cityObj = $("#citySel");
            cityObj.attr("value", v);
            //隐藏zTree
            hideMenu();
            return false;
}

复制代码

 

 

3、控制zTree树的显隐

 

复制代码

//显示树
function showMenu() {
            var cityObj = $("#citySel");
            var cityOffset = $("#citySel").offset();
            $("#menuContent").css({ left: cityOffset.left + "px", top: cityOffset.top + cityObj.outerHeight() + "px" }).slideDown("fast");
}
       
 //隐藏树
function hideMenu() {
            $("#menuContent").fadeOut("fast");
            $("body").unbind("mousedown", onBodyDown);
}

复制代码

 

4、初始化zTree树数据

 

 

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

 

5、实现文本框的onkeyup事件且匹配zTree树节点

 

复制代码

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

复制代码

 

 

这样一来就可以非常完美地实现了文本框输入关键词实时自动匹配zTree下拉效果。

另外需要引入的js和css文件为:

<link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.core-3.5.js"></script>

转载于:https://my.oschina.net/u/2537947/blog/756305

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue项目中使用zTree实现模糊搜索的步骤如下: 1. 创建一个Vue项目,可以使用vue-cli来快速搭建。 2. 引入zTree插件,可以通过npm安装或者直接下载js文件并引入到项目中。 3. 在Vue组件中使用zTree,并创建一个树形结构。 4. 在zTree的配置项中,添加一个回调函数来实现模糊搜索的功能。这个回调函数可以是官方提供的模糊搜索函数fuzzySearch的修改版,根据自己的需求进行相应的修改。 5. 在模糊搜索的回调函数中,可以通过遍历树的节点,使用正则表达式匹配搜索关键字并将匹配到的节点高亮显示。 6. 参考一些资料,如官方文档或者其他人的经验,来帮助理解和实现zTree模糊搜索功能。 以上是使用zTree实现模糊搜索的大致步骤,具体的代码实现和配置可能有所不同,可以根据自己的需求和实际情况进行相应的修改和调整。引用提供了一个具体的实现步骤和效果图,引用提供了zTree在Vue项目中使用的参考资料,引用提供了关于模糊搜索功能的一些修改方法的参考资料。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [在vue-cli项目中使用ztree,并实现ztree模糊搜索高亮](https://blog.csdn.net/weixin_44101052/article/details/90372593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [实例详解ztree在vue项目中使用并且带有搜索功能](https://download.csdn.net/download/weixin_38610870/12953434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue2.x + zTree,简单的二次封装(二) -- 添加模糊搜索功能](https://blog.csdn.net/mf_717714/article/details/126864127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值