• Layui快速入门之第七节 表格


    目录

    一:基本用法

    基本案例:

    二:静态表格

    三:模板配置渲染

    四:静态表格转换

    五:已知数据渲染

    六:自定义模板

    API

    渲染


    一:基本用法

                表格组件 table 是 Layui 中使用率极高的一个组件,它以表格的承载方式对数据进行渲染、重载、排序、统计、分页等等一系列交互操作,并提供了丰富的 API 用于扩展,基本涵盖了日常业务所涉及的大部分需求

    基本案例:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>table 组件综合演示 - Layuititle>
    6. <meta name="renderer" content="webkit">
    7. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    8. <meta name="viewport" content="width=device-width, initial-scale=1">
    9. <link href="/cdn.staticfile.org/layui/2.8.0/css/layui.css" rel="stylesheet">
    10. head>
    11. <body>
    12. <div style="padding: 16px;">
    13. <table class="layui-hide" id="test" lay-filter="test">table>
    14. div>
    15. <script type="text/html" id="toolbarDemo">
    16. <div class="layui-btn-container">
    17. <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据button>
    18. <button class="layui-btn layui-btn-sm" lay-event="getData">获取当前页数据button>
    19. <button class="layui-btn layui-btn-sm" id="dropdownButton">
    20. 下拉按钮
    21. <i class="layui-icon layui-icon-down layui-font-12">i>
    22. button>
    23. <button class="layui-btn layui-btn-sm layui-bg-blue" id="reloadTest">
    24. 重载测试
    25. <i class="layui-icon layui-icon-down layui-font-12">i>
    26. button>
    27. <button class="layui-btn layui-btn-sm layui-btn-primary" id="rowMode">
    28. <span>{{= d.lineStyle ? '多行' : '单行' }}模式span>
    29. <i class="layui-icon layui-icon-down layui-font-12">i>
    30. button>
    31. div>
    32. script>
    33. <script type="text/html" id="cityTpl">
    34. <select id="demoCity1" class="layui-border" lay-ignore>
    35. <option value="浙江杭州">浙江杭州option>
    36. <option value="江西南昌">江西南昌option>
    37. <option value="湖北武汉">湖北武汉option>
    38. <option value="湖南长沙">湖南长沙option>
    39. select>
    40. script>
    41. <script type="text/html" id="barDemo">
    42. <div class="layui-clear-space">
    43. <a class="layui-btn layui-btn-xs" lay-event="edit">编辑a>
    44. <a class="layui-btn layui-btn-xs" lay-event="more">
    45. 更多
    46. <i class="layui-icon layui-icon-down">i>
    47. a>
    48. div>
    49. script>
    50. <script src="/cdn.staticfile.org/layui/2.8.0/layui.js">script>
    51. <script>
    52. layui.use(['table', 'dropdown'], function(){
    53. var table = layui.table;
    54. var dropdown = layui.dropdown;
    55. // 创建渲染实例
    56. table.render({
    57. elem: '#test'
    58. ,url:'/static/json/table/demo1.json' // 此处为静态模拟数据,实际使用时需换成真实接口
    59. ,toolbar: '#toolbarDemo'
    60. ,defaultToolbar: ['filter', 'exports', 'print', {
    61. title: '提示'
    62. ,layEvent: 'LAYTABLE_TIPS'
    63. ,icon: 'layui-icon-tips'
    64. }]
    65. ,height: 'full-35' // 最大高度减去其他容器已占有的高度差
    66. ,css: [ // 重设当前表格样式
    67. '.layui-table-tool-temp{padding-right: 145px;}'
    68. ].join('')
    69. ,cellMinWidth: 80
    70. ,totalRow: true // 开启合计行
    71. ,page: true
    72. ,cols: [[
    73. {type: 'checkbox', fixed: 'left'}
    74. ,{field:'id', fixed: 'left', width:80, title: 'ID', sort: true, totalRowText: '合计:'}
    75. ,{field:'username', width:80, title: '用户'}
    76. ,{field:'email', title:'邮箱 ', fieldTitle: '邮箱', hide: 0, width:150, edit: 'text'}
    77. ,{field:'sex', width:80, title: '性别', sort: true}
    78. ,{field:'city', width:115, title: '城市', minWidth:115, templet: '#cityTpl', exportTemplet: function(d, obj){
    79. // console.log(obj)
    80. // 处理该字段的导出数据
    81. var td = obj.td(this.field); // 获取当前 td
    82. return td.find('select').val();
    83. }}
    84. ,{field:'sign', title: '签名', edit: 'textarea', minWidth: 260, style: '-moz-box-align: start;', totalRow: '人物:唐代:{{= d.TOTAL_ROW.era.tang }} 宋代:{{= d.TOTAL_ROW.era.song }} 现代:{{= d.TOTAL_ROW.era.xian }}'}
    85. ,{field:'experience', width: 100, title: '积分', sort: true, totalRow: '{{= d.TOTAL_NUMS }} 😊'}
    86. ,{field:'checkin', title:'打卡', width: 100, sort: true, totalRow: '{{= parseInt(d.TOTAL_NUMS) }} 次'}
    87. ,{field:'ip', title:'IP', width: 120}
    88. ,{field:'joinTime', title:'加入时间', width: 120}
    89. ,{fixed: 'right', title:'操作', width: 134, minWidth: 125, toolbar: '#barDemo'}
    90. ]]
    91. ,done: function(){
    92. var id = this.id;
    93. // 下拉按钮测试
    94. dropdown.render({
    95. elem: '#dropdownButton' // 可绑定在任意元素中,此处以上述按钮为例
    96. ,data: [{
    97. id: 'add',
    98. title: '添加'
    99. },{
    100. id: 'update',
    101. title: '编辑'
    102. },{
    103. id: 'delete',
    104. title: '删除'
    105. }]
    106. // 菜单被点击的事件
    107. ,click: function(obj){
    108. var checkStatus = table.checkStatus(id)
    109. var data = checkStatus.data; // 获取选中的数据
    110. switch(obj.id){
    111. case 'add':
    112. layer.open({
    113. title: '添加',
    114. type: 1,
    115. area: ['80%','80%'],
    116. content: '
      自定义表单元素
      '
    117. });
    118. break;
    119. case 'update':
    120. if(data.length !== 1) return layer.msg('请选择一行');
    121. layer.open({
    122. title: '编辑',
    123. type: 1,
    124. area: ['80%','80%'],
    125. content: '
      自定义表单元素
      '
    126. });
    127. break;
    128. case 'delete':
    129. if(data.length === 0){
    130. return layer.msg('请选择一行');
    131. }
    132. layer.msg('delete event');
    133. break;
    134. }
    135. }
    136. });
    137. // 重载测试
    138. dropdown.render({
    139. elem: '#reloadTest' // 可绑定在任意元素中,此处以上述按钮为例
    140. ,data: [{
    141. id: 'reload',
    142. title: '重载'
    143. },{
    144. id: 'reload-deep',
    145. title: '重载 - 参数叠加'
    146. },{
    147. id: 'reloadData',
    148. title: '仅重载数据'
    149. },{
    150. id: 'reloadData-deep',
    151. title: '仅重载数据 - 参数叠加'
    152. }]
    153. // 菜单被点击的事件
    154. ,click: function(obj){
    155. switch(obj.id){
    156. case 'reload':
    157. // 重载 - 默认(参数重置)
    158. table.reload('test', {
    159. where: {
    160. abc: '123456'
    161. //,test: '新的 test2'
    162. //,token: '新的 token2'
    163. }
    164. /*
    165. ,cols: [[ // 重置表头
    166. {type: 'checkbox', fixed: 'left'}
    167. ,{field:'id', title:'ID', width:80, fixed: 'left', unresize: true, sort: true, totalRowText: '合计:'}
    168. ,{field:'sex', title:'性别', width:80, edit: 'text', sort: true}
    169. ,{field:'experience', title:'积分', width:80, sort: true, totalRow: true, templet: '
      {{= d.experience }} 分
      '}
    170. ,{field:'logins', title:'登入次数', width:100, sort: true, totalRow: true}
    171. ,{field:'joinTime', title:'加入时间', width:120}
    172. ]]
    173. */
    174. });
    175. break;
    176. case 'reload-deep':
    177. // 重载 - 深度(参数叠加)
    178. table.reload('test', {
    179. where: {
    180. abc: 123
    181. ,test: '新的 test1'
    182. }
    183. //,defaultToolbar: ['print'] // 重载头部工具栏右侧图标
    184. //,cols: ins1.config.cols
    185. }, true);
    186. break;
    187. case 'reloadData':
    188. // 数据重载 - 参数重置
    189. table.reloadData('test', {
    190. where: {
    191. abc: '123456'
    192. //,test: '新的 test2'
    193. //,token: '新的 token2'
    194. }
    195. ,scrollPos: 'fixed' // 保持滚动条位置不变 - v2.7.3 新增
    196. ,height: 2000 // 测试无效参数(即与数据无关的参数设置无效,此处以 height 设置无效为例)
    197. //,url: '404'
    198. //,page: {curr: 1, limit: 30} // 重新指向分页
    199. });
    200. break;
    201. case 'reloadData-deep':
    202. // 数据重载 - 参数叠加
    203. table.reloadData('test', {
    204. where: {
    205. abc: 123
    206. ,test: '新的 test1'
    207. }
    208. }, true);
    209. break;
    210. }
    211. layer.msg('可观察 Network 请求参数的变化');
    212. }
    213. });
    214. // 行模式
    215. dropdown.render({
    216. elem: '#rowMode'
    217. ,data: [{
    218. id: 'default-row',
    219. title: '单行模式(默认)'
    220. },{
    221. id: 'multi-row',
    222. title: '多行模式'
    223. }]
    224. // 菜单被点击的事件
    225. ,click: function(obj){
    226. var checkStatus = table.checkStatus(id)
    227. var data = checkStatus.data; // 获取选中的数据
    228. switch(obj.id){
    229. case 'default-row':
    230. table.reload('test', {
    231. lineStyle: null // 恢复单行
    232. });
    233. layer.msg('已设为单行');
    234. break;
    235. case 'multi-row':
    236. table.reload('test', {
    237. // 设置行样式,此处以设置多行高度为例。若为单行,则没必要设置改参数 - 注:v2.7.0 新增
    238. lineStyle: 'height: 95px;'
    239. });
    240. layer.msg('即通过设置 lineStyle 参数可开启多行');
    241. break;
    242. }
    243. }
    244. });
    245. }
    246. ,error: function(res, msg){
    247. console.log(res, msg)
    248. }
    249. });
    250. // 工具栏事件
    251. table.on('toolbar(test)', function(obj){
    252. var id = obj.config.id;
    253. var checkStatus = table.checkStatus(id);
    254. var othis = lay(this);
    255. switch(obj.event){
    256. case 'getCheckData':
    257. var data = checkStatus.data;
    258. layer.alert(layui.util.escape(JSON.stringify(data)));
    259. break;
    260. case 'getData':
    261. var getData = table.getData(id);
    262. console.log(getData);
    263. layer.alert(layui.util.escape(JSON.stringify(getData)));
    264. break;
    265. case 'LAYTABLE_TIPS':
    266. layer.alert('自定义工具栏图标按钮');
    267. break;
    268. };
    269. });
    270. // 触发单元格工具事件
    271. table.on('tool(test)', function(obj){ // 双击 toolDouble
    272. var data = obj.data; // 获得当前行数据
    273. // console.log(obj)
    274. if(obj.event === 'edit'){
    275. layer.open({
    276. title: '编辑 - id:'+ data.id,
    277. type: 1,
    278. area: ['80%','80%'],
    279. content: '
      自定义表单元素
      '
    280. });
    281. } else if(obj.event === 'more'){
    282. // 更多 - 下拉菜单
    283. dropdown.render({
    284. elem: this, // 触发事件的 DOM 对象
    285. show: true, // 外部事件触发即显示
    286. data: [{
    287. title: '查看',
    288. id: 'detail'
    289. },{
    290. title: '删除',
    291. id: 'del'
    292. }],
    293. click: function(menudata){
    294. if(menudata.id === 'detail'){
    295. layer.msg('查看操作,当前行 ID:'+ data.id);
    296. } else if(menudata.id === 'del'){
    297. layer.confirm('真的删除行 [id: '+ data.id +'] 么', function(index){
    298. obj.del(); // 删除对应行(tr)的DOM结构
    299. layer.close(index);
    300. // 向服务端发送删除指令
    301. });
    302. }
    303. },
    304. align: 'right', // 右对齐弹出
    305. style: 'box-shadow: 1px 1px 10px rgb(0 0 0 / 12%);' // 设置额外样式
    306. })
    307. }
    308. });
    309. // 触发表格复选框选择
    310. table.on('checkbox(test)', function(obj){
    311. console.log(obj)
    312. });
    313. // 触发表格单选框选择
    314. table.on('radio(test)', function(obj){
    315. console.log(obj)
    316. });
    317. // 行单击事件
    318. table.on('row(test)', function(obj){
    319. //console.log(obj);
    320. //layer.closeAll('tips');
    321. });
    322. // 行双击事件
    323. table.on('rowDouble(test)', function(obj){
    324. console.log(obj);
    325. });
    326. // 单元格编辑事件
    327. table.on('edit(test)', function(obj){
    328. var field = obj.field; // 得到字段
    329. var value = obj.value; // 得到修改后的值
    330. var data = obj.data; // 得到所在行所有键值
    331. // 值的校验
    332. if(field === 'email'){
    333. if(!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(obj.value)){
    334. layer.tips('输入的邮箱格式不正确,请重新编辑', this, {tips: 1});
    335. return obj.reedit(); // 重新编辑 -- v2.8.0 新增
    336. }
    337. }
    338. // 编辑后续操作,如提交更新请求,以完成真实的数据更新
    339. // …
    340. layer.msg('编辑成功', {icon: 1});
    341. // 其他更新操作
    342. var update = {};
    343. update[field] = value;
    344. obj.update(update);
    345. });
    346. });
    347. script>
    348. body>
    349. html>

    二:静态表格

                 静态表格是指内容已经存在于页面中的 

     元素,且可通过一些特定属性设定不同风格   

    1. <p>默认风格:p>
    2. <table class="layui-table">
    3. <colgroup>
    4. <col width="150">
    5. <col width="150">
    6. <col>
    7. colgroup>
    8. <thead>
    9. <tr>
    10. <th>人物th>
    11. <th>民族th>
    12. <th>格言th>
    13. tr>
    14. thead>
    15. <tbody>
    16. <tr>
    17. <td>孔子td>
    18. <td>华夏td>
    19. <td>有朋至远方来,不亦乐乎td>
    20. tr>
    21. <tr>
    22. <td>孟子td>
    23. <td>华夏td>
    24. <td>穷则独善其身,达则兼济天下td>
    25. tr>
    26. tbody>
    27. table>
    28. <p>行边框表格:p>
    29. <table class="layui-table" lay-skin="line">
    30. <colgroup>
    31. <col width="150">
    32. <col width="150">
    33. <col>
    34. colgroup>
    35. <thead>
    36. <tr>
    37. <th>人物th>
    38. <th>民族th>
    39. <th>格言th>
    40. tr>
    41. thead>
    42. <tbody>
    43. <tr>
    44. <td>孔子td>
    45. <td>华夏td>
    46. <td>有朋至远方来,不亦乐乎td>
    47. tr>
    48. <tr>
    49. <td>孟子td>
    50. <td>华夏td>
    51. <td>穷则独善其身,达则兼济天下td>
    52. tr>
    53. tbody>
    54. table>
    55. <p>列边框表格:p>
    56. <table class="layui-table" lay-skin="row">
    57. <colgroup>
    58. <col width="150">
    59. <col width="150">
    60. <col>
    61. colgroup>
    62. <thead>
    63. <tr>
    64. <th>人物th>
    65. <th>民族th>
    66. <th>格言th>
    67. tr>
    68. thead>
    69. <tbody>
    70. <tr>
    71. <td>孔子td>
    72. <td>华夏td>
    73. <td>有朋至远方来,不亦乐乎td>
    74. tr>
    75. <tr>
    76. <td>孟子td>
    77. <td>华夏td>
    78. <td>穷则独善其身,达则兼济天下td>
    79. tr>
    80. tbody>
    81. table>
    82. <p>无边框表格:p>
    83. <table class="layui-table" lay-skin="nob">
    84. <colgroup>
    85. <col width="150">
    86. <col width="150">
    87. <col>
    88. colgroup>
    89. <thead>
    90. <tr>
    91. <th>人物th>
    92. <th>民族th>
    93. <th>格言th>
    94. tr>
    95. thead>
    96. <tbody>
    97. <tr>
    98. <td>孔子td>
    99. <td>华夏td>
    100. <td>有朋至远方来,不亦乐乎td>
    101. tr>
    102. <tr>
    103. <td>孟子td>
    104. <td>华夏td>
    105. <td>穷则独善其身,达则兼济天下td>
    106. tr>
    107. tbody>
    108. table>
    109. <p>小尺寸表格:p>
    110. <table class="layui-table" lay-size="sm">
    111. <colgroup>
    112. <col width="150">
    113. <col width="150">
    114. <col>
    115. colgroup>
    116. <thead>
    117. <tr>
    118. <th>人物th>
    119. <th>民族th>
    120. <th>格言th>
    121. tr>
    122. thead>
    123. <tbody>
    124. <tr>
    125. <td>孔子td>
    126. <td>华夏td>
    127. <td>有朋至远方来,不亦乐乎td>
    128. tr>
    129. <tr>
    130. <td>孟子td>
    131. <td>华夏td>
    132. <td>穷则独善其身,达则兼济天下td>
    133. tr>
    134. tbody>
    135. table>
    136. <p>大尺寸表格:p>
    137. <table class="layui-table" lay-size="lg">
    138. <colgroup>
    139. <col width="150">
    140. <col width="150">
    141. <col>
    142. colgroup>
    143. <thead>
    144. <tr>
    145. <th>人物th>
    146. <th>民族th>
    147. <th>格言th>
    148. tr>
    149. thead>
    150. <tbody>
    151. <tr>
    152. <td>孔子td>
    153. <td>华夏td>
    154. <td>有朋至远方来,不亦乐乎td>
    155. tr>
    156. <tr>
    157. <td>孟子td>
    158. <td>华夏td>
    159. <td>穷则独善其身,达则兼济天下td>
    160. tr>
    161. tbody>
    162. table>
    163. <p>开启偶数行背景色:p>
    164. <table class="layui-table" lay-even>
    165. <colgroup>
    166. <col width="150">
    167. <col width="150">
    168. <col>
    169. colgroup>
    170. <thead>
    171. <tr>
    172. <th>人物th>
    173. <th>民族th>
    174. <th>格言th>
    175. tr>
    176. thead>
    177. <tbody>
    178. <tr>
    179. <td>孔子td>
    180. <td>华夏td>
    181. <td>有朋至远方来,不亦乐乎td>
    182. tr>
    183. <tr>
    184. <td>孟子td>
    185. <td>华夏td>
    186. <td>穷则独善其身,达则兼济天下td>
    187. tr>
    188. <tr>
    189. <td>庄子td>
    190. <td>华夏td>
    191. <td>朴素而天下莫能与之争美td>
    192. tr>
    193. tbody>
    194. table>

    三:模板配置渲染

    1. <table class="layui-table" lay-data="{height:315, url:'/static/json/table/user.json', page:true}" id="ID-table-demo-init">
    2. <thead>
    3. <tr>
    4. <th lay-data="{field:'id', width:80, sort: true}">IDth>
    5. <th lay-data="{field:'username', width:80}">用户名th>
    6. <th lay-data="{field:'sex', width:80, sort: true}">性别th>
    7. <th lay-data="{field:'city'}">城市th>
    8. <th lay-data="{field:'sign'}">签名th>
    9. <th lay-data="{field:'experience', sort: true}">积分th>
    10. <th lay-data="{field:'score', sort: true}">评分th>
    11. <th lay-data="{field:'classify'}">职业th>
    12. tr>
    13. thead>
    14. table>

    四:静态表格转换

    1. <div class="layui-btn-container">
    2. <button class="layui-btn" lay-on="parseTable">转换为数据表格button>
    3. div>
    4. <table lay-filter="parse-table-demo">
    5. <thead>
    6. <tr>
    7. <th lay-data="{field:'name', width:150}">人物th>
    8. <th lay-data="{field:'nation', width:150}">民族th>
    9. <th lay-data="{field:'maxim', minWidth: 180}">格言th>
    10. tr>
    11. thead>
    12. <tbody>
    13. <tr>
    14. <td>孔子td>
    15. <td>华夏td>
    16. <td>有朋至远方来,不亦乐乎td>
    17. tr>
    18. <tr>
    19. <td>孟子td>
    20. <td>华夏td>
    21. <td>穷则独善其身,达则兼济天下td>
    22. tr>
    23. <tr>
    24. <td>庄子td>
    25. <td>华夏td>
    26. <td>朴素而天下莫能与之争美td>
    27. tr>
    28. tbody>
    29. table>
    30. <script>
    31. layui.use(function(){
    32. var table = layui.table;
    33. var util = layui.util;
    34. // 事件
    35. util.on('lay-on', {
    36. parseTable: function(){
    37. // 转化静态表格
    38. table.init('parse-table-demo', {
    39. // height: ''
    40. });
    41. }
    42. });
    43. });
    44. script>

    五:已知数据渲染

    1. <table class="layui-hide" id="ID-table-demo-data">table>
    2. <script>
    3. layui.use('table', function(){
    4. var table = layui.table;
    5. // 已知数据渲染
    6. var inst = table.render({
    7. elem: '#ID-table-demo-data'
    8. ,cols: [[ //标题栏
    9. {field: 'id', title: 'ID', width: 80, sort: true}
    10. ,{field: 'username', title: '用户', width: 120}
    11. ,{field: 'sign', title: '签名', minWidth: 160}
    12. ,{field: 'sex', title: '性别', width: 80}
    13. ,{field: 'city', title: '城市', width: 100}
    14. ,{field: 'experience', title: '积分', width: 80, sort: true}
    15. ]]
    16. ,data: [{ // 赋值已知数据
    17. "id": "10001"
    18. ,"username": "张三1"
    19. ,"sex": "男"
    20. ,"city": "浙江杭州"
    21. ,"sign": "人生恰似一场修行"
    22. ,"experience": "116"
    23. }, {
    24. "id": "10002"
    25. ,"username": "张三2"
    26. ,"sex": "男"
    27. ,"city": "浙江杭州"
    28. ,"sign": "人生恰似一场修行"
    29. ,"experience": "12"
    30. ,"LAY_CHECKED": true
    31. }, {
    32. "id": "10003"
    33. ,"username": "张三3"
    34. ,"sex": "男"
    35. ,"city": "浙江杭州"
    36. ,"sign": "人生恰似一场修行"
    37. ,"experience": "65"
    38. }, {
    39. "id": "10004"
    40. ,"username": "张三4"
    41. ,"sex": "男"
    42. ,"city": "浙江杭州"
    43. ,"sign": "人生恰似一场修行"
    44. ,"experience": "777"
    45. }, {
    46. "id": "10005"
    47. ,"username": "张三5"
    48. ,"sex": "男"
    49. ,"city": "浙江杭州"
    50. ,"sign": "人生恰似一场修行"
    51. ,"experience": "86"
    52. }, {
    53. "id": "10006"
    54. ,"username": "张三6"
    55. ,"sex": "男"
    56. ,"city": "浙江杭州"
    57. ,"sign": "人生恰似一场修行"
    58. ,"experience": "12"
    59. }, {
    60. "id": "10007"
    61. ,"username": "张三7"
    62. ,"sex": "男"
    63. ,"city": "浙江杭州"
    64. ,"sign": "人生恰似一场修行"
    65. ,"experience": "16"
    66. }, {
    67. "id": "10008"
    68. ,"username": "张三8"
    69. ,"sex": "男"
    70. ,"city": "浙江杭州"
    71. ,"sign": "人生恰似一场修行"
    72. ,"experience": "106"
    73. }]
    74. //,skin: 'line' // 表格风格
    75. //,even: true
    76. ,page: true // 是否显示分页
    77. ,limits: [5, 10, 15]
    78. ,limit: 5 // 每页默认显示的数量
    79. });
    80. });
    81. script>

    六:自定义模板

    1. <table class="layui-hide" id="ID-table-demo-templet">table>
    2. <script type="text/html" id="ID-table-demo-templet-user">
    3. <a href="table.html" target="_blank">{{= d.username }}a>
    4. script>
    5. <script type="text/html" id="ID-table-demo-templet-switch">
    6. <input type="checkbox" name="status" value="{{= d.id }}" title="热|" lay-skin="switch" lay-filter="demo-templet-status" {{= d.id == 10001 ? "checked" : "" }}>
    7. script>
    8. <script type="text/html" id="ID-table-demo-templet-other">
    9. <span class="layui-badge-rim" style="margin-right: 10px;">评分:{{= d.score }}span>
    10. <span class="layui-badge-rim">职业:{{= d.classify }}span>
    11. script>
    12. <script>
    13. layui.use(['table'], function(){
    14. var table = layui.table;
    15. var form = layui.form;
    16. // 创建渲染实例
    17. table.render({
    18. elem: '#ID-table-demo-templet'
    19. ,url:'/static/json/table/user.json' // 此处为静态模拟数据,实际使用时需换成真实接口
    20. ,page: true
    21. ,height: '315px'
    22. ,cols: [[
    23. {type: 'checkbox', fixed: 'left'}
    24. // 未自定义模板的普通列
    25. ,{field:'id', fixed: 'left', width:80, title: 'ID', sort: true}
    26. // 模板 - 选择器写法
    27. ,{field:'username', width:80, title: '用户', templet: '#ID-table-demo-templet-user'}
    28. // 模板 - 函数写法
    29. ,{field:'sex', width:60, title: '性别', templet: function(d){
    30. if(d.sex === '男'){
    31. return '';
    32. } else {
    33. return '';
    34. }
    35. }}
    36. // 模板 - 普通字符写法
    37. ,{field:'city', width:115, title: '城市', templet: '
      {{= d.city }}
      '
      }
    38. // 模板中可包含任意字段、任意内容(如表单等)
    39. ,{title: '状态', width:85, templet: '#ID-table-demo-templet-switch'}
    40. ,{title: '其他', minWidth:200, templet: '#ID-table-demo-templet-other'}
    41. ]]
    42. });
    43. // 状态 - 开关操作
    44. form.on('switch(demo-templet-status)', function(obj){
    45. var id = this.value;
    46. var name = this.name;
    47. layer.tips(id + ' ' + name + ': '+ obj.elem.checked, obj.othis);
    48. });
    49. });
    50. script>

    七:自定义样式

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>table 自定义样式 - Layuititle>
    6. <meta name="renderer" content="webkit">
    7. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    8. <meta name="viewport" content="width=device-width, initial-scale=1">
    9. <link href="/cdn.staticfile.org/layui/2.8.0/css/layui.css" rel="stylesheet">
    10. <style>
    11. /* 自定义样式 */
    12. .layui-table-testcss .layui-table-header,
    13. .layui-table-testcss thead tr{background-color: #F8FCF9; color: #16BAAA}
    14. .layui-form-testcss > div{margin-bottom: 6px;}
    15. style>
    16. head>
    17. <body>
    18. <div style="padding: 16px;">
    19. <table class="layui-hide" id="ID-table-demo-css">table>
    20. div>
    21. <script type="text/html" id="ID-table-demo-css-user">
    22. <ul>
    23. <li><strong>ID:strong> {{= d.id }} li>
    24. <li><strong>用户:strong> {{= d.username }} li>
    25. <li><strong>性别:strong> {{= d.sex }} li>
    26. <li><strong>城市:strong> {{= d.city }} li>
    27. ul>
    28. script>
    29. <script type="text/html" id="ID-table-demo-css-tool">
    30. <div class="layui-form layui-form-testcss">
    31. <div class="layui-input-wrap">
    32. <input name="AAA" value="{{= d.AAA || '' }}" lay-affix="clear" placeholder="表单 1" class="layui-input" >
    33. div>
    34. <div class="layui-input-wrap">
    35. <input name="BBB" value="{{= d.BBB || '' }}" lay-affix="clear" placeholder="表单 2" class="layui-input" >
    36. div>
    37. <div>
    38. <button class="layui-btn layui-btn-fluid" lay-submit lay-filter="demo-css-submit">确认button>
    39. div>
    40. div>
    41. script>
    42. <script src="/cdn.staticfile.org/layui/2.8.0/layui.js">script>
    43. <script>
    44. layui.use(['table'], function(){
    45. var table = layui.table;
    46. var form = layui.form;
    47. // 创建渲染实例
    48. table.render({
    49. elem: '#ID-table-demo-css'
    50. ,url:'/static/json/table/demo1.json' // 此处为静态模拟数据,实际使用时需换成真实接口
    51. ,page: true
    52. ,height: 'full-35'
    53. ,lineStyle: 'height: 151px;' // 定义表格的多行样式
    54. ,css: [ // 直接给当前表格主容器重置 css 样式
    55. '.layui-table-page{text-align: center;}' // 让分页栏居中
    56. ].join('')
    57. ,className: 'layui-table-testcss' // 用于给表格主容器追加 css 类名
    58. ,cols: [[
    59. {field:'username', width:160, title: '用户', templet: '#ID-table-demo-css-user'}
    60. // 设置单元格样式
    61. ,{field:'sign', minWidth:100, title: '签名', style:'color: #000;'}
    62. ,{width:160, title: '操作', templet: '#ID-table-demo-css-tool'}
    63. ]]
    64. });
    65. // 表单提交
    66. form.on('submit(demo-css-submit)', function(data){
    67. var field = data.field; // 获取表单字段值
    68. // 显示填写结果,仅作演示用
    69. layer.alert(JSON.stringify(field), {
    70. title: '当前填写的字段值'
    71. });
    72. // 此处可执行 Ajax 等操作
    73. // …
    74. return false; // 阻止默认 form 跳转
    75. });
    76. });
    77. script>
    78. body>
    79. html>

    API

    API描述
    var table = layui.table获得 table 模块。
    table.render(options)table 组件渲染,核心方法。
    table.init(filter, options)初始化渲染静态表格。
    table.reload(id, options, deep)表格完整重载。
    table.reloadData(id, options, deep) 2.7+表格数据重载。
    table.checkStatus(id)获取选中行相关数据。
    table.setRowChecked(id, opts) 2.8+设置行选中状态。
    table.getData(id)获取当前页所有行表格数据。
    table.cache获取表格缓存数据集(包含特定字段)。
    table.resize(id)重置表格尺寸。
    table.exportFile(id, data, opts)导出表格数据到本地文件。
    table.getOptions(id) 2.8+获取表格实例配置项。
    table.hideCol(id, cols) 2.8+设置表格列的显示隐藏属性。
    table.on('event(filter)', callback)table 相关事件。

    渲染

    table 提供了以下三种渲染模式,在实际使用时,一般按情况选择其中一种即可。

    渲染方式描述
    方法配置渲染通过 table 组件提供的核心方法 table.render(options) 完成的渲染。推荐
    模板配置渲染通过  标签的 lay-options="{}" 属性定义模板,组件自动对其进行解析并完成渲染。
    静态表格渲染对一段已经包含数据内容的静态表格进行动态化转换,使其具备 table 组件的相关功能。
  • 相关阅读:
    Spring Cloud根据服务名获取服务的ip端口
    苹果或挖走Meta AR公关总监,2022年的头显是真的要来了?
    Qemu 启动无法交互的处理方法
    提高篇(三):交互设计与用户输入:打造更具互动性的Processing作品
    MySQL 8.0 架构 之 慢查询日志(Slow query log)(2)流程图:查询记录到慢查询日志中的条件
    在OpenCloudOS 上安装.NET 6
    LeetCode 1624. 两个相同字符之间的最长子字符串
    redis 技术分享
    汇编经典程序——将一个字节数据以十六进制形式显示
    CodeTalker 踩坑实录
  • 原文地址:https://blog.csdn.net/qq_61313896/article/details/132875170