js控制table单元格 行 列 相同内容合并


<!DOCTYPE>
<HTML>

<HEAD>
  <style>

  </style>
</HEAD>


<BODY>
  <TABLE border="1">
    <thead id="tb" οnclick="findcell()">
      <TR>
        <TD>国家</TD>
        <TD>国家</TD>
        <TD>国家1</TD>
      </TR>
      <TR>
        <TD>国家555</TD>
        <TD>河南</TD>
        <TD>国家2</TD>
      </TR>
      <TR>
        <TD>中国</TD>
        <TD>四川</TD>
        <TD>国家3</TD>
      </TR>
      <TR>
        <TD>中国</TD>
        <TD>四川</TD>
        <TD>北京4</TD>
      </TR>
      <TR>
        <TD>美国</TD>
        <TD>纽约</TD>
        <TD>国家4</TD>
      </TR>
      <TR>
        <TD>美国</TD>
        <TD>洛杉矶</TD>
        <TD>国家4</TD>
      </TR>
      <TR>
        <TD>英国</TD>
        <TD>英国</TD>
        <TD>国家4</TD>
      </TR>
    </thead>
    <tbody>
      <tr>
        <td>不合并</td>
        <td>不合并</td>
        <TD>不合并</TD>
      </tr>
    </tbody>
  </TABLE>

  <button onclick="SpanGrid('tb')">合并</button>
</BODY>
<script>

  let rowBeginIndex
  let colIndex

  (function () {   //定义函数
    var tr = document.getElementsByTagName("tr");
    for (var i = 0; i < tr.length; i++) {
      var tds = tr[i].children;
      for (var j = 0; j < tds.length; j++) {
        tds[j].onclick = (function () {
          var row = i + 1, col = j + 1;
          return function () {
            rowBeginIndex = row - 1
            colIndex = col - 1
            console.log("第" + row + "行" + col + "列");
          }
        })();
      }
    }

  })();


  // tabObjId  id
  // colIndex 第几列
  // rowBeginIndex 第几行

  function SpanGrid(tabObjId) {


    var tabObj = document.getElementById(tabObjId);
    if (tabObj != null) {
      var i, j, m, k, q, w, e, r;


      var intSpan;
      var strTemp;
      m = 0;

      //这个For循环是合并行
      console.log('tabObj.rows', tabObj.rows[0].cells)
      // colIndex 开始遍历列索引
      // for (colIndex; colIndex < tabObj.rows[0].cells.length; colIndex++) {

      // 遍历开始行
      for (i = rowBeginIndex; i < tabObj.rows.length; i++) {
        intSpan = 1;
        m++;
        // 遍历的 第几行第几列
        strTemp = tabObj.rows[i].cells[colIndex].innerText;
        for (j = i + 1; j < tabObj.rows.length; j++) {
          // 和下一行比较如果相同就合并,不同继续遍历
          if (strTemp == tabObj.rows[j].cells[colIndex].innerText) {
            intSpan++;
            tabObj.rows[i].cells[colIndex].rowSpan = intSpan;
            tabObj.rows[j].cells[colIndex].style.display = "none";

          }
          else {
            break;
          }
        }


      }
      // }
      //这个For循环是合并列(无需合并列可删除)
      for (q = rowBeginIndex; q < tabObj.rows.length; q++) {

        for (w = 0; w < tabObj.rows[0].cells.length; w++) {
          intSpan = 1;
          colspan = tabObj.rows[q].cells[w].rowSpan;
          strTemp = tabObj.rows[q].cells[w].innerText;
          if ("none" == tabObj.rows[q].cells[w].style.display) {
            continue;
          }
          for (e = w + 1; e < tabObj.rows[q].cells.length; e++) {
            if ("none" == tabObj.rows[q].cells[e].style.display) {
              continue;
            }
            colspan1 = tabObj.rows[q].cells[e].rowSpan
            if (strTemp == tabObj.rows[q].cells[e].innerText && (colspan ==
              colspan1)) {
              intSpan++;
              tabObj.rows[q].cells[w].colSpan = intSpan;
              tabObj.rows[q].cells[e].style.display = "none";
            }
            else {
              break;
            }
          }


        }
        break;

      }

      i = j - 1;
    }
  }


</script>

</HTML>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值