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

 更新时间:2013年06月26日 17:50:15   作者:  
一定要注意如果从list的开始元素循环下去,remove掉一个元素后,有些元素就找不到了或者说不是要找的那个元素,感兴趣的各位可以研究下哈

代码:

复制代码 代码如下:

<!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掉一个元素后,有些元素就找不到了或者说不是要找的那个元素;最好是从后面开始循环。

相关文章

  • jquery插件jSignature实现手动签名

    jquery插件jSignature实现手动签名

    在IE7~IE8这种不支持HTML5的浏览器上,是利用Flash嵌入的方式实现的签名处理,在支持的HTML5的浏览器上默认采用canvas标签处理签名,可以生成 PNG格式、SVG格式的签名图片。非常适合在IPAD等移动客户端上实现手写签名的,该插件基于JQuery
    2015-05-05
  • jQuery点击自身以外地方关闭弹出层的简单实例

    jQuery点击自身以外地方关闭弹出层的简单实例

    本篇文章主要是对jQuery点击自身以外地方关闭弹出层的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • jQuery平滑旋转幻灯片特效代码分享

    jQuery平滑旋转幻灯片特效代码分享

    这篇文章主要介绍了jQuery平滑旋转幻灯片特效,一个具有自己特色的幻灯片会吸引用户的注意力,让用户产生浏览网站的兴趣至关重要,现在小编推荐给大家一款特别棒的幻灯片,感兴趣的小伙伴可以参考下。
    2015-09-09
  • jQuery实现简单的轮播图效果

    jQuery实现简单的轮播图效果

    这篇文章主要为大家详细介绍了jQuery实现简单的轮播图效果,实现自动播放,能手动切换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • jQuery之浮动窗口实现代码(两种方法)

    jQuery之浮动窗口实现代码(两种方法)

    今天公司要求实现浮动窗口效果,自己看了不少资料终于实现此效果。用jQ实现浮动窗口功能,弹出窗口时背景变暗.
    2010-09-09
  • jQuery学习笔记 操作jQuery对象 属性处理

    jQuery学习笔记 操作jQuery对象 属性处理

    HTML文档,不但有一系列语义标签,每个标签下属还有一系列属性节点。自然我们也想去操作这些属性节点。格式仍然为$(selector).方法
    2012-09-09
  • Jquery日期选择datepicker插件用法实例分析

    Jquery日期选择datepicker插件用法实例分析

    这篇文章主要介绍了Jquery日期选择datepicker插件用法,实例分析了datepicker插件的相关使用技巧,需要的朋友可以参考下
    2015-06-06
  • 基于jquery的让页面控件不可用的实现代码

    基于jquery的让页面控件不可用的实现代码

    当用户需要某项功能时要填写一些表单信息,在填写完成并提交后,该部分信息是不允许再次修改的。表单包含TextBox、DropDownList、CheckBox等控件。
    2010-04-04
  • 前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)

    前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)

    在公司做这个项目已经6个多月了,总结一些问题,也算是抛砖引玉吧,希望更多的朋友一起分享一些技巧。
    2010-03-03
  • jQuery插件simplePagination的使用方法示例

    jQuery插件simplePagination的使用方法示例

    这篇文章主要介绍了jQuery插件simplePagination的使用方法,结合实例形式分析了jQuery插件simplePagination实现表单分页相关操作技巧与注意事项,需要的朋友可以参考下
    2020-04-04

最新评论