使用jQuery在HTML表中查找并标记重复项

时间:2015-06-22 15:53:15

标签: jquery html html-table

我有一个动态生成的HTML表格。它不仅会改变纯内容,还会根据具体情况改变列名。

但是可能出现的所有表格中有一个共同点 - 以下列名称中的一个,两个或全部

Vorname (名字), Nachname (姓氏),姓名(姓名)

现在我想检查这些列是否有重复项。然而,我想要尝试遵循一条链,清楚地证明:

"检查列名字,姓氏,名称中的所有值。如果列中的一个或两个不存在,则可以忽略它,并使用现有的一列或多列(例如,只显示名字和姓氏)。

在列中找到重复条目,这些行获取CSS属性' background-color:yellow;。

但是,只有当行的名字和姓氏相同或甚至是名字和名字时,才能识别重复值。取决于存在哪些列。

一个小例子:

<table>
    <tr>
    <td>John</td>
    <td>Doe</td>
    </tr>
    <tr>
    <td>John</td>
    <td>Mc Doe</td>
    </tr>
    </table>

- &GT;由于只有第一个(在此示例中,第一个名称列)与(John)匹配,但第二列(姓氏或名称)不同,因此不会将其识别为重复行。< / p>

不幸的是,我还不太适合JavaScript / jQuery,所以我需要专家帮助=)

2 个答案:

答案 0 :(得分:1)

使用$ .inArray()如果​​找到它将返回-1。您应该对name进行处理,例如修剪空格,全部小写,以便进行正确比较。

&#13;
&#13;
var allName = []; 
var dupicateName = []; 

$('td').each(
  function(index, el) {
    var name = $(el).text();
    if(jQuery.inArray(name, allName)===-1) {
      allName.push(name);
    } else {
      dupicateName.push(name);
    }    
  }
);

console.log(dupicateName);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
    <tr>
    <td>John</td>
    <td>Doe</td>
    </tr>
    <tr>
    <td>John</td>
    <td>Mc Doe</td>
    </tr>
    </table>
<hr/>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

怎么样:

&#13;
&#13;
function highlightDuplicateRows(selector) {
    var index = {},
    getText = function () {
        return $.trim( $(this).text() );
    };
    $(selector).find("tr").each(function (tr) {
        var rowKey = $(this).find("td").map(getText).toArray().join("|");
        if (index.hasOwnProperty(rowKey)) {
            index[rowKey].push(this);
        } else {
            index[rowKey] = [this];
        }
    });
    $.each(index, function (rowKey, rows) {
        $(rows).toggleClass("highlight", rows.length > 1);
    });
}

highlightDuplicateRows("#test");
&#13;
.highlight {
    background-color: yellow;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="test">
    <tr>
        <td>John</td>
        <td>Doe</td>
    </tr>
    <tr>
        <td>John</td>
        <td>Doe</td>
    </tr>
    <tr>
        <td>John</td>
        <td>Mc Doe</td>
    </tr>
</table>
&#13;
&#13;
&#13;