layui table表格单元格动态合并,并设置隔行变色
layui table表格单元格动态合并,并设置隔行变色,此代码只针对嵌套数组只有一层的时候有效,多个数组嵌套还在冥想当中!!
我们知道在layui插件官方平台有个可以无限极单元格合并的模块,但是其核心理念是针对多个相同数据进行合并,并且也非常好用,数据结构不存在嵌套结构。
但是偶尔数据也有嵌套的时候,哪怕只有一层数据结构嵌套的话,上面的方法就不好使了,并且我们在不抛弃layui.table的时候照样可以使单元格进行合并,那就请看下图:
整个代码如下:
layui.define (function (exports) {
var $ = layui.jquery,
mod = {
render: function (myTable) {
var tableBox = $ (myTable.elem).next ().children ('.layui-table-box'),
$main = tableBox
.children ('.layui-table-body')
.children ('table')
.children ('tbody')
.children ('*[data-index]');
$main.each (function (pindex) {
var td = $ (this).children ();
td.each (function (index) {
var pp = $ (this).find ('p');
pp.parents ('td').addClass ('abc');
if (!pp.parents ('td').siblings ().hasClass ('abc')) {
pp.parents ('td').siblings ().attr ('rowspan', pp.length);
} else {
pp.parents ('td').removeAttr ('rowspan');
}
}); if ($ (this).find ('td').hasClass ('abc')) {
var hasAbc = $ (this).find ('.abc'), arr = [], len = 0;
hasAbc.each (function (im) {
var iem = $ (this).find ('p');
len = iem.length;
iem.each (function (ia, item) {
arr.push (item);
});
$ (this).find ('P:gt(0)').remove ();
});
var dataArr = spFn (arr, len); //生成tr
dataArr.reverse ().forEach (function (item, index) {
if (index != dataArr.length - 1) {
var str = '<tr flag=' + pindex + '>';
for (var i = 0; i < item.length; i++) {
str += "<td align='center'>";
str += "<div class='layui-table-cell'>";
str += $ (item[i]).html ();
str += '</div>';
str += '</td>';
}
str += '</tr>'; if (td.find ('p').parents ('tr').length > 0) {
td.find ('p').parents ('tr').next ().before (str);
}
}
});
}
});
var $allmain = tableBox
.children ('.layui-table-body')
.children ('table')
.children ('tbody')
.children ('tr');
var findTrBs = function (flag) {
var className;
$allmain.each (function () {
if ($ (this).attr ('data-index') == flag) {
className = $ (this).attr ('class');
}
});
return className;
};
//单元格合并以后 设置隔行变色
$allmain.each (function (i) {
if ($ (this).attr ('data-index')) {
if ($ (this).attr ('data-index') % 2 == 0) {
$ (this).addClass ('even');
} else {
$ (this).addClass ('odd');
}
} else {
$ (this).addClass (findTrBs ($ (this).attr ('flag')));
}
});
},
}; exports ('tableMerge', mod);
});
具体思路:
1、首先我们需要先把table表格数据字段设置成template
2、在页面上设置模板
<script type="text/html" id="nownr">
{{# layui.each(d.corrNowConArr,function(index,item){ }}
<p>{{item.con}}</p>
{{# });}}
</script>
3、通过特殊元素标记将此数据追加到对应tr的下面,此过程我们需要做一些转换
//将数组分割成 几个几个组合的多维数组
//[1,2,3,4] 组合成[[1,2],[3,4]]
function spFn (arr, len) {
const arr1 = arr.reduce ((init, item, index) => {
index % len === 0
? init.push ([item])
: init[init.length - 1].push (item);
return init;
}, []);
return senFun (arr1);
}
4、将遍历好的元素标记按照 纵向排列
//数组竖向排列
//[[1,2],[3,4]] 组合成[[1,3],[2,4]]
function senFun (data) {
let final = [];
let length = Math.min (...data.map (arr => arr.length));
for (let i = 0; i < length; i++) {
let tmp = [];
for (let j = 0; j < data.length; j++) {
tmp.push (data[j][i]);
}
final.push (tmp);
}
return final;
}
最终渲染结构如图:
切记:此案例不支持多项嵌套 !写的不好还请见谅。如有问题可以留言
下面奉上支持多层单元格合并的链接:https://fly.layui.com/extend/tableMerge/
layui table表格单元格动态合并,并设置隔行变色的更多相关文章
- jQuery实现HTML表格单元格的合并功能
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- easyUI datagarid单元格动态合并
第二列根据第一列合并,第三列根据第二列合并.层级关系. /* * tableID表格的id * colList要合并的字段例如:"overcount,totalcount" */ ...
- freemarker实现单元格动态合并-行合并
项目需求:项目中有个需求,需要将一些数据库中的数据根据需求导出,生成一个word,研究了一些技术,其中包括POI.freemaker,对比了一下实现过程及技术难度没最终使用了freemaker; 原始 ...
- jsp table 表格单元格编辑示例
列表单元格: //两个 隐藏的 input, 第一个存 记录 id, 单元格内容是排序码 : <td id="ordinal"><%=ordinal%> & ...
- layui更新表格单元格数据口,更新单元格的内容
//监听工具条 table.on('tool(edit)', function(obj){ var data = obj.data; if(obj.event === 'getinvitation') ...
- html如何设置表格单元格内容垂直居中?
父元素设置为表格的单元格元素td,而在表格单元格中的元素设置vertical-align: middle; 对父容器(td)使用:display: table-cell 其内子元素使用:vertica ...
- NG-ZORRO + angular-cli11 表格横纵向单元格合并,按需设置背景色,解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题,也适用VUE,REACT
NG-ZORRO + angular-cli11 实现表格横纵向单元格合并,按需设置背景色,并解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题 HTML代码 <!-- 1. ...
- 使用js方法将table表格中指定列指定行中相同内容的单元格进行合并操作。
前言 使用js方法对html中的table表格进行单元格的行列合并操作. 网上执行此操作的实例方法有很多,但根据实际业务的区别,大多不适用. 所以在网上各位大神写的方法的基础上进行了部分修改以适合自己 ...
- 如何让elemengUI中的表格组件相同内容的单元格自动合并
1. 前言 这两天在工作中遇到这样一个需求:将某个Excel中的数据在页面上以表格形式展示出来,并且尽量保持数据层级与Excel中一致.在原始Excel文件中,对每一行相同的数据都进行了合并,使得数据 ...
- JavaScript动态改变表格单元格内容的方法
本文实例讲述了JavaScript动态改变表格单元格内容的方法.分享给大家供大家参考.具体如下: JavaScript动态改变表格单元格的内容,下面的代码通过修改单元格的innerHTML来修改单元格 ...
随机推荐
- 开源 - Ideal库 - 特殊时间扩展方法(三)
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法. 01.获取当天的开始时间 当天的开始时间指00:00:00时刻,因此只需要获取DateTime的Date属性只获取时间即可,具体代码如下: ...
- 8.Jenkins+Docker+SpringCloud微服务持续集成
前言 通过前几章的学习,了解了持续集成概念以及相关技术的学习和使用 接下来学习构建一整套SpringCloud微服务+Docker+Jenkins的持续集成案例 环境 架构图 流程说明: 开发人员将代 ...
- 2023NOIP A层联测28 T4 小猫吃火龙果
2023NOIP A层联测28 T4 小猫吃火龙果 分块题,跟赛时的一个倍增部分分做法很像. 思路 如果没有动态操作,可以设 \(dp[i][T][k]\) 为:在 \(i\) 时为 \(T(T\in ...
- 我们有40%代码是 AI 写的
- JAXP(Java API for XML Parsing)
JAXP(Java API for XML Parsing) 过去几年中,XML分折已经被标准为两个不同的处理模型:SAX(Simple API for XML)以及DOM(Document O ...
- Goland破解之无限重置(最新)
分享一下 JetBrains 全家桶 IDEA 2021.x 的激活破解教程,相当于永久激活 破解了,亲测有效,下面是详细文档哦~ JetBrains 全家桶 IDEA 2021.x 破解激活教程,相 ...
- 六步取消win11开机PIN密码登录
0.前言 新买的电脑打开后首先要进行一系列的操作激活操作系统.在这些操作中最令人讨厌的是设置开机密码(pin). 也许有很多人的电脑需要保密,限制别人登录,这时使用登录pin是很有必要的.而还有很多人 ...
- Kettle设置定时跑任务
1.Kettle设置作业 保存,test.kjb 2. 创建批处理 zxjb.bat C: cd C:\kettle\pdi-ce-9.4.0.0-343\data-integration kitch ...
- 鼠标事件:mouseout、mouseover事件会不断触发
mouseover 和 mouseenter mouseenter不会冒泡,而mouseover会冒泡 mouseover:指针进入事件监听的元素内 或者 其他的子元素内 都会触发mouseover ...
- DBeaver 不错大家都来用 DBeaver 吧
支持 windows linux 支持 pg 等 n 多数据库