Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果jQuery中不存在数据,则追加到表上_Javascript_Jquery - Fatal编程技术网

Javascript 如果jQuery中不存在数据,则追加到表上

Javascript 如果jQuery中不存在数据,则追加到表上,javascript,jquery,Javascript,Jquery,我有一个附加行数据的代码。我想提醒用户是否要添加表中已有的详细信息 $('#try')。单击(函数(){ var text=document.getElementById('add'); if($('#test td:contains('+text.value+'))==true){ 警报(“不允许”); }否则{ $('#test').append(''+text.value+''); } text.value=''; }); 我的代码中发生的事情是,它不会在第行过滤:contains 我

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

$('#try')。单击(函数(){
var text=document.getElementById('add');
if($('#test td:contains('+text.value+'))==true){
警报(“不允许”);
}否则{
$('#test').append(''+text.value+'');
}
text.value='';
});
我的代码中发生的事情是,它不会在第行过滤:contains


我的代码有什么问题?

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

if ($('#test td:contains("'+text.value+'")').length) {
但是如果
text.value
包含任何破坏选择器的内容,例如引号,则代码将失败,因此您最好直接使用
过滤器测试内容:

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

实际上,您可能不想测试单元格是否“包含”字符串,但它是否只包含该字符串(即,当已经存在
“test 2”
时,您希望允许
“test 21”
“test”
)。为此,您可以通过以下方式进行过滤:

var elems = $('#test td').filter(function(){
     return $(this).text()===text.value
});
if (elems.length) {
试试:

$('#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("");
});
$('#try')。单击(函数(){
var测试=$(“#添加”).val();
var sample=$(“#add2”).val();
var标志=0;
$(“#test”).find(“tr”).each(函数(){//遍历行
var td1=$(this.find(“td:eq(0)”).text();//获取行中第一个td的值
var td2=$(this.find(“td:eq(1)”).text();//获取第二行的td值
if((test==td1)和&(sample==td2)){//比较test=td1和sample=td2
flag=1;//如果是,则升起标志
}
});
如果(标志==1){
警报(“不允许”);
}否则{
$('#test')。追加(''+测试+''+样本+'');
}
$(“#添加”).val(“”);
$(“#add2”).val(“”);
});

你能修好我给你的小提琴链接吗,这样我就可以看到了?是的,作为一个注释。。。包含对特定文本/字符的检查。。。所以既然测试1已经存在。。。甚至不允许只进行
test
,或
t
te
1
等等。。因此,在使用
contains
:)..@bipen之前,请仔细想想,这就是为什么:contains在这种情况下是不可取的。@dystroy正是我所需要的。非常感谢你。还有一件事,在
elems.length
期间实际发生的情况是匹配元素的数量。因为它是一个数字,所以它是falsy(即在
if
中作为
false
传递)的唯一方法是
0
。我可以为这篇文章提出一个附带问题吗?如果我想要两(2)个参数作为依赖项怎么办?示例:。我想在这里附加不同细节的输入。测试1和样本2将被追加,但测试1和样本1不会被追加。你太棒了。这正是我真正想要的。我还在思考你的代码是如何工作的。你能告诉我怎么做吗。我很惊讶,这就是我想知道的原因。@myRM我在回答中添加了评论。希望你现在明白了。这是清楚的还是你仍然有疑问?
$('#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("");
});