我有一个附加行数据的代码。我想要的是提醒用户他们是否会添加表中已有的详细信息。
$('#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 上进行过滤。
我的代码有什么问题?
答案 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) {
你想要的可能实际上不是,测试单元格是否“包含”字符串,但是它是否只包含该字符串(即,你想允许"test 21"
和{{1}当已经"test"
时。为此,您可以通过以下方式进行过滤:
"test 2"
答案 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("");
});