layui 树形组件元素全选,全不选,反选

5 篇文章 0 订阅

layui的tree组件官方介绍的不多,而且元素的名称都得是固定的所以如何将后台的数据与前台交互需要自己再设计

1、后台到前端(有递归调用)

    private Object fun(List<SeriesRuleClass> tree, List<HashMap<String, Object>> result) {
        for (SeriesRuleClass aClass : tree) {
            HashMap<String, Object> map = new HashMap<>();
            map.put("id", aClass.getClazzId());
            map.put("title", aClass.getClassName());
            map.put("checked", aClass.isChoose());
            List<SeriesRuleClass> children = aClass.getChildren();
            List<HashMap<String, Object>> result1 = new ArrayList<>();
            if (null != children) {
                map.put("children", fun(children, result1));
            }
            result.add(map);
        }
        return result;
    }

前端接收展示

    function loadRuleTree(data) {
        layuiTree.render({
            elem: '#clazz-tree',
            id: 'clazz-tree',
            data: data
            , accordion: true
            , showCheckbox: true
        })

    }

 

layui tree展示有个bug 就是一级和二级的图标尺寸不一样,所以会对不齐。所以我把没有子项的排除了。

2、全选,全不选,反选

官方文档中方法很少:1、获取勾选的节点。2、指定节点id勾选。

所以得自己遍历了,反选有点麻烦先遍历出所有勾选的id。

        <div id="clazz-div" style="display: none">
            <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
                <legend>指定适用班级</legend>
            </fieldset>
<!--            <button type="button" class="layui-btn layui-btn-sm" lay-demo="getChecked">获取选中节点数据</button>-->
            <button type="button" class="layui-btn layui-btn-sm" lay-demo="setChecked">全选</button>
            <button type="button" class="layui-btn layui-btn-sm" lay-demo="setUnChecked">全不选</button>
            <button type="button" class="layui-btn layui-btn-sm" lay-demo="setReverseChecked">反选</button>
            <!--            <button type="button" class="layui-btn layui-btn-sm" lay-demo="reload">重载实例</button>-->
            <div id="clazz-tree" class="demo-tree"></div>
        </div>

layui.use(['transfer', 'layer', 'table', 'element', 'form', 'tree', 'util'], function () {
    var layer = layui.layer //弹层
        , table = layui.table
        , form = layui.form
        , layuiTree = layui.tree
        , $ = layui.$
        , transfer = layui.transfer
        , util = layui.util
        , element = layui.element; //元素操作   

 

    // 按钮事件
    util.event('lay-demo', {
        getChecked: function () {
            var checkedData = layuiTree.getChecked('clazz-tree'); //获取选中节点的数据

            layer.alert(JSON.stringify(checkedData), {shade: 0});
        }
        , setChecked: function () {

            allSelect(database)
            layuiTree.reload('clazz-tree', {
                data: database
            });
        }
        , setUnChecked: function () {
            allUnSelect(database)
            layuiTree.reload('clazz-tree', {
                data: database
            });
        }
        , setReverseChecked: function () {
            reverseChecked(database)
            layuiTree.reload('clazz-tree', {
                data: database
            });
        }
        , reload: function () {
            //重载实例
            layuiTree.reload('clazz-tree', {});

        }
    });
    // 全选
    function allSelect(database) {
        $.each(database, function (index, item) {
            item.checked = true;
            if (item.children.length) {
                $.each(item.children, function (index2, item2) {
                    if (!item2.checked) {
                        item2.checked = true;
                    }
                })
            }

        })
    }
    //全不选
    function allUnSelect(database) {

        $.each(database, function (index, item) {
            item.checked = false;
            if (item.children.length) {
                $.each(item.children, function (index2, item2) {
                    if (item2.checked) {
                        item2.checked = false;
                    }
                })
            }
        })
    }
    //反选
    function reverseChecked(database) {
        var checkedData = layuiTree.getChecked('clazz-tree'); //获取选中节点的数据
        // let allElement = getId(database);
        let selectElement = getId(checkedData);
        if (selectElement.length) {
            $.each(database, function (index, item) {
                $.each(item.children, function (index2, item2) {
                    if (selectElement.includes(item2.id)) {
                        item2.checked = false;
                    } else {
                        item2.checked = true;
                    }
                })
            })
        } else {
            allUnSelect(database);
        }
        // console.log(allElement, '数据')
        // console.log(getId(checkedData), '选中数据')
    }
    // y用来递归筛选id
    function getId(data) {
        let myArmy = [];

        $.each(data, function (index, item) {
            if (item.children.length) {
                $.each(item.children, function (index2, item2) {
                    myArmy.push(item2.id)
                })
            }
        })
        return myArmy;
    }

3、后台接收前端数据 

用Json接收传来的数据再转化,建个工具类。

/**
 * @author HuangZheng
 * @Date 2020/6/16 16:12
 */
@Data
public class Tree {
    @Desc("id")
    private Integer id;

    @Desc("中文名")
    private String title;

    @Desc("是否选中")
    private boolean checked;

    @Desc("是否折叠")
    private boolean spread;

    @Desc("子项")
    private List<Tree> children = new ArrayList<>();
}
package com.alibaba.fastjson;

List<Tree> array = JSONArray.parseArray(ruleClasses, Tree.class);
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
以下是HTML中实现全选的代码示例: 1. 全选效果 ```html <!DOCTYPE html> <html> <head> <title>全选</title> <script type="text/javascript"> function selectAll(){ var checkboxes = document.getElementsByName("fruit"); for(var i=0; i<checkboxes.length; i++){ checkboxes[i].checked = true; } } </script> </head> <body> <h3>水果列表</h3> <form> <input type="checkbox" name="fruit" value="apple">苹果<br> <input type="checkbox" name="fruit" value="banana">香蕉<br> <input type="checkbox" name="fruit" value="orange">橙子<br> <input type="checkbox" name="fruit" value="pear">梨子<br> <input type="button" value="全选" onclick="selectAll()"> </form> </body> </html> ``` 2. 效果 ```html <!DOCTYPE html> <html> <head> <title></title> <script type="text/javascript"> function unselectAll(){ var checkboxes = document.getElementsByName("fruit"); for(var i=0; i<checkboxes.length; i++){ checkboxes[i].checked = false; } } </script> </head> <body> <h3>水果列表</h3> <form> <input type="checkbox" name="fruit" value="apple">苹果<br> <input type="checkbox" name="fruit" value="banana">香蕉<br> <input type="checkbox" name="fruit" value="orange">橙子<br> <input type="checkbox" name="fruit" value="pear">梨子<br> <input type="button" value="" onclick="unselectAll()"> </form> </body> </html> ``` 3. 效果 ```html <!DOCTYPE html> <html> <head> <title></title> <script type="text/javascript"> function reverseSelect(){ var checkboxes = document.getElementsByName("fruit"); for(var i=0; i<checkboxes.length; i++){ checkboxes[i].checked = !checkboxes[i].checked; } } </script> </head> <body> <h3>水果列表</h3> <form> <input type="checkbox" name="fruit" value="apple">苹果<br> <input type="checkbox" name="fruit" value="banana">香蕉<br> <input type="checkbox" name="fruit" value="orange">橙子<br> <input type="checkbox" name="fruit" value="pear">梨子<br> <input type="button" value="" onclick="reverseSelect()"> </form> </body> </html> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方天士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值