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 相关文章推荐
Ajax::prototype 源码解读
Jan 22 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
Oct 07 Javascript
JS使用for循环遍历Table的所有单元格内容
Aug 21 Javascript
Yii2使用Bootbox插件实现自定义弹窗
Apr 02 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
Apr 03 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
Dec 09 Javascript
JS匿名函数类生成方式实例分析
Nov 26 Javascript
详解AngularJS controller调用factory
May 19 Javascript
angular4自定义组件详解
Sep 28 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
Nov 10 Javascript
通过实例了解Javascript柯里化流程
Mar 03 Javascript
Vue使用screenfull实现全屏效果
Sep 17 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中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
js 覆盖和重载 函数
2009/09/25 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
Python中变量的输入输出实例代码详解
2019/07/28 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
2019/11/22 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
更夫岗位责任制
2014/02/11 职场文书
优秀部门获奖感言
2014/02/14 职场文书
临床医学专业求职信
2014/08/08 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
物资采购管理制度
2015/08/06 职场文书
宪法宣传标语100条
2019/10/15 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
Python pandas求方差和标准差的方法实例
2021/08/04 Python