我曾经使用这种逻辑在HTML表格中显示特定输入的信息:用户必须在表单中填写六个文本框(输入类型),然后按提交按钮以在六列中显示相同的信息在表HTML中,但在此之前,我检查一个特定的输入值不在我的表的任何行...并且工作得很好,这是我的代码
$(document).ready(function () {
var cont=0;
$("#submit").click(function(e) {
e.preventDefault();
cont++;
var id = $("#inputText1").val().toLowerCase();
var lastname = $("#inputText2").val();
var name = $("#inputText3").val();
var country = $("#inputText4").val().toLowerCase();
var DUI = $("#inputText5").val();
var ISSS = $("#inputText6").val();
if (checkId(lastname)) {
return alert('El ID ya ha sido especificado');
}
$('#myTable tbody').append('<tr><td for="id">' + id + '</td><td for="lastname">' + lastname + '</td><td>' + name + '</td><td>' + country + '</td><td>' + DUI + '</td><td>' + ISSS + '</td><td><a href="#" id="select">Modificar</a></td></tr>');
$("#inputText1").val('');
$("#inputText2").val('');
$("#inputText3").val('');
$("#inputText4").val('');
$("#inputText5").val('');
$("#inputText6").val('');
$('#inputText1').focus();
});
function checkId (lastname) {
let ids = document.querySelectorAll('#myTable td[for="lastname"]');
return [].filter.call(ids, td => td.textContent === lastname).length === 1;
}
但现在我已经开始喜欢Datatable jQuery了,我用这段代码填充了一个数据表:
$(document).ready(function () {
$('#myTable').DataTable({
searching: false,
paging: true,
responsive: true,
"ajax": {
"url": "/home/loaddata",
"type": "GET",
"datatype": "json"
},
"columns": [
{ "data": "pais", "autoWidth": true, "orderable": true },
{ "data": "nombres", "autoWidth": true, "orderable": false },
{ "data": "telefono", "autoWidth": true, "orderable": false },
{ "data": "correo", "autoWidth": true, "orderable": false },
{ "data": "dui", "autoWidth": true, "orderable": false },
{ "data": "nit", "autoWidth": true, "orderable": false },
{ "defaultContent": "<button>editar</button>" }
//{ "defaultContent": " <a href='#' id='select'>Modificar</a> "}
],
"oLanguage": {
"sEmptyTable": "No hay registros disponibles",
"sInfo": "Hay _TOTAL_ registros. Mostrando de (_START_ a _END_)",
"sLoadingRecords": "Por favor espera - Cargando...",
"sSearch": "Filtro:",
"sLengthMenu": "Mostrar _MENU_",
"oPaginate": {
"sLast": "Última página",
"sFirst": "Primera",
"sNext": "Siguiente",
"sPrevious": "Anterior"
}
}
});
});
我的问题是:如果我使用两个不同的输入以便让用户指定DUI和ISSS信息,我怎么能检查输入中的DUI和ISSS信息是否已经通过datatable jQuery显示给用户?我不想涉及数据库查询,只是检查是否已在数据表的任何行中指定了DUI和ISSS值,谢谢
答案 0 :(得分:0)
除search()
之外,dataTables API还有一些实用方法,您可能会觉得有趣,例如indexOf()
。但是,我觉得您想在整个数据集中搜索 exact 小写匹配。
按var table = $('#myTable').DataTable({ .. })
然后,通过使用dataTables toArray()
和链接的魔力,您可以检查是否存在某个值:
table
.data()
.toArray()
.toString()
.toLowerCase()
.split(',')
.indexOf(value.toString().toLowerCase())>-1
您可以将其放在返回true
或false
的外部函数中。或者更优雅的register()
表格自带API的新功能:
$.fn.dataTable.Api.register( 'hasValue()', function(value) {
return this
.data()
.toArray()
.toString()
.toLowerCase()
.split(',')
.indexOf(value.toString().toLowerCase())>-1
})
现在,您只需使用
检查是否存在值即可if (table.hasValue(something)) {
}
参见演示 - &gt; http://jsfiddle.net/4orohac9/
请注意,table.hasValue('regional')
返回false,table.hasValue('regional marketing')
返回true:与小写内容和条款完全匹配。