1

我有两个表,我一直在使用此代码来删除此处找到的重复数据:

var seen = {};
$('a').each(function() {
    var txt = $(this).text();
    if (seen[txt])
        $(this).remove();
    else
        seen[txt] = true;
});

效果很好我遇到的问题是,如果我无法选择要删除的重复字段,例如,如果我有这样的布局,它将删除带有 class="off" 的 tbody 或不带行的类可以移动,因此可以以任何顺序出现:

<table>
    <tbody class="off">
        <tr>
            <td>somedata</td>
        </tr>
    
    </tbody>
    <tbody>
        <tr>
            <td>somedata</td>
        </tr>
    
    </tbody>
</table>

我想知道是否有人知道如何修改代码以删除始终包含 class="off" 的重复项,或者是否有人有任何其他技术。

感谢任何帮助。

4

2 回答 2

2

这是您可以使用的该代码的改编版本:

var seen = {};
$('tbody').each(function() {
    var elmt = {txt: $(this).text(), ref: this};
    if (seen[elmt.txt]) {
        if ($(seen[elmt.txt].ref).hasClass('off')) {
            $(seen[elmt.txt].ref).remove(); seen[elmt.txt].ref = this;
        } else {
            $(this).remove();
        }
    }
    else
        seen[elmt.txt] = elmt;
});

演示在这里

它将搜索所有tbody具有重复内容的text()内容。如果它找到一个重复的,它会最好删除一个与off类。如果没有人得到它,它将删除找到的最后一个。

例子:

The first tbody will prevail:
<table>
    <tbody class="blu"><tr><td>somedata</td></tr></tbody>
    <tbody class="off"><tr><td>somedata</td></tr></tbody>
    <tbody class="gre"><tr><td>somedata</td></tr></tbody>
</table>

The second tbody will prevail:
<table>
    <tbody class="off"><tr><td>somedata2</td></tr></tbody>
    <tbody class="gre"><tr><td>somedata2</td></tr></tbody>
    <tbody class="blu"><tr><td>somedata2</td></tr></tbody>
</table>
于 2013-06-11T02:32:03.047 回答
0

工作 jsFiddle 演示

正如你所写:

我想知道是否有人知道如何修改代码,以便删除始终包含class="off".

只需获取.off课程并删除它们:

$('tbody.off').remove();

CSS

此外,不需要使用 jQuery。您可以使用 css 隐藏重复项:

tbody.off { display: none; }
于 2013-06-11T02:33:17.247 回答