删除列的重复单元格

时间:2012-11-22 10:26:29

标签: javascript jquery

我想删除列的重复单元格。

<table id="test" border="1">
    <tr>
    <td>test1<td>
    <td>test2<td>
    <td>test3<td>
    </tr>
      <tr>
    <td>test4<td>
    <td>test2<td>
    <td>test5<td>
    </tr>
    <tr>
    <td>test6<td>
    <td>test2<td>
    <td>test5<td>
    </tr>
          <tr>
    <td>test6<td>
    <td>test8<td>
    <td>test9<td>
    </tr>
    </table>​​​

output
------
test1        test2        test3    
test4        test2        test5    
test6        test2        test9    
test6        test8        test9    


I want in this format
---------------------
test1        test2        test3    
test4                     test5     
test6                     test9    
             test8           

3 个答案:

答案 0 :(得分:3)

这仅删除列之间的重复文本。它的工作原理是因为按文档顺序选择了元素:

var seen = {};
$('#test td').each(function() {
    // Encode column and content information.
    var key =  $(this).index() +  $(this).text();
    if (seen[key]) {
        $(this).text('');
    }
    else {
        seen[key] = true;
    }
})​;

如果您的单元格跨越多列,则可能无效。

略微调整DEMO

更新:仅适用于连续的小区。我们的想法是跟踪在一列中看到的先前值。

var seen = {};
$('#test td').each(function() {
    var index =  $(this).index();
    var txt = $(this).text();
    if (seen[index] === txt) {
        $(this).text('');
    }
    else {
        seen[index] = txt;
    }
})​;

DEMO(请注意右列中的test5

答案 1 :(得分:1)

您可以尝试这样的事情,

<强> Live Demo

arr = [];
$('#test td').each(function(){
    key = "" + $(this).index() + $.trim($(this).text());
       if(arr.indexOf( key ) == -1)
           arr.push(key );
       else
           $(this).text('')    
});​

答案 2 :(得分:1)

您可以使用此模式here

jsFiddle here

var seen = {};
$('#removeDupes').on('click', function(){
    $('#test tr td').each(function() {
        var txt = $(this).text();
        var index = $(this).parent('tr').children('td').index(this);
        if (!seen[index]){
            seen[index] = new Array();
        }

        if (seen[index][txt]) {
            $(this).html('&nbsp;');
        }
        else {
            seen[index][txt] = true;
        }
    });
});​

请注意,您的</td>元素未正确关闭,根据ahren的评论,删除td entirely可能会导致对齐问题。