检测行上的重复项,并在更改值时删除类

时间:2014-09-09 19:06:41

标签: javascript jquery html css

美好的一天,

我有一个表格,可以检测模糊的重复行,我已经实现了它,代码来自stack exchange及其jsfiddle,但我很困惑如何删除类'复制'当我将值更改为唯一值时。

继承我的HTML

 <table class="table" id="FS-table">
 <thead>
                    <tr>
                        <th width="10%">Format Code</th>
                        <th width="60%">Account Title</th>
                        <th width="30%">Accound Number</th>
                    </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td><input id="rowId-1" type="text" class="fs-format-code form-control"></td>
                            <td><span class="accound-desc">Cash on Hand</span></td>
                            <td><span class="account-number">11110</span></td>
                        </tr>
                        <tr>
                            <td><input id="rowId-2" type="text" class="fs-format-code form-control"></td>
                            <td><span class="accound-desc">Petty Cash Fund</span></td>
                            <td><span class="account-number">11120</span></td>
                        </tr>
                        <tr>
                            <td><input id="rowId-3" type="text" class="fs-format-code form-control"></td>
                            <td><span class="accound-desc">CCash in Bank</span></td>
                            <td><span class="account-number">11110</span></td>
                        </tr>
                        <tr>
                            <td><input  id="rowId-4" type="text" class="fs-format-code form-control"></td>
                            <td><span class="accound-desc">Accounts Receivable - Trade</span></td>
                            <td><span class="account-number">11320</span></td>
                        </tr>
                        <tr>
                            <td><input id="rowId-5" type="text" class="fs-format-code form-control"></td>
                            <td><span class="accound-desc">Allowance for Bad Debts</span></td>
                            <td><span class="account-number">11110</span></td>
                        </tr>
                    </tbody>
                </table>

和我的js:

$('input.fs-format-code').on('blur', function(){
        var tableRows = $("#FS-table tbody tr");

        tableRows.each(function(n){
        var FsInput = $(this).find('input.fs-format-code');

        var id = FsInput.attr('id');
        var row = $(this).find('input.fs-format-code').val();


        tableRows.each(function(n){               
            var id2 = $(this).find('input.fs-format-code').attr('id');
            // console.log("id2: "+id2 +", "+"id :"+id);

            if(id2 != id){
                var row2 = $(this).find('input.fs-format-code').val();
                console.log("row2 :"+row2 + ", row :"+row);    
                if (row2 == row)
                {
                   $(this).addClass('duplicate');
                }
                else{
                  //  $(this).removeClass('duplicate');
                }
              }
           });
       });

});

如果我添加了else语句,它将再次删除添加的&#39;重复的&#39; class,我该如何正确地做到这一点,以便它能够正确地检测重复值?谢谢你的帮助。如果您发现我的问题很难理解,请告诉我,以便我可以立即编辑。祝你有个美好的一天!

2 个答案:

答案 0 :(得分:1)

您可以在函数开头删除所有重复的类,然后在内部循环中排除所有标记为重复的类:

$('input.fs-format-code').on('blur', function(){
        var tableRows = $("#FS-table tbody tr");

        /*-- Remove All Duplicate Classes --*/
        tableRows.filter(".duplicate").removeClass("duplicate");

        tableRows.each(function(n){
            var FsInput = $(this).find('input.fs-format-code');

            var id = FsInput.attr('id');
            var row = $(this).find('input.fs-format-code').val();

            /* -- Exclude Duplicates -- */
            tableRows.not(".duplicate").each(function(n){               
                var id2 = $(this).find('input.fs-format-code').attr('id');
                // console.log("id2: "+id2 +", "+"id :"+id);

                if(id2 != id){
                    var row2 = $(this).find('input.fs-format-code').val();
                    console.log("row2 :"+row2 + ", row :"+row);    
                    if (row2 == row)
                    {
                       $(this).addClass('duplicate');
                    }
                }
           });
       });
});

它怀疑它是最有效的方法,但它可能是对当前代码最简单的修改之一。

在此更新小提琴:http://jsfiddle.net/Kcas2/70/

答案 1 :(得分:0)

为了不更改您的代码, 有一个技巧可以确定女巫输入与另一个女巫输入相同,只需改变你的代码if / else就像这样:

if (row2 == row && row2 != '' && row != '')
{
     $(this).addClass('duplicate'+id);
}
 else{
     $(this).removeClass('duplicate'+id);
}

http://jsfiddle.net/yq72tr6b/