layui扩展二级表头

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>layui</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link href="~/Lib/layui/css/layui.css" rel="stylesheet" />
    <!-- 注意:如果你直接复制所有代码到本地,上述css路径需要改成你本地的 -->
</head>
<body>
    <table class="layui-table" id="tableOut" lay-filter="tableOut"></table>

    <script src="~/Lib/layui/layui.js"></script>
    <!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
    <script>
        layui.use(['jquery', 'laydate', 'util', 'layer', 'table', 'form'], function ($, laydate, util, layer, table, form) {
            var tableData = [[1, '小明', 16], [2, '小红', 18]];

            // 假释真的需要默认点击搜索在下面table render过之后再调用$dom.click()即可
            //监听工具条
            table.on('tool(tableOut)', function (obj) { //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
                var data = obj.data; //获得当前行数据
                var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
                // 异常不要用它原来的这个作为tr的dom
                // var tr = obj.tr; //获得当前行 tr 的DOM对象
                var $this = $(this);
                var tr = $this.parents('tr');
                var trIndex = tr.data('index');
                if (layEvent === 'detail') { //查看
                    //do somehing
                    console.log(data);
                } else if (layEvent === 'del') { //删除
                    layer.confirm('真的删除行么', function (index) {
                        obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
                        layer.close(index);
                        //向服务端发送删除指令
                    });
                } else if (layEvent === 'edit') { //编辑
                    //do something

                    //同步更新缓存对应的值
                    obj.update({
                        name: '123'
                        , title: 'xxx'
                    });
                } else if (layEvent === 'addRowTable') {
                    // 外围的table的id + tableIn_ + 当前的tr的data-index
                    $(this).attr('lay-event', 'fold').html('-');
                    var tableId = 'tableOut_tableIn_' + trIndex;
                    var _html = [
                        '<tr class="table-item">',
                        '<td colspan="' + tr.find('td').length + '" style="padding: 6px 12px;">',
                        '<table id="' + tableId + '"></table>',
                        '</td>',
                        '</tr>'
                    ];
                    tr.after(_html.join('\n'));
                    // 渲染table
                    table.render({
                        elem: '#' + tableId,
                        data: data.friend || [],
                        cols: [[
                            { field: 'id', title: 'ID' },
                            { field: 'name', title: '朋友姓名' },
                            { field: 'age', title: '年龄' }
                        ]],

                    });
                    // $(window).resize();

                } else if (layEvent === 'fold') {
                    $(this).attr('lay-event', 'addRowTable').html('+');
                    tr.next().remove();
                }
            });
            var tableIns = table.render({
                elem: '#tableOut',
                // data: [[1, '小明', 16],[2, '小红', 18]],
                data: [
                    {
                        id: 1, name: '小米', age: '16',
                        friend: [{ id: 2, name: '大米', age: '28' }, { id: 5, name: '小虎', age: '16' }]
                    },
                    {
                        id: 2, name: '大米', age: '28',
                        friend: [{ id: 1, name: '小米', age: '28' }]
                    },
                    { id: 3, name: '小花', age: 0 },
                    { id: 4, name: '小甲', age: '28' },
                    { id: 5, name: '小虎', age: '16' },
                    { id: 6, name: '小贤', age: '28' }],
                page: {},
                cols: [[
                    // {type: 'number', fixed: true},
                    // {field: 'checkbox', type: 'checkbox', LAY_CHECKED:false, fixed: true},
                    {
                        field: 'btn',
                        width: 50,
                        align: 'center',
                        templet: function (d) {
                            return '<a style="width: 100%; height: 100%;cursor: pointer;" lay-event="addRowTable">+</a>'
                        }
                    },
                    { field: 'id', title: 'ID', sort: true },
                    { field: 'name', title: '名称', edit: true },
                    { field: 'age', title: '年龄', sort: true }
                ]],

            });
            table.on('sort(tableOut)', function (obj) { //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
                //尽管我们的 table 自带排序功能,但并没有请求服务端。
                //有些时候,你可能需要根据当前排序的字段,重新向服务端发送请求,从而实现服务端排序,如:
                table.reload('tableOut', {
                    initSort: obj //记录初始排序,如果不设的话,将无法标记表头的排序状态。 layui 2.1.1 新增参数
                    , where: { //请求参数(注意:这里面的参数可任意定义,并非下面固定的格式)
                        field: obj.field //排序字段
                        , order: obj.type //排序方式
                    }
                });
            });
            table.on('edit(tableOut)', function (obj) { //注:edit是固定事件名,test是table原始容器的属性 lay-filter="对应的值"
                // debugger;
                // this;
                console.log(obj.value); //得到修改后的值
                console.log(obj.field); //当前编辑的字段名
                console.log(obj.data); //所在行的所有相关数据
            });
        });
    </script>
</body>
</html>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
layui 中,可以通过 `cols` 参数来设置表格的列配置,包括表头和数据列的配置。在 `cols` 中,可以通过嵌套对象来实现多级表头的配置。 下面是一个示例代码: ```javascript layui.use(['table'], function(){ var table = layui.table; table.render({ elem: '#test', cols: [ [ {field: 'id', rowspan: 2, title: 'ID'}, {field: 'username', rowspan: 2, title: '用户名'}, {field: 'sex', rowspan: 2, title: '性别'}, {title: '联系方式', colspan: 2}, {title: '其它信息', colspan: 3} ], [ {field: 'email', title: '邮箱'}, {field: 'phone', title: '手机'}, {field: 'address', title: '地址'}, {field: 'ip', title: 'IP'}, {field: 'remark', title: '备注'} ] ], data: [ {id: 1, username: '张三', sex: '男', email: '[email protected]', phone: '13812345678', address: '北京市', ip: '192.168.1.1', remark: '无'}, {id: 2, username: '李四', sex: '女', email: '[email protected]', phone: '13987654321', address: '上海市', ip: '192.168.1.2', remark: '无'} ] }); }); ``` 在上面的代码中,通过 `cols` 参数设置了一个多级表头,包括两行表头和五列数据列。其中,第一行表头包括了三个单元格和两个多列单元格,第二行表头包括了五个单元格。 在单元格的配置中,可以通过 `rowspan` 和 `colspan` 属性来设置单元格所占的行数和列数。如果一个单元格同时设置了 `rowspan` 和 `colspan`,则它将会占据多行多列。 除了多级表头之外,还可以通过 `fixed` 属性来设置固定列和固定表头。具体的用法可以参考 layui 的官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值