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

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

 

1.23 数据表格table

    注意:根据使用上的经验,建议不要把数据表格做为服务端分页的”前端复杂界面设计”的解决方案。当对数据表格进行自定义定制时,由于Layui框架中table模块可定制性不良的原因,也就是过度封装,有可能在复杂界面的实现上并不是太方便,还得自己添加javascript和css代码,建议使用普通table表格结合自写代码来实现分页,这样的高度可定制性能解决全部的界面设计及业务需求。当前端界面不需要自定义定制时,比如不需要更改对齐属性,不需要对td中的内容进行复杂的逻辑处理等情况,并且想快速实现分页效果时,数据表格还是首选的解决方案,完全可以胜任此类简单性的工作。

table模块是layui 2.0版本中全新推出的,是layui最核心的组成之一,涵盖了日常业务所涉及的几乎全部需求。支持固定表头、固定行、固定列左/列右,支持拖拽改变列宽度,支持排序,支持多级表头,支持单元格的自定义模板,支持对表格重载(比如搜索、条件筛选等),支持复选框,支持分页,支持单元格编辑等等一些系列功能。table模块是layui重点维护的项目之一。

模块加载名称:table。

1.23.1 快速使用

创建一个table实例最简单的方式是在页面放置一个元素:

<table id="demo"></table>

然后通过table.render()方法指定该容器。

 

    文件new.html代码如下:

{

    "code": 0,

    "msg": "",

    "count": 1000,

    "data": [{

       "id": 10000,

       "username": "user-0",

       "sex": "",

       "city": "城市-0",

       "sign": "签名-0",

       "experience": 255,

       "logins": 24,

       "wealth": 82830700,

       "classify": "作家",

       "score": 57

    }, {

       "id": 10001,

       "username": "user-1",

       "sex": "",

       "city": "城市-1",

       "sign": "签名-1",

       "experience": 884,

        "logins": 58,

        "wealth": 64928690,

       "classify": "词人",

       "score": 27

    }, {

       "id": 10002,

       "username": "user-2",

       "sex": "",

       "city": "城市-2",

       "sign": "签名-2",

       "experience": 650,

       "logins": 77,

       "wealth": 6298078,

        "classify": "酱油",

       "score": 31

    }, {

       "id": 10003,

       "username": "user-3",

        "sex": "",

       "city": "城市-3",

       "sign": "签名-3",

       "experience": 362,

       "logins": 157,

       "wealth": 37117017,

       "classify": "诗人",

       "score": 68

    }, {

       "id": 10004,

       "username": "user-4",

       "sex": "",

        "city": "城市-4",

       "sign": "签名-4",

       "experience": 807,

       "logins": 51,

       "wealth": 76263262,

       "classify": "作家",

       "score": 6

    }, {

        "id": 10005,

       "username": "user-5",

       "sex": "",

       "city": "城市-5",

       "sign": "签名-5",

       "experience": 173,

       "logins": 68,

       "wealth": 60344147,

       "classify": "作家",

       "score": 87

    }, {

       "id": 10006,

       "username": "user-6",

       "sex": "",

        "city": "城市-6",

       "sign": "签名-6",

       "experience": 982,

       "logins": 37,

       "wealth": 57768166,

       "classify": "作家",

       "score": 34

    }, {

       "id": 10007,

       "username": "user-7",

       "sex": "",

       "city": "城市-7",

       "sign": "签名-7",

       "experience": 727,

       "logins": 150,

       "wealth": 82030578,

       "classify": "作家",

       "score": 28

    }, {

       "id": 10008,

       "username": "user-8",

       "sex": "",

       "city": "城市-8",

       "sign": "签名-8",

       "experience": 951,

       "logins": 133,

       "wealth": 16503371,

       "classify": "词人",

       "score": 14

    }, {

       "id": 10009,

        "username": "user-9",

       "sex": "",

       "city": "城市-9",

       "sign": "签名-9",

       "experience": 484,

        "logins": 25,

        "wealth": 86801934,

       "classify": "词人",

       "score": 75

    }, {

       "id": 10010,

       "username": "user-10",

       "sex": "",

       "city": "城市-10",

       "sign": "签名-10",

       "experience": 1016,

       "logins": 182,

       "wealth": 71294671,

       "classify": "诗人",

       "score": 34

    }, {

       "id": 10011,

       "username": "user-11",

       "sex": "",

       "city": "城市-11",

        "sign": "签名-11",

       "experience": 492,

       "logins": 107,

        "wealth": 8062783,

       "classify": "诗人",

       "score": 6

    }, {

       "id": 10012,

       "username": "user-12",

       "sex": "",

       "city": "城市-12",

       "sign": "签名-12",

       "experience": 106,

       "logins": 176,

        "wealth": 42622704,

       "classify": "词人",

       "score": 54

    }, {

       "id": 10013,

       "username": "user-13",

       "sex": "",

       "city": "城市-13",

       "sign": "签名-13",

       "experience": 1047,

       "logins": 94,

       "wealth": 59508583,

       "classify": "诗人",

       "score": 63

    }, {

       "id": 10014,

       "username": "user-14",

       "sex": "",

       "city": "城市-14",

       "sign": "签名-14",

       "experience": 873,

       "logins": 116,

        "wealth": 72549912,

       "classify": "词人",

       "score": 8

    }, {

       "id": 10015,

       "username": "user-15",

       "sex": "",

       "city": "城市-15",

        "sign": "签名-15",

       "experience": 1068,

       "logins": 27,

       "wealth": 52737025,

       "classify": "作家",

       "score": 28

    }, {

       "id": 10016,

       "username": "user-16",

       "sex": "",

       "city": "城市-16",

       "sign": "签名-16",

       "experience": 862,

       "logins": 168,

       "wealth": 37069775,

       "classify": "酱油",

       "score": 86

    }, {

       "id": 10017,

       "username": "user-17",

       "sex": "",

       "city": "城市-17",

       "sign": "签名-17",

       "experience": 1060,

        "logins": 187,

       "wealth": 66099525,

       "classify": "作家",

       "score": 69

    }, {

       "id": 10018,

       "username": "user-18",

       "sex": "",

       "city": "城市-18",

       "sign": "签名-18",

       "experience": 866,

       "logins": 88,

       "wealth": 81722326,

       "classify": "词人",

       "score": 74

    }, {

       "id": 10019,

       "username": "user-19",

       "sex": "",

       "city": "城市-19",

        "sign": "签名-19",

       "experience": 682,

       "logins": 106,

       "wealth": 68647362,

       "classify": "词人",

       "score": 51

    }, {

       "id": 10020,

       "username": "user-20",

       "sex": "",

       "city": "城市-20",

       "sign": "签名-20",

       "experience": 770,

       "logins": 24,

       "wealth": 92420248,

       "classify": "诗人",

       "score": 87

    }, {

       "id": 10021,

       "username": "user-21",

       "sex": "",

       "city": "城市-21",

       "sign": "签名-21",

       "experience": 184,

       "logins": 131,

       "wealth": 71566045,

       "classify": "词人",

       "score": 99

    }, {

       "id": 10022,

       "username": "user-22",

       "sex": "",

       "city": "城市-22",

       "sign": "签名-22",

       "experience": 739,

       "logins": 152,

       "wealth": 60907929,

       "classify": "作家",

       "score": 18

    }, {

        "id": 10023,

        "username": "user-23",

       "sex": "",

       "city": "城市-23",

       "sign": "签名-23",

        "experience": 127,

       "logins": 82,

       "wealth": 14765943,

       "classify": "作家",

       "score": 30

    }, {

       "id": 10024,

       "username": "user-24",

        "sex": "",

        "city": "城市-24",

       "sign": "签名-24",

       "experience": 212,

       "logins": 133,

       "wealth": 59011052,

       "classify": "词人",

       "score": 76

    }, {

       "id": 10025,

       "username": "user-25",

       "sex": "",

       "city": "城市-25",

       "sign": "签名-25",

       "experience": 938,

       "logins": 182,

       "wealth": 91183097,

       "classify": "作家",

       "score": 69

    }, {

       "id": 10026,

       "username": "user-26",

       "sex": "",

       "city": "城市-26",

       "sign": "签名-26",

       "experience": 978,

       "logins": 7,

       "wealth": 48008413,

       "classify": "作家",

       "score": 65

    }, {

       "id": 10027,

       "username": "user-27",

        "sex": "",

       "city": "城市-27",

       "sign": "签名-27",

       "experience": 371,

       "logins": 44,

       "wealth": 64419691,

       "classify": "诗人",

       "score": 60

    }, {

       "id": 10028,

       "username": "user-28",

       "sex": "",

       "city": "城市-28",

        "sign": "签名-28",

       "experience": 977,

       "logins": 21,

       "wealth": 75935022,

       "classify": "作家",

       "score": 37

    }, {

       "id": 10029,

       "username": "user-29",

       "sex": "",

       "city": "城市-29",

        "sign": "签名-29",

       "experience": 647,

       "logins": 107,

       "wealth": 97450636,

       "classify": "酱油",

       "score": 27

    }]

}

 

    运行文件代码如下:

<!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, //开启分页

              height: 300,

              cols: [

                  [ //表头

                      {

                         field: 'id',

                         title: 'ID',

                         width: 80,

                         sort: true,

                         fixed: 'left'

                     }, {

                         field: 'username',

                         title: '用户名',

                         width: 80

                     }, {

                         field: 'sex',

                         title: '性别',

                          width: 80,

                         sort: true

                      }, {

                         field: 'city',

                         title: '城市',

                         width: 80

                     }, {

                         field: 'sign',

                         title: '签名',

                         width: 177

                     }, {

                         field: 'experience',

                         title: '积分',

                         width: 80,

                         sort: true

                      }, {

                         field: 'score',

                         title: '评分',

                         width: 80,

                         sort: true

                     }, {

                         field: 'classify',

                         title: '职业',

                         width: 80

                     }, {

                         field: 'wealth',

                         title: '财富',

                         width: 135,

                         sort: true

                      }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

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

 

1.23.2 三种初始化渲染方式

table模块做了三种初始化的支持,可按照个人喜好和实际情况灵活使用,如图1-xx所示。

 

1.23.2.1 方法渲染

“方法渲染”是将基础参数的设置放在了JS代码中,且原始的table标签只需要一个选择器。

 

    文件new.html测试代码如下:

{

    "code": 0,

    "msg": "",

    "count": 1000,

    "data": [{

       "id": 10000,

       "username": "username1",

        "password": "password1"

    },

    {

       "id": 20000,

       "username": "username2",

       "password": "password2"

    },

    {

       "id": 30000,

       "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, //开启分页

              cols: [

                  [ //表头

                     {

                         field: 'id',

                         title: 'ID',

                         width: 200,

                         sort: true,

                         fixed: 'left'

                     }, {

                          field: 'username',

                         title: '账号',

                         width: 200

                     }, {

                          field: 'password',

                         title: '账号',

                         width: 200,

                         sort: true

                     }

                  ]

              ]

           });

       </script>

    </body>

</html>

 

elem值类型String/DOM,指定原始table容器的选择器或DOM对象,是方法渲染方式的必填项。

cols值类型Array,设置表头,值是一个二维数组,是方法渲染方式的必填项。

 

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

 

推荐采用“方法渲染”,其最大的优势在于可以脱离HTML文件而专注于JS本身,尤其对于项目的频繁改动及发布,其便捷性会体现得更为明显。

table.render()方法返回一个table对象:

var tableObject = table.render(options);

可用于对当前表格进行“重加载reload”等操作,关于“重加载reload”请参看后面的章节。

1.23.2.2 自动渲染

所谓的自动渲染是在一段table容器中配置好相应的参数,由table模块内部自动对其完成渲染,而无需写初始的渲染方法。

需要关注的是以下三点:

(1)带有class="layui-table"的<table>标签。

(2)对标签设置属性lay-data="",用于配置一些基础参数。

(3)在<th>标签中设置属性lay-data=""用于配置表头信息。

按照上述的规范写好table原始容器后,只要加载了layui的table模块,就会自动对其建立动态的数据表格。

 

    文件new.html代码如下:

{

    "code": 0,

    "msg": "",

    "count": 4,

    "data": [{

       "id": 10000,

       "username": "username1",

       "password": "password1"

    },

    {

       "id": 20000,

       "username": "username2",

       "password": "password2"

    },

    {

       "id": 30000,

        "username": "username3",

        "password": "password3"

    },

    {

       "id": 40000,

       "username": "username4",

        "password": "password4"

    }

    ]

}

 

    运行文件代码如下:

<!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" />

 

    </head>

    <body>

       <table class="layui-table" lay-data="{url:'new.html', page:true, id:'test'}" lay-filter="test">

           <thead>

              <tr>

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

                  <th lay-data="{field:'username', width:200}">账号</th>

                  <th lay-data="{field:'password', width:200}">密码</th>

              </tr>

           </thead>

       </table>

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

        <script>

           var table = layui.table;

       </script>

    </body>

</html>

 

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

 

1.23.2.3 转换静态表格

假设页面已经存在有内容的表格,它由原始的table标签组成,这时需要赋予它一些扩展的属性,比如拖拽调整列宽,比如排序等等功能,那么同样可以很轻松地去产生数据表格。

 

    测试代码如下:

<!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" />

 

    </head>

    <body>

       <table lay-filter="test">

           <thead>

               <tr>

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

                  <th lay-data="{field:'username', width:200}">账号</th>

                  <th lay-data="{field:'password', width:200}">密码</th>

              </tr>

           </thead>

           <tr>

              <td>1</td>

              <td>username1</td>

              <td>password1</td>

           </tr>

           <tr>

              <td>2</td>

              <td>username2</td>

              <td>password2</td>

           </tr>

           <tr>

               <td>3</td>

               <td>username3</td>

              <td>password3</td>

           </tr>

           <tr>

              <td>4</td>

              <td>username4</td>

              <td>password4</td>

           </tr>

           <tr>

              <td>5</td>

              <td>username5</td>

              <td>password5</td>

           </tr>

       </table>

       <input type="button" value="setTableTheme" id="setTableTheme">

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

       <script>

           $(document).ready(function() {

               $("#setTableTheme").click(function() {

                  var table = layui.table;

                  //转换静态表格

                  table.init('test', {});

              });

           });

       </script>

    </body>

</html>

 

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值