Js 合并 table 行 的实现方法

需求如下:

某公司的员工档案,如下,  经理看员工的信息不是很清晰:

姓名

所在学校

毕业时间

张三

小学

2000

张三

中学

2006

张三

大学

2010

李四

小学

2000

李四

中学

2006

王五

小学

2006

所以要求要求姓名一列如果发现挨着的名字相同的话,将其合并为一行,如下图所示:

姓名

所在学校

毕业时间

张三

小学

2000

中学

2006

大学

2010

李四

小学

2000

中学

2006

王五

小学

2006

这样看起来是不是很清晰...

解决思路

1.         首先我想封装一个方法,这个方法应该是:

a)         操作哪一个table

b)         这个table的列(要合并的列)

c)         从第几行开始合并(如:表头行不参与合并),

d)         结束到第几行(如:分页行不参与合并)

2.         具体内部方法的实现

a)         我想先用一个集合来存储相同的名称的个数(如:[3,2,1] 也就是 [张三的个数,李四的个数,王五的个数])

b)         然后循环table的行数,如果 数组中的数大于1,我要将大于1的td给删掉。

3.         在循环的同时添加条件。

以上就是我要解决这个问题的主要思路.那大家就先看看我的具体代码吧:

  1. /**
  2. data格式{'table':$('tableId'),'columnId':'0','startRowNumber':'1','endRowNumber':}
  3. */
  4. function initRowsPan(data) {
  5. //判断table是否存在
  6. if(!data.table)
  7. {
  8. return;
  9. }
  10. //判断是否存在操作的列编号
  11. if(!data.columnId||data.columnId<0)
  12. {
  13. return;
  14. }
  15. //记录开始的行号,如果为空,则默认从第0行开始
  16. var tStartNumber=data.startRowNumber;
  17. if(!tStartNumber||tStartNumber<0)
  18. {
  19. tStartNumber=0;
  20. }
  21. //记录table的所有hang集合
  22. var tableRows = data.table.rows;
  23. //记录结束的行号,如果为空,则默认为table的行号
  24. var tEndNumber=data.endRowNumber;
  25. if(!tEndNumber||tEndNumber<=0)
  26. {
  27. tEndNumber=tableRows.length;
  28. }
  29. else
  30. {
  31. //给传来的编号加1,因为表格的行编号是从0开始.
  32. tEndNumber+=1;
  33. }
  34. //得到相同内容的行数的集合
  35. var totalcount = new Array();
  36. //临时变量,循环记录表格中td的内容,用来判断td中的value是否发生修改
  37. var tTdValue = "";
  38. //临时变量,再循环时,如果td的值相同,那么变量加1, 否则将临时变量压入集合中
  39. var tRowsCount = 1;
  40. //存储table 的所有行数
  41. for ( var i = data.startRowNumber; i < tEndNumber; i++)
  42. {
  43. //首先拿出来td的值
  44. var tTdInner=tableRows[i].cells[data.columnId].innerHTML.trim();
  45. //如果是第一次走循环,直接continue;
  46. if (i == data.startRowNumber)
  47. {
  48. tTdValue = tTdInner;
  49. continue;
  50. }
  51. //如果当前拿出来的值和出处的值相同,那么将临时数量加1
  52. if (tTdValue == tTdInner)
  53. {
  54. tRowsCount++;
  55. }
  56. else
  57. {
  58. //否则添加到集合里面
  59. totalcount.push(tRowsCount);
  60. //并且将当前的td中的value赋给变量
  61. tTdValue = tTdInner;
  62. //数量清为1
  63. tRowsCount = 1;
  64. }
  65. //判断是否是循环的最后一次,如果是最后一次那个直接将当前的数量存储到集合里面
  66. if (i == tEndNumber -1)
  67. {
  68. totalcount.push(tRowsCount);
  69. }
  70. }
  71. //临时变量,再循环中判断是否和数组中的一项值相同
  72. var tNum = 0;
  73. //注意这个循环是倒着来的
  74. for (var i = tEndNumber - 1; i >= data.startRowNumber; i--)
  75. {
  76. //临时变量,存储td
  77. var tTd=tableRows[i].cells[data.columnId];
  78. tNum++;
  79. //如果发现tNum和数组中最后一个值相同,那么就可以断定相同的td已经结束[只是其中一个]
  80. if (tNum == totalcount[totalcount.length - 1])
  81. {
  82. //给当前td添加rowSpan属性
  83. tTd.setAttribute("rowSpan",totalcount[totalcount.length - 1]);
  84. //将数组的最后一个元素弹出
  85. totalcount.pop();
  86. tNum = 0;
  87. }
  88. else
  89. {
  90. //删除当前td
  91. tableRows[i].removeChild(tTd);
  92. }
  93. }
  94. }

在onload事件里面调用函数

总结

其实每一个问题都会有很多的解决办法,这个是我在前台实现,其实大家也还可以在页面里面添加判断,来输出效果. 我们在做的时候多想想,多动动脑子,怎样才能使我们做事情更方便一些,会更节省时间,每次多积累,多总结,这样我们就会提高很多…

这是晚辈的第三篇技术文章,文章写的不是很好,希望各位前辈多多指教,

Js 合并 table 行 的实现方法的更多相关文章

  1. JS合并两个数组的方法

    JS合并两个数组的方法 我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况.比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合 ...

  2. 使用js合并table中的单元格

    用primefaces做的报表,领导要求合并相同内容的单元格,但是primefaces没有找到可以合并单元格的组件,想来想去,只有页面加载后用js合并了. http://blog.csdn.net/d ...

  3. SQL中合并多行记录的方法总汇

    -- =============================================================================-- Title: 在SQL中分类合并数 ...

  4. JS合并数组的几种方法及优劣比较

    本文属于JavaScript的基础技能. 我们将学习结合/合并两个JS数组的各种常用方法,并比较各种方法的优缺点. 我们先来看看具体的场景: var q = [ 5, 5, 1, 9, 9, 6, 4 ...

  5. [Js/Jquery]table行转列

    摘要 在使用ews调用exhange的收件箱的并在h5页面显示邮件详情的时候,因为返回的每封邮件的内容都是htmlbody,没有textbody.每封邮件又没什么规律,用正则表达式来匹配内容并不合适, ...

  6. js合并table指定列

    function MergeTableCell(tableId, startRow, endRow, col) { var tb = document.getElementById(tableId); ...

  7. 探讨JS合并两个数组的方法

    我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法如下: ...

  8. 转:探讨JS合并两个数组的方法

    我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法如下: ...

  9. [转] 探讨JS合并两个数组的方法

    我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况. 比如: 1 2 var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合并成一个.方法 ...

随机推荐

  1. c# 跨线程访问窗体UI

    定义个结构体用于存储线程中传递的参数信息 struct ImgInfo { public string url; public string path; }; 参数传递到线程中 ImgInfo img ...

  2. 纸壳CMS(ZKEACMS)体验升级,快速创建页面,直接在页面中修改内容

    关于纸壳CMS 纸壳CMS又名 ZKEACMS Core 是ZKEACMS的 .net core 版本,可运行在 .net core 1.1 平台上.是一个开源的CMS. 纸壳CMS对于 ZKEACM ...

  3. python学习之路 二 :基本数据类型

    本节重点 理解什么是变量? 掌握各种数据类型 理解可变类型和不可变类型 一.变量和常量 变量: 作用:存贮程序的中间结果在内存里,以备后边的程序调用 定义规范: 变量名只能是 字母.数字活下划线的任意 ...

  4. LA 3401

    彩色立方体. [分析] 弄清楚24种状态,可以由标准姿态旋转而来. 计算24种状态: #include <iostream> #include <string> ,,,,, } ...

  5. hihocoder1634 Puzzle Game

    题目链接:(vjudge) 戳我 和上面那个matrix 比较像. 大概题意就是给你一个n*m的矩阵,然后可以选择其中一个数字进行修改(当然也可以不修改),使得矩阵的最大子矩阵尽可能小.最后输出这个值 ...

  6. ajax使用向Spring MVC发送JSON数据出现 org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported错误

    ajax使用向Spring MVC发送JSON数据时,后端Controller在接受JSON数据时报org.springframework.web.HttpMediaTypeNotSupportedE ...

  7. “全栈2019”Java第六十九章:内部类访问外部类成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. [转] Linux 硬件设备查看命令

    linux查看设备命令 系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # ...

  9. Mac下显示和隐藏“隐藏文件”

    命令行方式:显示/隐藏Mac隐藏文件命令如下(注意其中的空格并且区分大小写): 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFi ...

  10. list排序问题

    用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: /*** 根据order对User排序*/public class User ...