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测试题练习代码
Oct 10 Javascript
JavaScript?Apple设备检测示例代码
Nov 15 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
Aug 18 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
Dec 31 Javascript
jquery插件EasyUI中form表单提交实例分享
Jan 11 Javascript
详解获取jq ul第一个li定位的四种解决方案
Nov 23 Javascript
javascript 数据存储的常用函数总结
Jun 01 Javascript
ES6学习笔记之map、set与数组、对象的对比
Mar 01 Javascript
官方推荐react-navigation的具体使用详解
May 08 Javascript
MVVM框架下实现分页功能示例
Jun 14 Javascript
create-react-app安装出错问题解决方法
Sep 04 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
May 13 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
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
javascript运算符——位运算符全面介绍
2016/07/14 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
python numpy库np.percentile用法说明
2020/06/08 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
生产部岗位职责范文
2014/02/07 职场文书
目标管理责任书
2014/04/15 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
保安辞职信范文
2015/02/28 职场文书
办公室管理规章制度
2015/08/04 职场文书
关于教师节的广播稿
2015/08/19 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python