javascript - 使用 jQuery 合并相等的表格单元格

标签 javascript jquery html dom

具有 NxM 值的简单 html 表。 目的是用 jQuery 合并列中的相等单元格。 请注意,一行中没有重复项。

我知道如何隐藏相等的单元格,但是有什么方法可以将一个单元格与一个空单元格合并为一个单元格吗?

html:

<table border="1" id="testTable">
<tr>
    <td>First</td>
    <td>A</td>
    <td>A</td>
</tr>
<tr>
    <td>First</td>
    <td>A</td>
    <td>B</td>
</tr>
<tr>
    <td>Second</td>
    <td>V</td>
    <td>S</td>
</tr>
<tr>
    <td>Third</td>
    <td>D</td>
    <td>H</td>
</tr>
<tr>
    <td>Third</td>
    <td>E</td>
    <td>E</td>       
</tr>
</table>

js:

var seenArray = {};
$('#testTable td').each(function() 
{
    var index =  $(this).index();
    var txt = $(this).text();
    if (seenArray[index] === txt) 
    {
        $(this).text(''); //I think here should be "marging"
    }
    else 
    {
        seenArray[index] = txt;
    }
});

jsFiddle

P.S. 还有一件事,数据最初是在 json 数组中检索的,然后我先执行 .parseJSON() 并将数据放入表中使用:

for (var i = 0; i < obj.length; i++) 
{
    tr = $('<tr/>');
    tr.append("<td>" + obj[i]['columnA'] + "</td>");
    tr.append("<td>" + obj[i]['columnB'] + "</td>");
    tr.append("<td>" + obj[i]['columnC'] + "</td>");
    $('#testTable').append(tr); 
}

UPD

alFReD NSH为 2 个电池做了一个很好的解决方案。 Here是他的解决方案。 但是,如果会有超过 2 个相等的单元格。

最佳答案

如果我明白你的意思,这是我编辑的版本:http://jsfiddle.net/djhU7/4/

所以我没有使用 $(this).text('') 而是这样做的:

    $($this.parent().prev().children()[index]).attr('rowspan', 2);
    $this.hide();

我所做的是将第一个单元格的 rowspan 设置为 2。此属性“将指示单元格扩展的行数”。这将使上面的单元格变大两倍,我用重复信息隐藏了单元格,这样多余的单元格就会消失。请注意,删除单元格将破坏下一个单元格的索引检查。这只是一个快速而肮脏的解决方案,但必须在某处使用 rowspan 属性来实现它。

这是另一个版本,它在将单元格插入表格时设置行跨度,除了它适用于 3 个重复单元格和更多单元格之外,它也更快,因为它避免了表格的重新渲染(尽管它可以进一步优化,但我认为此刻你不想关心它,过早的优化是万恶之源!):http://jsfiddle.net/g7uY9/1/

for (var i = 0; i < obj.length; i++) {


   tr = $('<tr/>');

    addColumn(tr, 'columnA', i);
    addColumn(tr, 'columnB', i);
    addColumn(tr, 'columnC', i);
    $('#testTable').append(tr);

}

function addColumn(tr, column, i) {
    var row = obj[i],
        prevRow = obj[i - 1],
        td = $('<td>' + row[column] + '</td>');
    if (prevRow && row[column] === prevRow[column]) {
        td.hide();
    } else {
        var rowspan = 1;
        for (var j = i; j < obj.length - 1; j++) {
            if (obj[j][column] === obj[j + 1][column]) {
                rowspan++;
            } else {
                break;
            }
        }
        td.attr('rowspan', rowspan);
    }

    tr.append(td);
}

关于javascript - 使用 jQuery 合并相等的表格单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512260/

相关文章:

javascript - 使用 Jquery 输出 XML 代码

javascript - 如何将 HTML 页面转换为 PDF 然后下载?

html - 顶部和底部内边距 2px 有什么意义

javascript - 通过删除属性启用和禁用按钮

javascript - 使用 javascript 链接 <div> 是否可以接受?

javascript - 如何获取图像的宽度并将该值用作高度以使图像相当正方形

html - 带有页眉和页脚的静态侧边栏和流动内容

javascript - jQuery 侧边菜单点击切换更改 gyphicon

javascript - 如何从具有大量重定向的 URL 下载文件

javascript - JQuery onClick 使用类激活页面上的每个元素