如果数据不存在,则附加在表上jQuery

时间:2013-12-06 07:34:31

标签: javascript jquery

我有一个附加行数据的代码。我想要的是提醒用户他们是否会添加表中已有的详细信息。

JSFIDDLE

$('#try').click(function() {   
var text = document.getElementById('add');
    if($('#test td:contains("'+text.value+'")') == true) {
        alert('not allowed');
    }else{   
        $('#test').append('<tr><td>' + text.value + '</td></tr>');
    }
text.value = '';    
});

我的代码中发生了什么,它不会在:contains 上进行过滤。

我的代码有什么问题?

2 个答案:

答案 0 :(得分:4)

首先,您必须测试jQuery对象的长度,以了解DOM中是否有元素:

if ($('#test td:contains("'+text.value+'")').length) {

但如果text.value包含打破选择器的任何内容(例如引号),则代码将失败,因此您最好使用filter直接测试内容:

var elems = $('#test td').filter(function(){
     return this.innerHTML.indexOf(text.value) !== -1
});
if (elems.length) {

Fixed fiddle

你想要的可能实际上不是,测试单元格是否“包含”字符串,但是它是否只包含该字符串(即,你想允许"test 21"和{{1}当已经"test"时。为此,您可以通过以下方式进行过滤:

"test 2"

Fiddle

答案 1 :(得分:1)

尝试:

$('#try').click(function () {
    var test = $("#add").val();
    var sample = $("#add2").val();
    var flag = 0;
    $("#test").find("tr").each(function () { //iterate through rows
        var td1 = $(this).find("td:eq(0)").text(); //get value of first td in row
        var td2 = $(this).find("td:eq(1)").text(); //get value of second td in row
        if ((test == td1) && (sample == td2)) { //compare if test = td1 AND sample = td2
            flag = 1; //raise flag if yes
        }
    });
    if (flag == 1) {
        alert('not allowed');
    } else {
        $('#test').append('<tr><td>' + test + '</td><td>' + sample + '</td></tr>');
    }
    $("#add").val("");
    $("#add2").val("");
});

Updated fiddle here.