当前位置:首页 > JavaScript

js实现表格合并

2026-03-15 15:23:33JavaScript

合并表格单元格的基本方法

使用原生JavaScript合并表格单元格通常需要操作DOM元素,通过设置rowSpancolSpan属性实现。以下是一个基础示例:

js实现表格合并

function mergeCells(tableId, startRow, endRow, col) {
  const table = document.getElementById(tableId);
  for (let i = startRow; i < endRow; i++) {
    const cell = table.rows[i].cells[col];
    if (cell) {
      cell.style.display = 'none';
      table.rows[startRow].cells[col].rowSpan++;
    }
  }
}

动态检测内容合并

自动合并相同内容的相邻单元格更实用。以下方法可检测列内容相同的连续行进行合并:

js实现表格合并

function autoMerge(tableId, columnIndex) {
  const table = document.getElementById(tableId);
  let previousValue = null;
  let startRow = 0;

  for (let i = 0; i < table.rows.length; i++) {
    const currentValue = table.rows[i].cells[columnIndex].textContent;
    if (currentValue === previousValue) {
      table.rows[i].cells[columnIndex].style.display = 'none';
      table.rows[startRow].cells[columnIndex].rowSpan++;
    } else {
      startRow = i;
      previousValue = currentValue;
    }
  }
}

多列合并处理

处理多列合并时需要更复杂的逻辑,以下示例展示如何同时处理行和列合并:

function multiMerge(tableId) {
  const table = document.getElementById(tableId);
  const mergeMap = {};

  // 扫描所有单元格建立合并映射
  for (let r = 0; r < table.rows.length; r++) {
    for (let c = 0; c < table.rows[r].cells.length; c++) {
      const cell = table.rows[r].cells[c];
      const value = cell.textContent;
      if (!mergeMap[value]) mergeMap[value] = [];
      mergeMap[value].push({row: r, col: c});
    }
  }

  // 执行合并
  Object.values(mergeMap).forEach(group => {
    if (group.length > 1) {
      const firstCell = table.rows[group[0].row].cells[group[0].col];
      firstCell.rowSpan = group[group.length-1].row - group[0].row + 1;
      for (let i = 1; i < group.length; i++) {
        table.rows[group[i].row].cells[group[i].col].style.display = 'none';
      }
    }
  });
}

使用jQuery简化操作

如果项目中已引入jQuery,合并操作可以更简洁:

function jQueryMerge(tableSelector, columnIndex) {
  let prevValue = '';
  let $prevCell = null;

  $(tableSelector + ' tr').each(function() {
    const $cell = $(this).find('td').eq(columnIndex);
    const currentValue = $cell.text();

    if (currentValue === prevValue) {
      $cell.hide();
      $prevCell.attr('rowSpan', parseInt($prevCell.attr('rowSpan') || 1) + 1);
    } else {
      prevValue = currentValue;
      $prevCell = $cell;
    }
  });
}

注意事项

  • 合并操作应在DOM加载完成后执行,通常放在DOMContentLoaded事件中
  • 动态生成的表格需要在数据渲染完成后调用合并函数
  • 合并后会影响表格结构,可能需要对样式进行额外调整
  • 大量数据合并可能影响性能,建议分批处理

完整示例

<table id="dataTable">
  <tr><td>A</td><td>1</td></tr>
  <tr><td>A</td><td>2</td></tr>
  <tr><td>B</td><td>3</td></tr>
</table>

<script>
document.addEventListener('DOMContentLoaded', () => {
  autoMerge('dataTable', 0);
});
</script>

以上方法提供了不同场景下的表格合并解决方案,可根据实际需求选择适合的方式或组合使用。

标签: 表格js
分享给朋友:

相关文章

vue实现导出表格

vue实现导出表格

Vue 中实现表格导出 使用 xlsx 库导出 Excel 安装 xlsx 库: npm install xlsx --save 在 Vue 组件中引入并使用: import XLSX from…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

vue表格实现教学

vue表格实现教学

基础表格实现 使用 Vue 的 v-for 指令渲染数组数据到表格中。 <template> <table> <thead> <…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…