layui tree 对节点进行搜索

LayUI的tree对节点进行搜索的效果图
在这里插入图片描述
需要在使用layui的tree的界面添加的查询代码方法

        //左侧树图
        // 同步(绑定)layui的tree的搜索(过滤)框
        // treeId: tree所在的容器的id
        // filter: 对应的搜索框的selector或者dom对象
        // callback: 回调 参数(树节点jquery对象, 输入框对象, 匹配到的节点数量)
        tree.syncLayuiTreeFilter = function (treeId, filter, callback) {
            let treeElem = $('#' + treeId), filterElem = $(filter);
            if (!filterElem.length || !filterElem.length) {
                return;
            }
            // 搜索框的监听事件按实际需求来
            filterElem.unbind('change').change(function () {
                let that = this; //this;
                let value = $(that).val().trim();
                let HIDE = 'layui-hide';
                let hintClass = 'search_hit';
                // 先恢复现场
                treeElem.find('.' + HIDE).removeClass(HIDE);
                treeElem.find('.' + hintClass).removeClass(hintClass)
                // 如果有值筛选开始
                if (value) {
                    $.each(treeElem.find('.layui-tree-txt'), function (index, elem) {
                        elem = $(elem);
                        let textTemp = elem.text();
                        if (textTemp.indexOf(value) === -1) {
                            // 不存在就隐藏
                            elem.closest('.layui-tree-set').addClass(HIDE)
                        } else {
                            // 命中就添加一个class
                            elem.addClass(hintClass)
                        }
                    });
                    $.each(treeElem.find('.' + hintClass), function (index, elem) {
                        elem = $(elem);
                        // 取消隐藏所有父节点
                        elem.parents('.layui-tree-set').removeClass(HIDE);
                        // 展开所有父节点
                        elem.parents('.layui-tree-set').each(function (i, item) {
                            if (!$(item).hasClass('layui-tree-spread')) {
                                $(item).find('.layui-tree-iconClick :first').click();
                            }
                        });
                    });
                }
                typeof callback === 'function' && callback.call(that, treeElem, filterElem, treeElem.find('.' + hintClass).length);
            });
        };

        tree.syncLayuiTreeFilter('thingModelTree', '[name="searchTree"]', function (treeElem, filterElem, hitNumbers) {
        });

在代码的详细使用如下


                <div class="layui-card-body">
                    <input class="layui-input layui-input-inline" name="searchTree"
                           placeholder="请输入名称回车进行查询">
                    <div id="thingModelTree"></div>
                </div>

<script>
    layui.use(['tree', 'table', 'form', 'layer', 'miniPage'], function () {
        var tree = layui.tree,
            table = layui.table,
            form = layui.form,
            layer = layui.layer,
            miniPage = layui.miniPage,
            $ = layui.$;
        //左侧树图
        // 同步(绑定)layui的tree的搜索(过滤)框
        // treeId: tree所在的容器的id
        // filter: 对应的搜索框的selector或者dom对象
        // callback: 回调 参数(树节点jquery对象, 输入框对象, 匹配到的节点数量)
        tree.syncLayuiTreeFilter = function (treeId, filter, callback) {
            let treeElem = $('#' + treeId), filterElem = $(filter);
            if (!filterElem.length || !filterElem.length) {
                return;
            }
            // 搜索框的监听事件按实际需求来
            filterElem.unbind('change').change(function () {
                let that = this; //this;
                let value = $(that).val().trim();
                let HIDE = 'layui-hide';
                let hintClass = 'search_hit';
                // 先恢复现场
                treeElem.find('.' + HIDE).removeClass(HIDE);
                treeElem.find('.' + hintClass).removeClass(hintClass)
                // 如果有值筛选开始
                if (value) {
                    $.each(treeElem.find('.layui-tree-txt'), function (index, elem) {
                        elem = $(elem);
                        let textTemp = elem.text();
                        if (textTemp.indexOf(value) === -1) {
                            // 不存在就隐藏
                            elem.closest('.layui-tree-set').addClass(HIDE)
                        } else {
                            // 命中就添加一个class
                            elem.addClass(hintClass)
                        }
                    });
                    $.each(treeElem.find('.' + hintClass), function (index, elem) {
                        elem = $(elem);
                        // 取消隐藏所有父节点
                        elem.parents('.layui-tree-set').removeClass(HIDE);
                        // 展开所有父节点
                        elem.parents('.layui-tree-set').each(function (i, item) {
                            if (!$(item).hasClass('layui-tree-spread')) {
                                $(item).find('.layui-tree-iconClick :first').click();
                            }
                        });
                    });
                }
                typeof callback === 'function' && callback.call(that, treeElem, filterElem, treeElem.find('.' + hintClass).length);
            });
        };

        tree.syncLayuiTreeFilter('thingModelTree', '[name="searchTree"]', function (treeElem, filterElem, hitNumbers) {
        });

      $.ajax({
            url: getModelThingTreeUrl,
            type: 'get',
            dataType: 'json',
            success: function (rsp) {
                if ('00000' === rsp.code) {
                    // 渲染左侧树图
                    treeData = rsp.data;
                    var thingModelTree = tree.render({
                        elem: '#thingModelTree',
                        data: treeData,
                        id: 'thingModelTree',
                        isJump: true,
                        click: function (obj) {
                            // 点击树节点时触发
                            nodeId = obj.data.id;
                            nodeName = obj.data.title;
                            // 模拟根据节点 ID 请求右侧列表数据
                            loadTableData(nodeId);
                        },
                        edit: ['add', 'update', 'del'],// 开启节点的右侧操作图标
                        checked: true,
                        customOperate: true,//节点操作是否支持自定义
                        onlyIconControl: true,  // 是否仅允许节点左侧图标控制展开收缩
                        operate: function (obj) {
                            var type = obj.type; // 得到操作类型:add、edit、del
                            var data = obj.data; // 得到当前节点的数据
                            if (type === 'add') { // 增加节点
                        
                            } else if (type === 'update') { // 修改节点
                               
                            } else if (type === 'del') { // 删除节点
                              
                            }
                        }
                    });
                } else {
                    layer.alert("查询失败。原因:" + rsp.msg);
                }
            },
            error: function (rsp) {
                layer.alert("查询树图失败。原因:" + rsp.msg);
            }
        });
    });

</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值