1. layui.use('table', function () {
  2. var table = layui.table;
  3.  
  4. table.render({
  5. elem: '#applyTab'
  6. , url: '${cxt}/yptPreferentialApply/detail_data?id=${detailId}'
  7. , cols: [[
  8. {field: 'goodsName', title: '产品名称'}
  9. , {
  10. field: 'priceType', title: '价格类型', templet: function (d) {
  11. switch (d.priceType) {
  12. case "0":
  13. return "免费";
  14. case "1":
  15. return "按次";
  16. case "2":
  17. return "包天";
  18. case "3":
  19. return "包月";
  20. case "4":
  21. return "包年";
  22. case "5":
  23. return "包时";
  24. }
  25. }
  26. }
  27. , {field: 'price', title: '单价'}
  28. , {field: 'discount', title: '折扣(%)'}
  29. , {field: 'preferentialPrice', title: '优惠价格'}
  30. , {field: 'chargeUnit', title: '计价单位'}
  31. ]]
  32. , done: function (res, curr, count) {
  33. merge(res, curr, count);
  34. }
  35. });
  36.  
  37. });
  38.  
  39. /**
  40. * 合并单元格
  41. * @param res 表格数据
  42. * @param curr 当前页
  43. * @param count 总数
  44. */
  45. function merge(res, curr, count) {
  46. var data = res.data;
  47. var mergeIndex = 0;//定位需要添加合并属性的行数
  48. var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
  49. var columsName = ['goodsName'];//需要合并的列名称
  50. var columsIndex = [0];//需要合并的列索引值
  51.  
  52. for (var k = 0; k < columsName.length; k++)//这里循环所有要合并的列
  53. {
  54. var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行
  55. for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
  56. var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
  57. var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列
  58.  
  59. if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并
  60. mark += 1;
  61. tdPreArr.each(function () {//相同列的第一列增加rowspan属性
  62. $(this).attr("rowspan", mark);
  63. });
  64. tdCurArr.each(function () {//当前行隐藏
  65. $(this).css("display", "none");
  66. });
  67. }else {
  68. mergeIndex = i;
  69. mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
  70. }
  71. }
  72. }
  73. }

多列合并:

  1. /**
  2. * 合并单元格
  3. * @param res 表格数据
  4. * @param curr 当前页
  5. * @param count 总数
  6. */
  7. function merge(res, curr, count) {
  8. var data = res.data;
  9. //alert(JSON.stringify(data));
  10. var mergeIndex = 0;//定位需要添加合并属性的行数
  11. var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
  12. var columsName = ['CusID'];//需要合并的列名称
  13. var columsIndex = [0];//需要合并的列索引值
  14. for (var k = 0; k < columsName.length; k++)//这里循环所有要合并的列
  15. {
  16. mark = 1;
  17. var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行
  18. for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
  19. var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
  20. var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列
  21.  
  22. if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并
  23. // alert(data[i][columsName[k]]);
  24. mark += 1;
  25. tdPreArr.each(function () {//相同列的第一列增加rowspan属性
  26. $(this).attr("rowspan", mark);
  27. });
  28. tdCurArr.each(function () {//当前行隐藏
  29. $(this).css("display", "none");
  30. });
  31. }else {
  32. mergeIndex = i;
  33. mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
  34. }
  35. }
  36. }
  37.  
  38. mergeIndex = 0;//定位需要添加合并属性的行数
  39. mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
  40. columsName = ['CusName'];//需要合并的列名称
  41. columsIndex = [1];//需要合并的列索引值
  42. for (var k = 0; k < columsName.length; k++)//这里循环所有要合并的列
  43. {
  44. mark = 1;
  45. var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行
  46. for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
  47. var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
  48. var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列
  49.  
  50. if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并
  51. // alert(data[i][columsName[k]]);
  52. mark += 1;
  53. tdPreArr.each(function () {//相同列的第一列增加rowspan属性
  54. $(this).attr("rowspan", mark);
  55. });
  56. tdCurArr.each(function () {//当前行隐藏
  57. $(this).css("display", "none");
  58. });
  59. }else {
  60. mergeIndex = i;
  61. mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
  62. }
  63. }
  64. }
  65. }

layui:数据表格如何合并单元格的更多相关文章

  1. layui 动态表格之合并单元格

    需求: 下面用excel表格大概模拟下需求,左边是原来的,要改成右边这样的: ①第一步:再生成表格后调用此方法,以合并重复的单元格 done : function(res, curr, count) ...

  2. layui table+复杂表头+合并单元格

    效果图: 问题:行hover效果感觉错乱  所以改为透明色 代码: <!DOCTYPE html> <html lang="en"> <head> ...

  3. JS动态生成表格后 合并单元格

    JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单 ...

  4. .Net用字符串拼接实现表格数据相同时合并单元格

    前言 最近在做项目通过GridView或Repeater绑定数据,如果两行或若干行某列值相同,需要进行合并单元格,但是实现过程中想到了字符串拼接,于是就没用绑定数据控件,而是用了html结合字符串实现 ...

  5. poi生成表格自动合并单元格

    直接复制这个工具类即可使用: /** * 合并单元格 * @author tongyao * @param sheet sheet页 * @param titleColumn 标题占用行 * @par ...

  6. java使用freemarker模板导出word(带有合并单元格)文档

    来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并 ...

  7. jquery操作表格 合并单元格

    jquery操作table,合并单元格,合并相同的行 合并的方法 $("#tableid").mergeCell({ cols:[X,X] ///参数为要合并的列}) /** * ...

  8. Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行

    Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行 模版格式,图格式是最简单的格式,但实际效果不是这种,实际效果图如图2 图2 ,注意看红色部分,一对一是正常的,但是有一对多的订单 ...

  9. 议:如何将树形菜单形式的数据转化成HTML的二维表(相同内容需合并单元格)

    一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,底层代码必定会用到递归算法.这篇随笔的目的就是要谈谈除了用树形菜单来显示这种上下层级关系 ...

随机推荐

  1. java基础知识—变量、数据类型和运算符

    1.变量:存储数据的一个基本单元.2.变量的声明和赋值: 1)声明并赋值;数据类型 变量名=值 例如:int prince=10; 2) 声明.赋值分为两步: 数据类型 变量名: 例如:int=pri ...

  2. org.springframework.cloud FeignInterceptor

    package org.rx.feign; import org.apache.commons.lang3.ArrayUtils; import org.aspectj.lang.Proceeding ...

  3. 第九周学习笔记-ADO.Net中DataSet的应用

    一.知识点描述 1.含义:DataSet是ADO.Net的断开式结构的核心组件,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据.DataSet包含一个或多个DataTable ...

  4. ionic3样例应用

    https://github.com/jujunjun/ionic3-study 该应用包括的样例内容有: 文件上传,上拉更新,下拉加载,弹出层,列表,加载中,栅格,按钮等. php提供的文件上传接口 ...

  5. mysql事件调用存储过程总结

    第一次写事件调用存储过程,在网上找了一些资料,特此做下总结,巩固一下: 事件调用存储过程主要有三种: (1)创建事件马上执行,调用存储过程 CREATE EVENT if not exists Eve ...

  6. Firefox下载附件乱码的解决办法

    通过在http的header里设置fileName下载附件时,中文文件名通过chrome浏览器下载时正常,通过firefox下载时为乱码: 原来的Java代码: response.addHeader( ...

  7. C# 保存屏幕截图

    //屏幕宽 int iWidth = Screen.PrimaryScreen.Bounds.Width; //屏幕高 int iHeight = Screen.PrimaryScreen.Bound ...

  8. crontab定时执行shell脚本失败的原因

    有一段时间不用crontab定时执行任务了,这次趁着项目实施的机会来进一步分析一下crontab定时任务设置时遇到的一些棘手的问题. crontab -l 查看目前已经设置的crontab信息 cro ...

  9. Windows守护进程简单示例

    转载: https://blog.csdn.net/kikaylee/article/details/51395360 /* @描述:一个简单的Windows守护进程的例子(C++版本) @作者:ki ...

  10. SQLServer 2008R2主从部署实战

    说明: 由于临时接到做OA的主从环境,基于Windows 200R2 SQLServer2008 R2,由于搜索的资料都不完整,好多重要之处有遗漏,亲自动手做了好几次,填完了坑,整理以备忘记与分享,如 ...