《layui宇宙版教程》:数据表格table-4

《Layui宇宙版教程》提供2000人的QQ群进行交流学习,QQ群号:1046961650,或通过手机QQ扫描二维码进入:

 

1.23.5 cols表头参数一览表

cols表头参数如图1-xx所示。

 

1.23.5.1 width

width值类型Number/String。设定列宽,若不填写则自动分配;若填写,则支持值为:数字、百分比

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                         width: 500

                     }, {

                         field: 'password',

                         title: '账号',

                         width: "5%"

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

 

1.23.5.2 minWidth

minWidth值类型Number。局部定义当前常规单元格的最小宽度(默认:60),一般用于列宽自动分配的情况。其优先级高于基础参数中的cellMinWidth。

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                         minWidth: 500

                     }, {

                         field: 'password',

                         title: '账号'

                     }

                  ]

               ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

 

1.23.5.3 type

type值类型String,设定列类型,可选值有:

(1)normal(常规列,无需设定)

(2)checkbox(复选框列)

(3)radio(单选框列)

(4)numbers(序号列)

(5)space(空列)

1.23.5.3.1 checkbox

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

        <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

               page: true, //开启分页

               cols: [

                  [ //表头

                     {

                         field: '',

                         title: '',

                         type: "checkbox"

                     },

                     {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                          minWidth: 500

                      }, {

                         field: 'password',

                         title: '账号'

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

1.23.5.3.2 radio

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

        <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              cols: [

                  [ //表头

                     {

                         field: '',

                         title: '',

                         type: "radio"

                     },

                      {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                         minWidth: 500

                     }, {

                         field: 'password',

                         title: '账号'

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

    运行效果如图1-xx所示。

1.23.5.3.3 numbers

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              cols: [

                  [ //表头

                     {

                         field: '',

                         title: '',

                         type: "numbers"

                     },

                     {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                         minWidth: 500

                     }, {

                         field: 'password',

                         title: '账号'

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

    运行效果如图1-xx所示。

 

1.23.5.3.4 space

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              cols: [

                  [ //表头

                     {

                         field: '',

                         title: '',

                         type: "space",

                          width: 100

                     },

                     {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                         minWidth: 500

                      }, {

                         field: 'password',

                         title: '账号'

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

    运行效果如图1-xx所示。

 

1.23.5.4 LAY_CHECKED

LAY_CHECKED值类型Boolean。是否全选状态(默认:false)。必须复选框列开启后才有效,如果设置true,则表示复选框默认全部选中。

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

        <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

               page: true, //开启分页

               cols: [

                  [ //表头

                     {

                         field: '',

                         title: '',

                         type: "checkbox",

                         LAY_CHECKED: true

                     },

                     {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                         minWidth: 500

                     }, {

                         field: 'password',

                         title: '账号'

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

 

1.23.5.5 fixed

fixed值类型String。固定列,可选值有:left(固定在左)、right(固定在右)。一旦设定,对应的列将会被固定在左或右,不随滚动条而滚动。

注意:如果是固定在左,该列必须放在表头最前面;如果是固定在右,该列必须放在表头最后面。

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              cols: [

                  [ //表头

                      {

                         field: 'id',

                         title: 'ID',

                         fixed: "left"

                     }, {

                         field: 'username',

                         title: '账号',

                         minWidth: 500

                     }, {

                         field: 'password',

                         title: '密码',

                         fixed: "right"

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

1.23.5.6 hide

hide值类型Boolean。是否初始隐藏列,默认:false。

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                         fixed: "left",

                         hide: true

                     }, {

                         field: 'username',

                         title: '账号',

                         minWidth: 500

                     }, {

                         field: 'password',

                         title: '密码',

                         fixed: "right"

                      }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

1.23.5.7 totalRow

totalRow值类型Boolean/Object。是否开启该列的自动合计功能,默认:false。

当开启时,则默认由前端自动合计当前行数据。若接口直接返回了合计行数据,则优先读取接口合计行数据,格式如下:

{

  "code": 0,

  "msg": "",

  "count": 1000,

  "data": [{}, {}]

  "totalRow": {

    "score": "666"

    ,"experience": "999"

  }

}

在totalRow中返回所需统计的列字段名和值即可。

另外,totalRow字段同样可以通过parseData回调来解析成为table组件所规定的数据格式。

 

    文件new.html代码如下:

{

    "code": 0,

    "msg": "",

    "count": 1000,

    "data": [{

           "id": 1,

           "username": "username1",

           "password": "password1"

       },

       {

           "id": 2,

           "username": "username2",

           "password": "password2"

       },

       {

           "id": 3,

           "username": "username3",

           "password": "password3"

       }

    ],

    "totalRow": {

       "id": "8888888"

    }

}

   

运行测试文件代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

               page: true, //开启分页

              totalRow: true,

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                     }, {

                         field: 'password',

                         title: '密码',

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

 

1.23.5.8 totalRowText

totalRowText值类型String。用于显示自定义的合计文本。

 

    文件new.html代码如下:

{

    "code": 0,

    "msg": "",

    "count": 1000,

    "data": [{

           "id": 1,

           "username": "username1",

           "password": "password1"

       },

       {

           "id": 2,

           "username": "username2",

           "password": "password2"

       },

       {

           "id": 3,

           "username": "username3",

           "password": "password3"

       }

    ]

}

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              totalRow: true,

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                         totalRowText: "999999999"

                     }, {

                         field: 'username',

                         title: '账号',

                     }, {

                         field: 'password',

                         title: '密码',

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

1.23.5.9 sort

sort值类型Boolean。是否允许排序(默认:false)。如果设置true,则在对应的表头显示排序icon,从而对列开启排序功能。

注意:不推荐对值同时存在“数字和普通字符”的列开启排序,因为会进入字典序比对。比如:'贤心' > '2' > '100',排序后可能并不是想要的结果。

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

        <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              totalRow: true,

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                         sort: true

                     }, {

                         field: 'username',

                         title: '账号',

                      }, {

                         field: 'password',

                         title: '密码',

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

1.23.5.10 unresize

unresize值类型Boolean。是否禁用拖拽列宽(默认:false)。默认情况下会根据列类型(type)来决定是否禁用,如复选框列,会自动禁用。而其它普通列,默认允许拖拽列宽,当然也可以设置true来禁用该功能。

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

               elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              totalRow: true,

              cols: [

                  [ //表头

                     {

                          field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                         unresize: true

                     }, {

                         field: 'password',

                         title: '密码',

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

1.23.5.11 edit

edit值类型String。单元格编辑类型(默认不开启)目前只支持:text(输入框)。

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              totalRow: true,

              cols: [

                  [ //表头

                      {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                         edit: "text"

                     }, {

                         field: 'password',

                         title: '密码',

                      }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

1.23.5.12 event

event值类型String。自定义单元格点击事件名,以便在tool事件中完成对该单元格的业务处理。

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              totalRow: true,

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                         event: "clickUsername",

 

                     }, {

                         field: 'password',

                         title: '密码',

                     }

                  ]

               ]

           });

 

 

           //监听工具条

           table.on('tool(test)', function(obj) { //注:tool是工具条事件名,testtable原始容器的属性lay-filter="对应的值"

              var data = obj.data; //获得当前行数据

              var layEvent = obj.event; //获得lay-event对应的值(也可以是表头的event参数对应的值)

              var tr = obj.tr; //获得当前行trDOM对象(如果有的话)

 

              if (layEvent === 'clickUsername') { //查看

                  alert('点击username列了!');

              }

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

1.23.5.13 style

style值类型String。自定义单元格样式。即传入CSS样式

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

               totalRow: true,

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                     }, {

                         field: 'username',

                         title: '账号',

                         style: "color:red;font-size:30px",

                     }, {

                         field: 'password',

                         title: '密码',

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

1.23.5.14 align

align值类型String。单元格排列方式,可选值有:left(默认)、center(居中)、right(居右)。

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              totalRow: true,

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                         align: "left",

                     }, {

                         field: 'username',

                         title: '账号',

                         align: "center",

                     }, {

                         field: 'password',

                         title: '密码',

                         align: "right",

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

1.23.5.15 colspan和rowspan

colspan值类型Number。单元格所占列数(默认:1)。一般用于多级表头

rowspan值类型Number。单元格所占行数(默认:1)。一般用于多级表头

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

               page: true, //开启分页

              totalRow: true,

              cols: [

                  [ //标题栏

                     {

                         field: 'username',

                         title: '联系人',

                         rowspan: 2

                     } //rowspan即纵向跨越的单元格数

                     , {

                         field: 'phone',

                         title: '电话',

                          rowspan: 2

                     }, {

                         align: 'center',

                         title: '地址',

                         colspan: 3

                     } //colspan即横跨的单元格数,这种情况下不用设置fieldwidth

                  ],

                  [{

                     field: 'province',

                     title: '',

                  }, {

                     field: 'city',

                     title: '',

                  }, {

                      field: 'county',

                     title: '详细',

                  }]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

1.23.5.16 templet

templet值类型String,默认值无。自定义列模板,模板遵循laytpl语法。在默认情况下,单元格的内容是完全按照数据接口返回的content原样输出的,如果想对某列的单元格添加链接等其它元素,可以借助该参数来轻松实现,这是一个非常实用且强大的功能,表格内容会因此而丰富多样。

templet提供了三种使用方式,请结合实际场景选择最合适的一种:

(1)如果自定义模版的字符量太大,推荐采用【方式一】;

(2)如果自定义模板的字符量适中,或者想更方便地调用外部方法,推荐采用【方式二】;

(3)如果自定义模板的字符量很小,推荐采用【方式三】;

1.23.5.16.1 方式一:绑定模版选择器

    示例代码如下:

table.render({

  cols: [[

    {field:'title', title: '文章标题', width: 200, templet: '#titleTpl'} //这里的templet值是模板元素的选择器

    ,{field:'id', title:'ID', width:100}

  ]]

});

 

等价于:

<th lay-data="{field:'title', width: 200, templet: '#titleTpl'}">文章标题</th>

<th lay-data="{field:'id', width:100}">ID</th>

 

下述是templet对应的模板,它可以存放在页面的任意位置。模板遵循于laytpl语法,可读取到返回的所有数据,示例代码如下:

<script type="text/html" id="titleTpl">

  <a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a>

</script>

 

注意:上述的{{d.id}}、{{d.title}}是动态内容,它对应数据接口返回的字段名。除此之外,还可以读取到以下额外字段:序号{{d.LAY_INDEX}}。

   由于模板遵循laytpl语法(建议细读laytpl文档),因此在模板中可以写任意脚本语句(如if else/for等),示例代码如下:

<script type="text/html" id="titleTpl">

  {{#  if(d.id < 100){ }}

    <a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a>

  {{#  } else { }}

    {{d.title}}(普通用户)

  {{#  } }}

</script>

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

 

       <script>

           function editPassword(userId){

             alert(userId);

           }

       </script>

 

       <script type="text/html" id="titleTpl_1">

           <a href="/editUserinfo/{{d.id}}" class="layui-table-link">编辑{{d.id}}</a>

           <a href="/deleteUserinfo/{{d.id}}" class="layui-table-link">删除{{d.id}}</a>

       </script>

 

       <script type="text/html" id="titleTpl_2">

           {{# if (d.username=='username1'){ }}

           <span style="red:red">我是span</span>

           {{# } }}

           {{# if (d.username=='username2'){ }}

           <input type="button" value="我是button"/>

           {{# } }}

           {{# if (d.username=='username3'){ }}

           <input type="text" value="我是text"/>

           {{# } }}

       </script>

 

       <script type="text/html" id="titleTpl_3">

           <a href="javascript:editPassword({{d.id}})" class="layui-table-link">{{d.id}}</a>

       </script>

 

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                         templet: '#titleTpl_1'

                     }, {

                         field: 'username',

                         title: '账号',

                         templet: '#titleTpl_2'

                     }, {

                         field: 'password',

                         title: '账号',

                         templet: '#titleTpl_3'

                     }

                  ]

              ]

           });

        </script>

    </body>

</html>

 

运行效果如图1-xx所示。

 

1.23.5.16.2 方式二:函数转义

templet支持函数形式,函数返回一个参数d,包含接口返回的所有字段和数据,示例代码如下:

table.render({

  cols: [[

    {field:'title', title: '文章标题', width: 200

      ,templet: function(d){

        return 'ID:'+ d.id +',标题:<span style="color: #c00;">'+ d.title +'</span>'

      }

    }

    ,{field:'id', title:'ID', width:100}

  ]]

});

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

 

       <script>

           function editPassword(userId) {

              alert(userId);

           }

       </script>

 

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                         width: 200 //需要加此属性,不然出现bug,显示出下拉框。

                     }, {

                         field: 'username',

                         title: '账号',

                     }, {

                         field: 'password',

                         title: '账号',

                         templet: function(d) {

                             return "<input type='text' value='" + d.password + "'/>";

                         }

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

 

1.23.5.16.3 方式三:直接赋值模版字符

事实上,templet也可以直接是一段html内容,示例代码如下:

    templet: '<div><a href="/detail/{{d.id}}" class="layui-table-link">{{d.title}}</a></div>'

注意:这里一定要被一层<div></div>包裹,否则无法读取到模板。

测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

       <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

 

       <script>

           function editPassword(userId) {

              alert(userId);

           }

       </script>

 

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                         width: 200

                     }, {

                         field: 'username',

                         title: '账号',

                     }, {

                         field: 'password',

                         title: '账号',

                         templet: "<div><span style='color:blue'>{{d.password}}</span></div>"

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

 

1.23.5.17 toolbar

类型:String,默认值无。toolbar值类型String绑定工具条模板,可以在每行对应的列中出现一些自定义的操作性按钮。

如果需要在表格的每一行加上“查看”、“编辑”、“删除”这样类似的操作按钮,tool参数就是为此而生,因此可以非常便捷地实现各种操作功能。tool参数和templet参数的使用方式完全类似,通常接受的是一个选择器,也可以是一段HTML字符,示例代码如下:

table.render({

  cols: [[

    {field:'id', title:'ID', width:100}

    ,{fixed: 'right', width:150, align:'center', toolbar: '#barDemo'} //这里的toolbar值是模板元素的选择器

  ]]

});

 

等价于:

<th lay-data="{field:'id', width:100}">ID</th>

<th lay-data="{fixed: 'right', width:150, align:'center', toolbar: '#barDemo'}"></th>

 

下述是toolbar对应的模板,它可以存放在页面的任意位置:

<script type="text/html" id="barDemo">

  <a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>

  <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>

  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>

      <!-- 这里同样支持 laytpl 语法,如: -->

      {{# if(d.auth > 2){ }}

      <a class="layui-btn layui-btn-xs" lay-event="check">审核</a>

      {{# } }}

</script>

 

注意:lay-event=""属性值是模板的关键所在,值可随意定义。

 

接下来可以借助table模块的工具条事件完成不同的操作功能:

//监听工具条

table.on('tool(test)', function(obj) {

    //注:tool是工具条事件名,testtable原始容器的属性lay-filter="对应的值"

    var data = obj.data; //获得当前行数据

    var layEvent = obj.event; //获得lay-event对应的值(也可以是表头的event参数对应的值)

    var tr = obj.tr; //获得当前行trDOM对象(如果有的话)

 

    if (layEvent === 'detail') { //查看

       //do somehing

    } else if (layEvent === 'del') { //删除

       layer.confirm('真的删除行么', function(index) {

           obj.del(); //删除对应行(tr)的DOM结构,并更新缓存

           layer.close(index);

           //向服务端发送删除指令

       });

    } else if (layEvent === 'edit') { //编辑

       //do something

 

       //同步更新缓存对应的值

       obj.update({

           username: '123',

           title: 'xxx'

        });

    }

});

 

    右上角自定义按钮配置代码如下

    table.render({ //其它参数在此省略     

       defaultToolbar: ['filter', 'print', 'exports', {

           title: '提示', //标题

           layEvent: 'LAYTABLE_TIPS', //事件名,用于toolbar事件中使用

           icon: 'layui-icon-tips' //图标类名

       }]

    });

 

    测试代码如下:

<!DOCTYPE html>

<html>

    <head>

       <meta charset="utf-8">

       <title></title>

       <script src="js/jquery3.5.1.js"></script>

       <link rel="stylesheet" href="layui/css/layui.css" />

        <script src="layui/layui.all.js"></script>

    </head>

    <body>

       <table id="demo" lay-filter="test"></table>

 

       <script type="text/html" id="barDemo">

           <a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>

           <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>

           <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>

       </script>

 

       <script>

           var table = layui.table;

           //第一个实例

           table.render({

              elem: '#demo',

              url: 'new.html', //数据接口

              page: true, //开启分页

              toolbar: true,

              defaultToolbar: ['filter', 'print', 'exports', {

                  title: '我是自定义按钮', //标题

                  layEvent: 'myevent', //事件名,用于toolbar事件中使用

                  icon: 'layui-icon-tips' //图标类名

              }],

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                         width: 200

                     }, {

                         field: 'username',

                         title: '账号',

                      }, {

                         field: 'password',

                         title: '账号',

                         toolbar: '#barDemo'

                     }

                  ]

              ]

           });

 

           //监听工具条

           table.on('toolbar(test)', function(obj) {

              var layEvent = obj.event;

              if (layEvent === 'myevent') {

                  alert("自定义事件myevent");

              }

           });

 

           //监听工具条

           table.on('tool(test)', function(obj) { //注:tool 是工具条事件名,test table 原始容器的属性 lay-filter="对应的值"

              var data = obj.data; //获得当前行数据

              var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)

              var tr = obj.tr; //获得当前行 tr DOM 对象(如果有的话)

 

              if (layEvent === 'detail') { //查看

                  alert("查看" + data.id);

              } else if (layEvent === 'del') { //删除

                  layer.confirm('真的删除记录' + data.id + "吗?", function(index) {

                     obj.del(); //删除对应行(tr)的DOM结构,并更新缓存

                     layer.close(index);

                     //向服务端发送删除指令

                  });

              } else if (layEvent === 'edit') { //编辑

                  alert("编辑" + data.id);

                  //同步更新缓存对应的值

                  obj.update({

                     username: 'xxxxxxxxxxx'

                  });

              }

           });

       </script>

    </body>

</html>

 

运行效果如图1-xx所示。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值