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来修改单元格 ...
随机推荐
- 超级干货!Air780E的串口通信分享
猛然发现,Air780E的串口通信还没分享,难怪已经有小伙伴提出了要求! 那我们来讲解低功耗4G模组Air780E的串口通信的基本用法,小伙伴们,学起来吧! 一.硬件准备 780E开发板一套 ...
- 2023NOIP A层联测16 T3 货物运输
2023NOIP A层联测16 T3 货物运输 题目描述说这是一个仙人掌图,通常将问题转换为环和树的问题在使用圆方树来解决. 树解法 令 \(a_i=s_i-\frac{\sum s_i}{n}\) ...
- 【Flink 日常踩坑】Could not find ExecutorFactory in classpath
Description 一段简单的 FlinkSQL 程序,在 IDE 中运行没问题,但是 maven 打包后发布到终端启动却报错了. import org.apache.flink.configur ...
- Linux中更新系统时间、同步系统时间和硬件时间
更新系统的时间 1.手动修改 date -s # 不建议 2.时间同步服务器 ntpdate # 需要安装命令 yum -y install ntpdate [root@oldbo ...
- vue-element-admin 左侧的导航栏固定展开
项目需要把左侧的导航栏固定打开,不关闭我们只需要打开store-modules-app.js文件中,把下面的代码给修改就可以了
- (Redis基础教程之八) 如何在Redis中管理Sets
如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...
- golang之常用标准库汇总
1. import "runtime/debug" func Stack func Stack() []byte Stack 返回格式化的go程的调用栈踪迹. 对于每一个调用栈,它 ...
- Vue.js 组件数据交互
1.前言 本节讲述组件之间如何进行数据交互 2.props属性与非 prop 的属性 父组件通过属性绑定的形式传值给子组件,这种传值分2种 类别 含义 说明 props 子组件本身已经通过props定 ...
- canvas(一)描边与填充
1.画布大小 canvas默认的大小是 300*150,通过操作width/height属性可以设置画布的大小,属性值只能是具体是像素值,而不能是百分比. <body> <div c ...
- 使用arcpy向server端发布服务
import arcpy import os # Set output file names outdir = r"D:" service = "MapImageShar ...