JQuery实现表格中相同单元格合并示例代码


Posted in Javascript onJune 26, 2013

代码:

<!DOCTYPE html> 
<html> 
<head> 
<title>merge.html</title> 
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
<meta http-equiv="description" content="this is my page"> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
<link rel="stylesheet" href="css/jquery-ui.css" /> 
<script src="js/jquery.js"></script> 
<script src="js/jquery-ui.js"></script> 
<script type="text/javascript"> 
function merge1(){ //可实现单元格,通过给 开始cell的比较 
var totalRow = $("#tbl").find("tr").length; 
var totalCol = $("#tbl").find("tr").eq(0).find("td").length; 
for(var col=totalCol-1;col>=1;col--){ 
spanNum =1; 
startCell = $("#tbl").find("tr").eq(totalRow-1).find("td").eq(col); 
for(var row = totalRow-1;row>=1;row--){ 
targetCell = $("#tbl").find("tr").eq(row-1).find("td").eq(col); 
if(startCell.text() == targetCell.text() && startCell.text()!=""){ 
spanNum++; 
targetCell.attr("rowSpan",spanNum); 
startCell.remove(); 
}else{ 
spanNum =1; 
} 
startCell = targetCell; 
} 
} 
} 
function merge2() { //可实现合并单元格,上下行来比较 
var totalCols = $("#tbl").find("tr:eq(0)").find("td").length; 
var totalRows = $("#tbl").find("tr").length; 
for ( var i = totalCols-1; i >= 1; i--) { 
for ( var j = totalRows-1; j >= 1; j--) { 
startCell = $("#tbl").find("tr").eq(j).find("td").eq(i); 
targetCell = $("#tbl").find("tr").eq(j - 1).find("td").eq(i); 
if (startCell.text() == targetCell.text() && targetCell.text() != "") { 
targetCell.attr("rowSpan", (startCell.attr("rowSpan")==undefined)?2:(eval(startCell.attr("rowSpan"))+1)); 
startCell.remove(); 
} 
} 
} 
} 
/*先合并,使用style 的display:none将相同元素隐藏,然后再remove 
*/ 
function merge3(){ 
var totalCols = $("#tbl").find("tr:eq(0)").find("td").length; 
var totalRows = $("#tbl").find("tr").length; 
for(var col=totalCols-1;col>=1;col--){ 
spanNum =1; 
startCell = $("#tbl").find("tr").eq(totalRows-1).find("td").eq(col); 
for(var row = totalRows-1;row>=1;row--){ 
targetCell = $("#tbl").find("tr").eq(row-1).find("td").eq(col); 
if(startCell.text() == targetCell.text() && startCell.text()!=""){ 
spanNum++; 
targetCell.attr("rowSpan",spanNum); 
startCell.attr("style","visibility:hidden"); 
// startCell.attr("style","display:none"); 
}else{ 
spanNum =1; 
} 
startCell = targetCell; 
} 
} 
for(var j=totalCols-1;j>=1;j--){ 
for(var i=totalRows-1;i>=1;i--){ 
cell = $("#tbl").find("tr").eq(i).find("td").eq(j); 
if(cell.attr("style")!=undefined){ 
if(cell.attr("style")=="visibility:hidden"){ 
cell.remove(); 
} 
} 
} 
} 
} 
function merge4(){ //与merge3方法类似,目的是看一下 display:none与visibility:hidden的效果区别 
var totalCols = $("#tbl").find("tr:eq(0)").find("td").length; 
var totalRows = $("#tbl").find("tr").length; 
for(var col=totalCols-1;col>=1;col--){ 
spanNum =1; 
startCell = $("#tbl").find("tr").eq(totalRows-1).find("td").eq(col); 
for(var row = totalRows-1;row>=1;row--){ 
targetCell = $("#tbl").find("tr").eq(row-1).find("td").eq(col); 
if(startCell.text() == targetCell.text() && startCell.text()!=""){ 
spanNum++; 
targetCell.attr("rowSpan",spanNum); 
startCell.attr("style","display:none"); 
// startCell.attr("style","display:none"); 
}else{ 
spanNum =1; 
} 
startCell = targetCell; 
} 
} 
for(var j=totalCols-1;j>=1;j--){ 
for(var i=totalRows-1;i>=1;i--){ 
cell = $("#tbl").find("tr").eq(i).find("td").eq(j); 
if(cell.attr("style")!=undefined){ 
if(cell.attr("style")=="display:none"){ 
cell.remove(); 
} 
} 
} 
} 
} 
</script> 
</head> 
<body> 
<table id="tbl" cellpadding="3" border=1> 
<thead> 
<tr> 
<td>销售时间</td> 
<td>裙子</td> 
<td>裤子</td> 
<td>风衣</td> 
<td>鞋子</td> 
</tr> 
</thead> 
<tbody> 
<tr> 
<td>8:00-9:00</td> 
<td>3</td> 
<td></td> 
<td>4</td> 
<td></td> 
</tr> 
<tr> 
<td>9:00-10:00</td> 
<td>3</td> 
<td>2</td> 
<td>5</td> 
<td>3</td> 
</tr> 
<tr> 
<td>10:00-11:00</td> 
<td>3</td> 
<td>2</td> 
<td></td> 
<td>1</td> 
</tr> 
<tr> 
<td>11:00-12:00</td> 
<td></td> 
<td></td> 
<td></td> 
<td>1</td> 
</tr> 
</tbody> 
</table> 
<input type="button" value="合并" id="merge" onclick="merge2();"> 
</body> 
</html>

总结:在使用remove的时候,一定要注意如果 从list的开始元素循环下去,remove掉一个元素后,有些元素就找不到了或者说不是要找的那个元素;最好是从后面开始循环。
Javascript 相关文章推荐
理解Javascript_09_Function与Object
Oct 16 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 Javascript
jquery清空textarea等输入框实现代码
Apr 22 Javascript
JS随机生成不重复数据的实例方法
Jul 17 Javascript
Node.js的包详细介绍
Jan 14 Javascript
javascript中局部变量和全局变量的区别详解
Feb 27 Javascript
JS实现点击按钮自动增加一个单元格的方法
Mar 09 Javascript
JS正则子匹配实例分析
Dec 22 Javascript
微信通过页面(H5)直接打开本地app的解决方法
Sep 09 Javascript
jQuery开发仿QQ版音乐播放器
Jul 10 jQuery
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
nestjs返回给前端数据格式的封装实现
Feb 22 Javascript
基于js disabled=&quot;false&quot;不起作用的解决办法
Jun 26 #Javascript
jQuery实现类似淘宝购物车全选状态示例
Jun 26 #Javascript
如何让页面加载完成后执行js
Jun 26 #Javascript
文件编码导致jquery失效的解决方法
Jun 26 #Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
Jun 26 #Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 #Javascript
中文路径导致unitpngfix.js不正常的解决方法
Jun 26 #Javascript
You might like
10条PHP高级技巧[修正版]
2011/08/02 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
PHPThumb图片处理实例
2014/05/03 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
JS防止网页被嵌入iframe框架的方法分析
2016/09/13 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
详解python中*号的用法
2019/10/21 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Python 在函数上添加包装器
2020/07/28 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
python自动化发送邮件实例讲解
2021/01/04 Python
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
越南母婴用品购物网站:Kids Plaza
2020/04/09 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
实习生自我鉴定范文
2013/12/05 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
金融系应届毕业生求职信
2014/05/26 职场文书
好人好事演讲稿
2014/09/01 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
针对吵架老公保证书
2015/05/08 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
总结Python变量的相关知识
2021/06/28 Python
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL