jQuery实现HTML表格单元格的合并功能


Posted in Javascript onApril 06, 2016

本文实例讲述了jQuery实现HTML表格单元格合并的方法。分享给大家供大家参考,具体如下:

运行效果截图如下:

合并前:

jQuery实现HTML表格单元格的合并功能

合并后:

jQuery实现HTML表格单元格的合并功能

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
/**
* desc : 合并指定表格(表格id为table_id)指定列(列数为table_colnum)的相同文本的相邻单元格 
* @table_id 表格id : 为需要进行合并单元格的表格的id。如在HTMl中指定表格 id="data" ,此参数应为 #data 
* @table_colnum : 为需要合并单元格的所在列.参考jQuery中nth-child的参数.若为数字,从最左边第一列为1开始算起;"even" 表示偶数列;"odd" 表示奇数列; "3n+1" 表示的列数为1、4、7、...... 
* @table_minrow ? : 可选的,表示要合并列的行数最小的列,省略表示从第0行开始 (闭区间) 
* @table_maxrow ? : 可选的,表示要合并列的行数最大的列,省略表示最大行列数为表格最后一行 (开区间) 
*/
function table_rowspan(table_id, table_colnum) {
if (table_colnum == "even") {
table_colnum = "2n";
}
else if (table_colnum == "odd") {
table_colnum = "2n+1";
}
else {
table_colnum = "" + table_colnum;
}
var cols = [];
var all_row_num = $(table_id + " tr td:nth-child(1)").length;
var all_col_num = $(table_id + " tr:nth-child(1)").children().length;
if (table_colnum.indexOf("n") == -1) {
cols[0] = table_colnum;
}
else {
var n = 0;
var a = table_colnum.substring(0, table_colnum.indexOf("n"));
var b = table_colnum.substring(table_colnum.indexOf("n") + 1);
//alert("a="+a+"b="+(b==true));
a = a ? parseInt(a) : 1;
b = b ? parseInt(b) : 0;
//alert(b);
while (a * n + b <= all_col_num) {
cols[n] = a * n + b;
n++;
}
}
var table_minrow = arguments[2] ? arguments[2] : 0;
var table_maxrow = arguments[3] ? arguments[3] : all_row_num + 1;
var table_firsttd = "";
var table_currenttd = "";
var table_SpanNum = 0;
for (var j = 0; j < cols.length; j++) {
$(table_id + " tr td:nth-child(" + cols[j] + ")").slice(table_minrow, table_maxrow).each(function (i) {
var table_col_obj = $(this);
if (table_col_obj.html() != " ") {
if (i == 0) {
table_firsttd = $(this);
table_SpanNum = 1;
}
else {
table_currenttd = $(this);
if (table_firsttd.text() == table_currenttd.text()) {
table_SpanNum++;
table_currenttd.hide(); //remove(); 
table_firsttd.attr("rowSpan", table_SpanNum);
} else {
table_firsttd = $(this);
table_SpanNum = 1;
}
}
}
});
}
}
/**
* desc : 合并指定表格(表格id为table_id)指定行(行数为table_rownum)的相同文本的相邻单元格 
* @table_id 表格id : 为需要进行合并单元格的表格的id。如在HTMl中指定表格 id="data" ,此参数应为 #data 
* @table_rownum : 为需要合并单元格的所在行.参考jQuery中nth-child的参数.若为数字,从最左边第一列为1开始算起;"even" 表示偶数行;"odd" 表示奇数行; "3n+1" 表示的行数为1、4、7、...... 
* @table_mincolnum ? : 可选的,表示要合并行中的最小列,省略表示从第0列开始(闭区间)
* @table_maxcolnum ? : 可选的,表示要合并行中的最大列,省略表示表格的最大列数(开区间) 
*/
function table_colspan(table_id, table_rownum) {
//if(table_maxcolnum == void 0){table_maxcolnum=0;}
var table_mincolnum = arguments[2] ? arguments[2] : 0;
var table_maxcolnum;
var table_firsttd = "";
var table_currenttd = "";
var table_SpanNum = 0;
$(table_id + " tr:nth-child(" + table_rownum + ")").each(function (i) {
table_row_obj = $(this).children();
table_maxcolnum = arguments[3] ? arguments[3] : table_row_obj.length;
table_row_obj.slice(table_mincolnum, table_maxcolnum).each(function (i) {
if (i == 0) {
table_firsttd = $(this);
table_SpanNum = 1;
} else if ((table_maxcolnum > 0) && (i > table_maxcolnum)) {
return "";
} else {
table_currenttd = $(this);
if (table_firsttd.text() == table_currenttd.text()) {
table_SpanNum++;
if (table_currenttd.is(":visible")) {
table_firsttd.width(parseInt(table_firsttd.width()) + parseInt(table_currenttd.width()));
}
table_currenttd.hide(); //remove(); 
table_firsttd.attr("colSpan", table_SpanNum);
} else {
table_firsttd = $(this);
table_SpanNum = 1;
}
}
});
});
}
</script>
</head>
<body>
<table width="400" border="1" id="table1">
<tr>
<td align="center">
a
</td>
<td>
for
</td>
<td>
for
</td>
<td>
100
</td>
<td>
200
</td>
<td>
200
</td>
</tr>
<tr>
<td>
a
</td>
<td>
for
</td>
<td>
for
</td>
<td>
150
</td>
<td>
230
</td>
<td>
200
</td>
</tr>
<tr>
<td>
dd
</td>
<td>
if
</td>
<td>
for
</td>
<td>
100
</td>
<td>
200
</td>
<td>
200
</td>
</tr>
<tr>
<td>
aa
</td>
<td>
if
</td>
<td>
for
</td>
<td>
300
</td>
<td>
240
</td>
<td>
200
</td>
</tr>
<tr>
<td>
e
</td>
<td>
if
</td>
<td>
for
</td>
<td>
320
</td>
<td>
230
</td>
<td>
200
</td>
</tr>
</table>
<input type="button" value="合并表格2" onClick="table_colspan('#table1',1)"> 
<input type="button" value="合并表格1" onClick="table_rowspan('#table1',1)"> 
</body>
</html>

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
Highslide.js是一款基于js实现的网页中图片展示插件
Mar 30 Javascript
让Firefox支持event对象实现代码
Nov 07 Javascript
jQuery 一个图片切换的插件
Oct 09 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
Dec 24 Javascript
node.js下when.js 的异步编程实践
Dec 03 Javascript
JavaScript实现的多种鼠标拖放效果
Nov 03 Javascript
浅谈几种常用的JS类定义方法
Jun 08 Javascript
JS闭包用法实例分析
Mar 27 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
Jun 28 Javascript
深入了解JavaScript代码覆盖
Jun 13 Javascript
bootstrap-table+treegrid实现树形表格
Jul 26 Javascript
javascript实现切割轮播效果
Nov 28 Javascript
JS中JSON对象和String之间的互转及处理技巧
Apr 06 #Javascript
js老生常谈之this,constructor ,prototype全面解析
Apr 05 #Javascript
实例详解ECMAScript5中新增的Array方法
Apr 05 #Javascript
关于JS中的apply,call,bind的深入解析
Apr 05 #Javascript
javascript中apply、call和bind的使用区别
Apr 05 #Javascript
JavaScript数组去重的两种方法推荐
Apr 05 #Javascript
jquery Deferred 快速解决异步回调的问题
Apr 05 #Javascript
You might like
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
python局域网ip扫描示例分享
2014/04/03 Python
跟老齐学Python之??碌某?? target=
2014/09/12 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
人事专员岗位职责范本
2014/03/04 职场文书
总经理助理的职责
2014/03/14 职场文书
文体活动总结范文
2014/05/05 职场文书
人事专员岗位说明书
2014/07/29 职场文书
代办委托书怎么写
2014/08/01 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
vue 实现上传组件
2021/05/31 Vue.js
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js