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来修改单元格 ...
随机推荐
- Nuxt.js 应用中的 webpack:change 事件钩子
title: Nuxt.js 应用中的 webpack:change 事件钩子 date: 2024/11/24 updated: 2024/11/24 author: cmdragon excerp ...
- MySQL之数据排序
在MySQL中,我们经常需要从数据库中检索数据,并根据特定的要求对数据进行排序.通常情况下,我们会根据数据中某一列的值进行排序,例如按照价格从低到高或从高到低对商品进行排序.但有时候,我们需要在数据中 ...
- JPAAS整合宝蓝德
现在软件国产化的需求成了刚需了,因此在实施的过程中,我们整合了宝蓝德,我将过程写一下. 1.宝蓝德提供的程序包. 包名 说明 bes-actuator-spring-boot-2.x-starter- ...
- Java基础面试:Java中的方法
Java 中的方法 什么是方法 方法是 Java 中的一段可重用的代码块,用于执行特定的任务,是程序中的最小执行单元. 参数:方法可以接受一个或多个参数,这些参数是传递给方法的值,用于方法内部的逻辑运 ...
- 分布式系统架构1:共识算法Paxos
1.背景 今天开始更新分布式的文章,工作几年后还没系统的学习分布式的内容,趁着还有时间学习沉淀的时候多输出些文章 2.为什么需要分布式共识算法 思考:现在你有一份随时变动的数据,需要确保它正确存储在网 ...
- C#获取用户客户端系统版本设备名称浏览器
C#获取用户客户端系统版本设备名称浏览器 先看效果 使用 Neget引用包UAParser 在这里插入代码片 项目的github :https://github.com/ua-parser/uap-c ...
- RAG分块策略:主流方法(递归、jina-seg)+前沿推荐(Meta-chunking、Late chunking、SLM-SFT)
RAG分块策略:主流方法(递归.jina-seg)+前沿推荐(Meta-chunking.Late chunking.SLM-SFT) 大多数常用的数据分块方法(chunking)都是基于规则的,采用 ...
- 《JavaScript 模式》读书笔记(4)— 函数3
这篇,我们来学习下自定义函数以及即时函数的内容. 四.自定义函数 函数可以动态定义,也可以分配给变量.如果创建了一个新函数,并且将其分配给保存了另外函数的同一个变量,那么就以一个新函数覆盖了旧函数.在 ...
- nvm安装node报错Get "https://nodejs.org/dist/latest/SHASUMS256.txt": dial tcp 104.20.23.46:443: i/o timeout
windows上通过nvm管理node版本,在本地安装了nvm后,通过nvm安装node,报错了,信息: Could not retrieve https://nodejs.org/dist/late ...
- uni-app 横竖屏问题
前情 uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni-app 坑位 最近有用户反馈闪屏页也叫 ...