LayUI之table数据表格获取行、行高亮等相关操作
文章内容大纲 (右击展开→→)
内容预览:
- 我相信在后续的LayUI版本更新中,作者应该会着重优化数据表格,因为作为...~
- 操作说明 现在转入我们今天要说的数据...~
- 具体参考: 点击此处直达 但是,如果说没有checkbox,没有行内工具...~
前言
目前LayUI数据表格既美观有不乏一些实用功能。基本上表格应有的操作已经具备,LayUI作者【贤心】肯定是煞费苦心去优化,此处致敬。但是实话实话,如果单纯那数据表格功能来说,EasUI的数据表格更能更加强大、更加灵活,怎奈于丑的没法说,当然可以美化,但是成本太高了。我相信在后续的LayUI版本更新中,作者应该会着重优化数据表格,因为作为一个前端框架,美观度、效率相关、导航相关、数据展现相关无疑是最重要的。
操作说明
现在转入我们今天要说的数据表格相关操作。目前LayUI数据表格获取行数据的方式有如下方式(个人理解有限,不全之后望提醒):
- 表头加入checkbox列,用户选择一行或者多行数据后通过
1 var checkStatus = table.checkStatus('表格唯一ID值');
2 var data = checkStatus.data;
获取到相关行数据,其中 data 就是当前选中行的数据对象集合。具体参考: 点击此处直达
但是,如果说没有checkbox,没有行内工具条等设置,就一个常规表格,例如:
目标
- 要做到双击某一个单元格触发获取整行数据操作
- 能够根据相关条件进行数据筛选、进行高亮显示
- 能够获取某一个单元格数据
- 能够动态隐藏指定列(实际作用可能不大,因为隐藏数据的话直接在定义
cols时不定义即可,LayUI的table数据对象还是会指向你服务端返回的数据,即:你服务端返回哪些字段,table数据容器会原封保留,只是你不在cols定义的话不进行展示,但是数据还是有的),但是有时候可能也需要动态隐藏吧,所以保留了该功能
相关实现
-
表格数据 点击此处直达 然后下载或者复制其内容自行新建文件即可。
-
JS实现
新建JavaScript文件,例如新建一个《DataTableExtend.js》的文件,代码如下:
1 var LayUIDataTable = (function () {
2 var rowData = {};
3 var $;
4
5 function checkJquery () {
6 if (!$) {
7 console.log("未获取jquery对象,请检查是否在调用ConvertDataTable方法之前调用SetJqueryObj进行设置!")
8 return false;
9 } else return true;
10 }
11
12 /**
13 * 转换数据表格。
14 * @param callback 双击行的回调函数,该回调函数返回三个参数,分别为:当前点击行的索引值、当前点击单元格的值、当前行数据
15 * @returns 返回当前数据表当前页的所有行数据。数据结构:<br/>
16 * [
17 * {字段名称1:}
18 * ,{字段名称2:}
19 * ]
20 * @constructor
21 */
22 function ConvertDataTable (callback) {
23 if (!checkJquery()) return;
24 var dataList = [];
25 var rowData = {};
26 var trArr = $(".layui-table-body.layui-table-main tr");// 行数据
27 if (!trArr || trArr.length == 0) {
28 console.log("未获取到相关行数据,请检查数据表格是否渲染完毕!");
29 return;
30 }
31 $.each(trArr, function (index, trObj) {
32 var currentClickRowIndex;
33 var currentClickCellValue;
34
35 $(trObj).dblclick(function (e) {
36 var returnData = {};
37 var currentClickRow = $(e.currentTarget);
38 currentClickRowIndex = currentClickRow.data("index");
39 currentClickCellValue = e.target.innerHTML
40 $.each(dataList[currentClickRowIndex], function (key, obj) {
41 returnData[key] = obj.value;
42 });
43 callback(currentClickRowIndex, currentClickCellValue, returnData);
44 });
45 var tdArrObj = $(trObj).find('td');
46 rowData = {};
47 // 每行的单元格数据
48 $.each(tdArrObj, function (index_1, tdObj) {
49 var td_field = $(tdObj).data("field");
50 rowData[td_field] = {};
51 rowData[td_field]["value"] = $($(tdObj).html()).html();
52 rowData[td_field]["cell"] = $(tdObj);
53 rowData[td_field]["row"] = $(trObj);
54
55 })
56 dataList.push(rowData);
57 })
58 return dataList;
59 }
60
61 return {
62 /**
63 * 设置JQuery对象,第一步操作。如果你没有在head标签里面引入jquery且未执行该方法的话,ParseDataTable方法、HideField方法会无法执行,出现找不到 $ 的错误。如果你是使用LayUI内置的Jquery,可以
64 * var $ = layui.jquery 然后把 $ 传入该方法
65 * @param jqueryObj
66 * @constructor
67 */
68 SetJqueryObj: function (jqueryObj) {
69 $ = jqueryObj;
70 }
71
72 /**
73 * 转换数据表格
74 */
75 , ParseDataTable: ConvertDataTable
76
77 /**
78 * 隐藏字段
79 * @param fieldName 要隐藏的字段名(field名称)参数可为字符串(隐藏单列)或者数组(隐藏多列)
80 * @constructor
81 */
82 , HideField: function (fieldName) {
83 if (!checkJquery()) return;
84 if (fieldName instanceof Array) {
85 $.each(fieldName, function (index, field) {
86 $("[data-field='" + field + "']").css('display', 'none');
87 })
88 } else if (typeof fieldName === 'string') {
89 $("[data-field='" + fieldName + "']").css('display', 'none');
90 } else {
91
92 }
93 }
94 }
95 })();
- 调用
完整示例:

1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6 <!--<script src="../../js/jquery-3.3.1.js"></script>-->
7 <script src="../../js/layui.js"></script>
8 <script src="DataTableExtend.js"></script>
9 <link rel="stylesheet" href="../../js/css/layui.css" media="all">
10
11 <script>
12 (function () {
13 layui.use(['table', 'layer'], function () {
14 var table = layui.table;
15 var layer = layui.layer;
16 var $ = layui.jquery;
17 table.render({
18 id: "tableID"// 设定表格的唯一ID进行标识
19 , elem: '#tableDataLoad'// 绑定table对应的元素
20 , height: 'full-300'
21 , url: 'data2.json' // TODO: 此处写你实际数据来源
22 , size: 'sm'
23 , page: true
24 , limits: [10, 20, 30, 40, 50]
25 , limit: 30
26 , cols: [[
27
28 ,
29 ,
30 ,
31 ]
32 , [
33
34 ,
35 ,
36 ]]
37 , done: function (res, curr, count) {// 表格渲染完成之后的回调
38
39 $(".layui-table th").css("font-weight", "bold");// 设定表格标题字体加粗
40
41 LayUIDataTable.SetJqueryObj($);// 第一步:设置jQuery对象
42
43 //LayUIDataTable.HideField('num');// 隐藏列-单列模式
44 //LayUIDataTable.HideField(['num','match_guest']);// 隐藏列-多列模式
45
46 var currentRowDataList = LayUIDataTable.ParseDataTable(function (index, currentData, rowData) {
47 console.log("当前页数据条数:" + currentRowDataList.length)
48 console.log("当前行索引:" + index);
49 console.log("触发的当前行单元格:" + currentData);
50 console.log("当前行数据:" + JSON.stringify(rowData));
51
52 var msg = '<div style="text-align: left"> 【当前页数据条数】' + currentRowDataList.length + '<br/>【当前行索引】' + index + '<br/>【触发的当前行单元格】' + currentData + '<br/>【当前行数据】' + JSON.stringify(rowData) + '</div>';
53 layer.msg(msg)
54 })
55
56 // 对相关数据进行判断处理--此处对【竞猜数量】大于30的进行高亮显示
57 $.each(currentRowDataList, function (index, obj) {
58 if (obj['num'] && obj['num'].value > 30) {
59 obj['num'].row.css("background-color", "#FAB000");
60 }
61 })
62 }// end done
63
64
65 });//end table.render
66
67 function dealLighthigh (rowIndexArr, bgColor) {
68 $.each(rowIndexArr, function (index, val) {
69 if (typeof val == "number") {
70 $($(".layui-table-body.layui-table-main tr")[val]).css("background-color", bgColor ? bgColor : "yellow");
71 $($("div .layui-table-fixed.layui-table-fixed-l .layui-table-body tr")[val]).css("background-color", bgColor ? bgColor : "yellow");
72 } else if (typeof val == 'object') {
73 $($(".layui-table-body.layui-table-main tr")[val.rowIndex]).css("background-color", val.bgColor ? val.bgColor : "yellow");
74 $($("div .layui-table-fixed.layui-table-fixed-l .layui-table-body tr")[val.rowIndex]).css("background-color", val.bgColor ? val.bgColor : "yellow");
75 }
76 })
77 }
78
79
80 });// end layui use
81 })()
82 </script>
83 </head>
84 <body>
85 <table id="tableDataLoad" lay-filter="demo"></table>
86
87 </body>
88 </html>
View Code
效果图展示
图一:获取行数据
图二:对符合条件的行进行高亮显示
图三:隐藏列
具体可以参考我发布在GitHub上的原文:点击此处直达
1706

被折叠的 条评论
为什么被折叠?



