数据展示时需要合并部分数据自己写了一个简单插件

合并前:

合并后:

调用示例:

        var trs = $('table#dataList tbody tr').not('#demo').get();
var cellMerger = new CellMerger();
//合并大区
cellMerger.merge(trs, new Array('MSGNUMBER','LARGEAREA'), new Array('LARGEAREA'));
cellMerger.merge(trs, new Array('MSGNUMBER'), new Array('option','statusName','TITLE','MSGNUMBER','CREATEOWNER','CTIME'));

参数说明:

第一个参数是要处理合并的行, 第二个参数是合并条件, 比如列1和列2对应值相等什么的, 支持多条件, 第三个参数是要合并的列

合并插件:

function CellMerger(){
} CellMerger.prototype.merge = function (trs, needIndexs, mergedIndexes){
var mergeds = new Array();
for(x in mergedIndexes){
mergeds.push("td[index="+mergedIndexes[x]+"]");
}
var needs = new Array();
for(x in needIndexs){
needs.push("td[index="+needIndexs[x]+"]");
}
this.mergeCell(trs, needs, mergeds);
}; CellMerger.prototype.conditionMatch = function (targets, currents){
if(targets.length==0 && currents.length==0){
return true;
}
if(targets.length != currents.length){
return false;
}
for(x in targets){
if(targets[x]!=currents[x]){
return false;
}
}
return true;
}; CellMerger.prototype.rowspanAndRemove = function (trs, curIndex, sames, mergeds){
var rowspan=sames.length+1;
for(x in mergeds){
$(trs[curIndex]).children(mergeds[x]).attr('rowspan',rowspan);
}
for(var j=0;j<sames.length;j++){
for(x in mergeds){
$(trs[sames[j]]).children(mergeds[x]).remove();
}
}
}; CellMerger.prototype.mergeCell = function (trs, needs, mergeds){
var targets = new Array();
var curIndex = 0;
var sames = new Array();
for(var i=0;i<trs.length;i++){
var current = new Array();
for(x in needs){
current[x] = $(trs[i]).children(needs[x]).html();
}
if(targets.length == 0){
//初始化比对条件
curIndex = i;
for(x in needs){
targets[x] = $(trs[i]).children(needs[x]).html();
}
}
else{
if(this.conditionMatch(targets, current)){
sames.push(i);
//最后一条进行向前合并
if(i == trs.length-1 && sames.length>0){
this.rowspanAndRemove(trs, curIndex, sames, mergeds);
}
}
else{
//合并相似项
if(sames.length>0){
this.rowspanAndRemove(trs, curIndex, sames, mergeds);
}
//清空数组, 重置比较索引
curIndex = i;
sames = new Array();
for(x in needs){
targets[x] = $(trs[i]).children(needs[x]).html();
}
}
}
}
};

html表格cell合并插件的更多相关文章

  1. ASP.NET中重复表格列合并的实现方法(转自脚本之家)

    这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下.NET控件GridView 和 Repeater 关于重复数据合并的方法. 这是合并之前的效果: 合并之后的效果图 ...

  2. 支持10种格式的 HTML 表格导出 jQuery 插件

    HTML 表格导出 jQuery 插件可以帮助用户导出 HTML 表格到 JSON.XML.PNG.CSV.TXT.SQL.MS-Word.MS-Excel.MS-PowerPoint 和 PDF 格 ...

  3. ExtJS4.2学习(13)基于表格的扩展插件---rowEditing

    鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-24/182.html --------------- ...

  4. CSS之表格边框合并、兄弟标签外边距合并、父子标签的外边距合并

    本文内容: 表格边框合并 兄弟标签外边距合并 父子标签的外边距合并 首发日期:2018-05-01 表格边框合并: 发生情况: 当设置了cellpadding="0" cellsp ...

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

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

  6. 适用于iview的表格转Excel插件

    在网上找的一个表格转excel插件,经过修改后使其适用于iview中的table组件 let idTmr; const getExplorer = () => { let explorer = ...

  7. Bootstrap-table实现动态合并相同行(表格同名合并)

    写在前面: 有时候表格的需求就是奇奇怪怪的,最近要做的表格需要实现当紧挨着的记录的某一列的行元素内容相同,就将其合并.要是不是相同的就不合并.如果表格数据的顺序不需要被改变,这个样子是可以很简单就完成 ...

  8. IOS tableView 去除分割线 和 不允许选中表格cell

    //去除分割线 self.tableView.backgroundColor=[UIColor colorWithRed:///255.0 alpha:1.0]; self.tableView.sep ...

  9. jQuery 表格隔行变色插件

    jQuery提供了用于扩展jQuery功能的方法,即jQuery.fn.extend()方法和jQuery.extend()方法. 基本的JS框架代码如下: ;(function($) { $.fn. ...

随机推荐

  1. Android出现Read-only file system 解决方法

    操作AVD文件系统上的文件时遇到"... Read-only file system". 解决办法: 将AVD sdcard挂载为读写权限: 在doc下执行:adb -s emul ...

  2. sql server经典sql

    1. sql server构造oracle rownum列 select * from ( select row_number() over(order by t.修改时间 desc) rownum, ...

  3. [Java][20160707]Java语言介绍

    Java最早的名称叫"oak"后来改名叫"Java". Java最早是属于"Sun"公司的, 后来被"Oracle"公司 ...

  4. Source Insight及常用插件

    Source Insight及常用插件 1.Source Insight 2.插件 <1>.使用快捷键注释,单行注释,多行注释,#if 0注释 <2>.跳转到当前文件所在的文件 ...

  5. (转) IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)

    首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context ...

  6. 深入了解float

    1.float的历史   初衷是为了图片的文字环绕,将img设置float 2.破坏性与包裹性  a.父元素没有设置高度,内部元素浮动后,服务元素的高度被破坏了,可以将其父元素设置overflow:h ...

  7. Chrome浏览器报错:Origin null is not allowed by Access-Control-Allow-Origin.

    问题:Chrome浏览器报错:Origin null is not allowed by Access-Control-Allow-Origin. 原因:.js文件中使用load()方法,而Chrom ...

  8. HTML5格式化

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. sonar-maven-plugin问题

    问题: jenkins本地构建时sonar报错 StackOverflow问题 [ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven ...

  10. wdcp日志

    apache或nginx都有开关默认日志,一个是正常访问日志,一个是错误的日志,目录在 /www/wdlinux/nginx-1.0.15/logs /www/wdlinux/httpd-2.2.22 ...