jQuery实现合并表格单元格中相同行操作示例

本文实例讲述了jQuery实现合并表格单元格中相同行操作。分享给大家供大家参考,具体如下:

合并的方法

$("#tableid").mergeCell({
  cols:[X,X] ///参数为要合并的列
})
/**
* 操作表格 合并单元格 行
* 2016年12月13日16:00:41
*/
(function($) {
  // 看过jquery源码就可以发现$.fn就是$.prototype, 只是为了兼容早期版本的插件
  // 才保留了jQuery.prototype这个形式
  $.fn.mergeCell = function(options) {
    return this.each(function() {
      var cols = options.cols;
      for ( var i = cols.length - 1; cols[i] != undefined; i--) {
       // fixbug console调试
       // console.debug(cols[i]);
       mergeCell($(this), cols[i]);
      }
      dispose($(this));
    });
  };
  // 如果对javascript的closure和scope概念比较清楚, 这是个插件内部使用的private方法
  // 具体可以参考本人前一篇随笔里介绍的那本书
  function mergeCell($table, colIndex) {
    $table.data('col-content', ''); // 存放单元格内容
    $table.data('col-rowspan', 1); // 存放计算的rowspan值 默认为1
    $table.data('col-td', $());   // 存放发现的第一个与前一行比较结果不同td(jQuery封装过的), 默认一个"空"的jquery对象
    $table.data('trNum', $('tbody tr', $table).length); // 要处理表格的总行数, 用于最后一行做特殊处理时进行判断之用
    // 我们对每一行数据进行"扫面"处理 关键是定位col-td, 和其对应的rowspan
    $('tbody tr', $table).each(function(index) {
      // td:eq中的colIndex即列索引
      var $td = $('td:eq(' + colIndex + ')', this);
      // 取出单元格的当前内容
      var currentContent = $td.html();
      // 第一次时走此分支
      if ($table.data('col-content') == '') {
        $table.data('col-content', currentContent);
        $table.data('col-td', $td);
      } else {
        // 上一行与当前行内容相同
        if ($table.data('col-content') == currentContent) {
          // 上一行与当前行内容相同则col-rowspan累加, 保存新值
          var rowspan = $table.data('col-rowspan') + 1;
          $table.data('col-rowspan', rowspan);
          // 值得注意的是 如果用了$td.remove()就会对其他列的处理造成影响
          $td.hide();
          // 最后一行的情况比较特殊一点
          // 比如最后2行 td中的内容是一样的, 那么到最后一行就应该把此时的col-td里保存的td设置rowspan
          if (++index == $table.data('trNum'))
            $table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
        } else { // 上一行与当前行内容不同
          // col-rowspan默认为1, 如果统计出的col-rowspan没有变化, 不处理
          if ($table.data('col-rowspan') != 1) {
            $table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
          }
          // 保存第一次出现不同内容的td, 和其内容, 重置col-rowspan
          $table.data('col-td', $td);
          $table.data('col-content', $td.html());
          $table.data('col-rowspan', 1);
        }
      }
    });
  }
  // 同样是个private函数 清理内存之用
  function dispose($table) {
    $table.removeData();
  }
})(jQuery);

示例html代码

<html>
<head>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>酒店分房表</title>
<style mce_bogus="1" type="text/css">
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, caption, tfoot, thead, th, s { margin:0; padding:0; border:0; font-size:100%; vertical-align:baseline; font-style:normal; text-decoration:none;word-wrap: break-word;}
body {font-family: SimSun;
   font-style:italic;
   font-weight:bold;
   font-size:12px;
       background:none;margin-left: auto;margin-right: auto;}
a { color:#000000; font-size:14px;line-height:26px; font-family:SimSun; text-decoration:none; }
a:hover { color:#000000; font-size:14px; line-height:26px; font-family:SimSun; text-decoration:none;}
.bt{color: #121212;font-size: 26px; line-height:80px;text-align: center;}
.A4 { margin:auto;width: 780px;}
.title {
  color: #0070C0;
}
</style>
</head>
<body>
 <div class="A4">
   <br/><br/>
   <div align="center">
     <h1><strong style="font-size: 24;">酒店信息和分房表</strong></h1>
     <br/><br/>
   </div>
   <table width="780" border="1" cellspacing="0" cellpadding="20" style="table-layout:fixed; word-break:break-strict;repeat-header:yes;repeat-footer:yes;">
     <tr>
      <td width="140" align="center"><b>居住城市</b></td>
      <td width="120" align="center"><b>入住日期</b></td>
      <td width="120" align="center"><b>离店日期</b></td>
      <td width="200" align="center"><b>酒店名称</b></td>
      <td width="200" align="center"><b>地址</b></td>
     </tr>
        <tbody>
      <tr>
        <td align="center"></td>
        <td align="center">2016-12-11</td>
        <td align="center"> 2016-12-12</td>
        <td align="center"> 性格里拉</td>
        <td align="center"> 上海</td>
      </tr>
     </tbody>
   </table>
   <br/><br/>
    <table width="780" border="1" cellspacing="0" cellpadding="20" style="table-layout:fixed; word-break:break-strict;repeat-header:yes;repeat-footer:yes;">
     <tr>
      <td width="140" align="center"><b>房间类型</b></td>
      <td width="120" align="center"><b>双床房</b></td>
     </tr>
     <tbody>
      <tr>
        <td align="center"><b>数量共计: 5 间</b></td>
        <td align="center">5</td>
      </tr>
     </tbody>
   </table>
   <br/><br/>
   <table id="table_4" width="780" border="1" cellspacing="0" cellpadding="0" style="table-layout:fixed; word-break:break-strict;repeat-header:yes;repeat-footer:yes;">
     <tr>
      <td width="50" align="center"><b>Room</b></td>
      <td width="50" align="center"><b>Adult</b></td>
      <td width="120" align="center"><b>中文名</b></td>
      <td width="200" align="center"><b>Name</b></td>
      <td width="50" align="center"><b>Sex</b></td>
      <td width="200" align="center"><b>Room Type</b></td>
     </tr>
      <tr>
        <td align="center">1</td>
        <td align="center">1</td>
        <td align="center"> 熊哥1</td>
        <td align="center"> xsw </td>
        <td align="center"> 女</td>
        <td align="center"> 双床房1</td>
      </tr>
      <tr>
        <td align="center">1</td>
        <td align="center">2</td>
        <td align="center"> 熊哥2</td>
        <td align="center"> xsw2222222 </td>
        <td align="center"> 男</td>
        <td align="center"> 双床房1</td>
      </tr>
      <tr>
        <td align="center">1</td>
        <td align="center">3</td>
        <td align="center"> 杰森.斯坦森</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房1</td>
      </tr>
      <tr>
        <td align="center">2</td>
        <td align="center">4</td>
        <td align="center"> 李锡龄</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房2</td>
      </tr>
      <tr>
        <td align="center">2</td>
        <td align="center">5</td>
        <td align="center"> 李孝利</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房2</td>
      </tr>
      <tr>
        <td align="center">2</td>
        <td align="center">6</td>
        <td align="center"> 刘德国</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房2</td>
      </tr>
      <tr>
        <td align="center">3</td>
        <td align="center">7</td>
        <td align="center"> 杰森.四米</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房3</td>
      </tr>
      <tr>
        <td align="center">3</td>
        <td align="center">8</td>
        <td align="center"> 凯威.斯坦森</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房3</td>
      </tr>
      <tr>
        <td align="center">3</td>
        <td align="center">9</td>
        <td align="center"> 杰森史蒂文</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房3</td>
      </tr>
      <tr>
        <td align="center">4</td>
        <td align="center">10</td>
        <td align="center"> 5</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房4</td>
      </tr>
      <tr>
        <td align="center">4</td>
        <td align="center">11</td>
        <td align="center"> 3</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房4</td>
      </tr>
      <tr>
        <td align="center">4</td>
        <td align="center">12</td>
        <td align="center"> 1</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房4</td>
      </tr>
      <tr>
        <td align="center">4</td>
        <td align="center">13</td>
        <td align="center"> 杰森.托马鞍山</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房4</td>
      </tr>
      <tr>
        <td align="center">5</td>
        <td align="center">14</td>
        <td align="center"> 孙露</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房5</td>
      </tr>
      <tr>
        <td align="center">5</td>
        <td align="center">15</td>
        <td align="center"> 李红梅</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房5</td>
      </tr>
      <tr>
        <td align="center">5</td>
        <td align="center">16</td>
        <td align="center"> 卓越杀</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房5</td>
      </tr>
      <tr>
        <td align="center">5</td>
        <td align="center">17</td>
        <td align="center"> 4</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房5</td>
      </tr>
      <tr>
        <td align="center">5</td>
        <td align="center">18</td>
        <td align="center"> 12</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房5</td>
      </tr>
      <tr>
        <td align="center">5</td>
        <td align="center">19</td>
        <td align="center"> 16</td>
        <td align="center"> Jason Statham</td>
        <td align="center"> 男</td>
        <td align="center"> 双床房5</td>
      </tr>
   </table>
   <br/><br/>
 </div>
 </body>
 <script type="text/javascript">
 /**
 * 操作表格 合并单元格 行
 * 2016年12月13日16:00:41
 */
(function($) {
  // 看过jquery源码就可以发现$.fn就是$.prototype, 只是为了兼容早期版本的插件
  // 才保留了jQuery.prototype这个形式
  $.fn.mergeCell = function(options) {
    return this.each(function() {
      var cols = options.cols;
      for ( var i = cols.length - 1; cols[i] != undefined; i--) {
       // fixbug console调试
       // console.debug(cols[i]);
       mergeCell($(this), cols[i]);
      }
      dispose($(this));
    });
  };
  // 如果对javascript的closure和scope概念比较清楚, 这是个插件内部使用的private方法
  // 具体可以参考本人前一篇随笔里介绍的那本书
  function mergeCell($table, colIndex) {
    $table.data('col-content', ''); // 存放单元格内容
    $table.data('col-rowspan', 1); // 存放计算的rowspan值 默认为1
    $table.data('col-td', $());   // 存放发现的第一个与前一行比较结果不同td(jQuery封装过的), 默认一个"空"的jquery对象
    $table.data('trNum', $('tbody tr', $table).length); // 要处理表格的总行数, 用于最后一行做特殊处理时进行判断之用
    // 我们对每一行数据进行"扫面"处理 关键是定位col-td, 和其对应的rowspan
    $('tbody tr', $table).each(function(index) {
      // td:eq中的colIndex即列索引
      var $td = $('td:eq(' + colIndex + ')', this);
      // 取出单元格的当前内容
      var currentContent = $td.html();
      // 第一次时走此分支
      if ($table.data('col-content') == '') {
        $table.data('col-content', currentContent);
        $table.data('col-td', $td);
      } else {
        // 上一行与当前行内容相同
        if ($table.data('col-content') == currentContent) {
          // 上一行与当前行内容相同则col-rowspan累加, 保存新值
          var rowspan = $table.data('col-rowspan') + 1;
          $table.data('col-rowspan', rowspan);
          // 值得注意的是 如果用了$td.remove()就会对其他列的处理造成影响
          $td.hide();
          // 最后一行的情况比较特殊一点
          // 比如最后2行 td中的内容是一样的, 那么到最后一行就应该把此时的col-td里保存的td设置rowspan
          if (++index == $table.data('trNum'))
            $table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
        } else { // 上一行与当前行内容不同
          // col-rowspan默认为1, 如果统计出的col-rowspan没有变化, 不处理
          if ($table.data('col-rowspan') != 1) {
            $table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
          }
          // 保存第一次出现不同内容的td, 和其内容, 重置col-rowspan
          $table.data('col-td', $td);
          $table.data('col-content', $td.html());
          $table.data('col-rowspan', 1);
        }
      }
    });
  }
  // 同样是个private函数 清理内存之用
  function dispose($table) {
    $table.removeData();
  }
})(jQuery);
 $('#table_4').mergeCell({
    cols:[0,5]
  });
 </script>
</html>

运行结果:

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于jQuery相关内容感兴趣的读者可查看本站专题:《jQuery表格(table)操作技巧汇总》、《jQuery操作xml技巧总结》、《jQuery form操作技巧汇总》、《jQuery常用插件及用法总结》、《jQuery扩展技巧总结》及《jquery选择器用法总结》

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

(0)

相关推荐

  • jquery miniui 教程 表格控件 合并单元格应用

    表格:合并单元格 参考示例:合并单元格 调用方法:margeCells.如下代码: 复制代码 代码如下: grid.on("load", onLoad); function onLoad(e) { var grid = e.sender; var marges = [ { rowIndex: 1, columnIndex: 0, rowSpan: 1, colSpan: 2 }, { rowIndex: 3, columnIndex: 0, rowSpan: 4, colSpan: 3

  • 使用jQuery 操作table 完成单元格合并的实例

    比较表格的内容.判断是否合并单元格: tr = $("#printPage tr").length;// 获取当前表格中tr的个数 var mark = 0; //要合并的单元格数 var index = 0; //起始行数 /* * 要合并单元格,需要存储两个参数, * 1,开始合并的单元格的第一行的行数, * 2.要合并的单元格的个数 **/ console.log(tr); //判断 若只有一行数据,则不做调整 if(tr <= 2){ }else{ //var i=1 比

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

    代码: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <title>merge.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this

  • 合并table相同单元格的jquery插件分享(很精简)

    效果如下 原表格: col0 col1 col2 col3 SuZhou 11111 22222 SuZhouCity SuZhou 33333 44444 SuZhouCity SuZhou 55555 66666 SuZhouCity ShangHai 77777 88888 ShangHaiCity ShangHai uuuuu hhhhh ShangHaiCity ShangHai ggggg ccccc ShangHaiCity GuangZhou ttttt eeeee GuangZ

  • jquery 合并内容相同的单元格(示例代码)

    如下所示: 复制代码 代码如下: function _w_table_rowspan(_w_table_id,_w_table_colnum){        _w_table_firsttd = "";        _w_table_currenttd = "";        _w_table_SpanNum = 0;        _w_table_Obj = $(_w_table_id + " tr td:nth-child(" + _

  • jquery 动态合并单元格的实现方法

    如下所示: ////在table的第二行的位置添加一行: var tbl_elm = $("#dgList"); $('<tr><td colspan=\'2\'>xxxxxx</td></tr>').insertBefore($("TR", tbl_elm).eq(1)) ////table中指定行第N列合并单元格(合并后会多出一列,删除N+1单元格即可) var tds = $("#dgList .Tab

  • 基于jQuery的合并表格中相同文本的相邻单元格的代码

    ONE 已经生成的数据表格大致内容如下: 地区 地区 商品代码 商品名称 数量 有效期至 距效期(月) 产品批号 规格 单位 条形码 广东 深圳 00028 红花油               广东 深圳 00028 红花油               广东 深圳 00028 红花油               广东 广州 00027 白花油               广东 广州 00028 红花油               广东 深圳 00028 红花油               广东

  • 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.

  • 基于jquery的合并table相同单元格的插件(精简版)

    效果如下 原表格: col0 col1 col2 col3 SuZhou 11111 22222 SuZhouCity SuZhou 33333 44444 SuZhouCity SuZhou 55555 66666 SuZhouCity ShangHai 77777 88888 ShangHaiCity ShangHai uuuuu hhhhh ShangHaiCity ShangHai ggggg ccccc ShangHaiCity GuangZhou ttttt eeeee GuangZ

  • 基于JQuery实现相同内容合并单元格的代码

    web前端开发的时候经常会遇到要做表单的页面或者做一些表格的效果如相同内容要同一个单元格里面显示,一般的方法是table里面在套table但是这种方法会增加页面的负担影响页面加载速度但是如果用DIV有不好控制写的css样式要很多,那怎么办呢?我们就中和下利用JQuery来和他一个table里面相同内容的单元格,这里代码跟大家分享下,希望对大家有用,如下: 头部JQuery代码 复制代码 代码如下: <script type="text/javascript"> jQuery

  • jquery合并表格中相同文本的相邻单元格

    一.效果 二.代码 <!DOCTYPE HTML> <html> <head> <title>Example</title> <meta charset="utf-8"/> <style></style> <script src="js/jquery-2.1.4.min.js"></script> </head> <body>

随机推荐