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("");
});