检查是否已通过datatable jquery

时间:2017-03-18 04:24:56

标签: javascript jquery html datatables

我曾经使用这种逻辑在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值,谢谢

1 个答案:

答案 0 :(得分:0)

search()之外,dataTables API还有一些实用方法,您可能会觉得有趣,例如indexOf()。但是,我觉得您想在整个数据集中搜索 exact 小写匹配。

var table = $('#myTable').DataTable({ .. })

存储API参考

然后,通过使用dataTables toArray()和链接的魔力,您可以检查是否存在某个值:

table
  .data()
  .toArray()
  .toString()
  .toLowerCase()
  .split(',')
  .indexOf(value.toString().toLowerCase())>-1

您可以将其放在返回truefalse的外部函数中。或者更优雅的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:与小写内容和条款完全匹配。