0

HTMLテーブルが1つあり、2番目の列の値をグリッドで繰り返さないようにします。

これが私のjQueryです:

$('#tb_cartTable tr td:nth-child(2)').each(function() {
    $ele=$(this).text();
if($ele==$productCode)
    {
        flag="x";
        return false;
    }
});

if($rowCounter>0 && flag=="x")
{
    alert("Duplicate");
}
else
{
    //...
}
4

1 に答える 1

0

1 つの方法は、セルのテキストを、テキストをキーとして持つ JavaScript の複雑な配列に「マップ」し、キーの量をセルの量と比較することです。キーよりもセルが多い場合は、同じテキストのセルがあることを意味します。

このためのコード:

var allCells = $('#tb_cartTable tr td:nth-child(2)');
var textMapping = {};
allCells.each(function() {
    textMapping[$(this).text()] = true;
});

var count = 0;
for (var text in textMapping)
    count++;

if (count !== allCells.length) {
    alert("found duplicate values");
} else {
    alert("no duplicates found");
}

ライブ テスト ケース

上記では大文字と小文字が区別されることに注意してください。「hello」のセルと「Hello」のセルがある場合、それらは異なると見なされ、重複はないと見なされます。大文字と小文字が問題にならない場合、修正は行を次のように変更する単純なケースです。

textMapping[$(this).text().toLowerCase()] = true;

ケースを無視する更新されたテスト ケース。

inArray()特定のケースでは、追加されたすべての値をプレーンな配列に保存してから、jQueryメソッドを使用して配列をチェックできます。

var $addedProductCodes = [];
$("#button_addItem").click(function(event)
{
    $("span.errorText").remove();
    $(".errorField").addClass("notErrorField");

       //Change background color of textbox to normal
       $("#frmRegisterForm :input[type='text']").attr('class','notErrorField');
    $hasError = false;
    $ele = $(event.target);
    if($ele.is("input[type=button]"))
    {    
        $td_productCode1=$("#td_productCode1").val();
        var index = $.inArray($td_productCode1, $addedProductCodes);
        if (index >= 0) {
            alert("You already added this product code in line #" + (index + 1));
        } else {
            $text_productDescription= $("#text_productDescription").val();
            $text_basicDealerPrice = $("#text_basicDealerPrice").val();
            $('#table_viewContent').append("<tr><td>"+$text_productDescription+"</td><td>"+$td_productCode1+"</td><td><td>"+$text_basicDealerPrice+"</td><td><input type='button'  name='deleteRow' id='btn_deleteRow' value='Delete' id='deleteItem' class='deleteItem button-red'></td></tr>");        
            $addedProductCodes.push($td_productCode1);
        }
    }
});

同じ製品コードを追加すると警告が表示され、挿入されないフィドルが更新されました。

于 2013-02-19T11:26:25.543 に答える