js对table的td进行相同内容合并示例详解


在JavaScript中,直接操作HTML表格(`

`)以合并具有相同内容的`
`元素,通常涉及到DOM操作和比较表格单元格的内容。这里我将提供一个简单的示例,说明如何使用纯JavaScript来合并表格中相邻的``元素,如果它们包含相同的内容。

首先,我们假设你有一个如下的HTML表格:


<table id="myTable">
  <tr>
    <td>Apple</td>
    <td>Banana</td>
    <td>Apple</td>
  </tr>
  <tr>
    <td>Orange</td>
    <td>Banana</td>
    <td>Banana</td>
    <td>Banana</td>
  </tr>
</table>

接下来是JavaScript代码,用于遍历表格并合并相同内容的`

`:


function mergeSameCells(tableId) {
    const table = document.getElementById(tableId);
    let lastValue = null;
    let cellSpan = 1;

    // 遍历每一行
    for (let row of table.rows) {
        let firstCell = null;

        // 遍历当前行的每一个单元格
        for (let cell of row.cells) {
            // 如果当前单元格不为空且内容与上一个单元格相同
            if (cell.textContent.trim() !== "" &&
                (lastValue === null || cell.textContent.trim() === lastValue)) {
                // 增加跨度
                cellSpan++;

                // 如果不是第一个单元格,则隐藏它
                if (firstCell !== null) {
                    cell.style.display = 'none';
                } else {
                    // 记录第一个单元格,用于设置colspan
                    firstCell = cell;
                }
            } else {
                // 如果内容与上一个单元格不同,则更新第一个单元格的colspan并重置跨度
                if (firstCell !== null) {
                    firstCell.colSpan = cellSpan;
                }
                firstCell = cell;
                cellSpan = 1;
                lastValue = cell.textContent.trim();
            }
        }

        // 处理每行最后一个单元格的colspan
        if (firstCell !== null) {
            firstCell.colSpan = cellSpan;
        }
    }
}

// 调用函数
mergeSameCells('myTable');

这段代码首先获取指定ID的表格,然后遍历表格的每一行和每一列。它检查每个单元格的内容,如果与上一个单元格相同,则增加`cellSpan`计数器并隐藏该单元格(通过将其`display`属性设置为`none`)。当遇到不同内容的单元格时,它会更新前一个单元格的`colSpan`属性以反映合并的单元格数量,并重置`cellSpan`和`lastValue`以继续处理下一组可能相同的单元格。

请注意,这个示例假设你想要合并的是水平相邻的单元格(即同一行内的单元格)。如果你想要合并垂直相邻的单元格(跨越多行),则逻辑会更复杂,并可能需要额外的数据结构来跟踪哪些单元格应该被合并。