自定义jquery.datatables插件以使用两列上的正则表达式进行过滤

时间:2016-01-05 19:56:55

标签: javascript jquery regex datatables

我正在使用here找到的jquery datatables插件。有两列名为“New GL”和“Old GL”。 datatables插件具有一个称为搜索的内置功能,可根据您在文本框中输入的关键字过滤表中的数据。

以下是我目前的数据: enter image description here

当我在我想要的文本框中输入“40.88.1010.0”或“40.88.600000.05”时 这条记录出现了。 enter image description here

同样的规则适用于所有记录。我希望搜索继续使用单个文本框过滤所有列,但是对于“New GL”和“Old GL”列...我希望用户能够同时使用“ - ”和“。”。字符。

我最初的想法是,如果数据表有一个正则表达式选项,它会起作用,因为“。”在正则表达式是任何角色。但我只希望规则适用于这两列。

这可以使用datatables插件吗?

这是我当前的数据表初始化代码:

$(document).ready(function () {
    var table = $('#datatable').DataTable({ "iDisplayLength": 50 });
});

2 个答案:

答案 0 :(得分:1)

您可以添加data-search属性found here。 那么你的行就会变成这样:

<tr>
  <td data-search="40.88.1010.0">40-88-1010-0</td>
  <td data-search="40.88.600000.05">40-88600000-05</td>
</tr>

默认情况下,数据表的过滤使用来自所有行的数据。

答案 1 :(得分:1)

  

<强>解

您需要实现自定义搜索功能,如下所示。

此方法的缺点是,其他列中的内容也将以相同方式搜索,即使用.-个字符进行搜索。

$(document).ready(function () {
    var table = $('#datatable').DataTable({ 
       "pageLength": 50 
    });

    $('.dataTables_filter input', table.table().container())
        .off('.DT')
        .on('keyup.DT cut.DT paste.DT input.DT search.DT', function (e) {
            // If the length is 3 or more characters, or the user pressed ENTER, search
            if(this.value.length > 0){            
                // Escape the expression so we can perform a regex match
                var val = $.fn.dataTable.util.escapeRegex(this.value);

                // Add regular expression to match both . and - characters
                val = val.replace(/(\\\-|\\\.)/g, "[\\\.\\\-]");

                // Call the API search function
                table.search(val, true, false).draw();

            } else {
                // Ensure we clear the search if they backspace far enough
                table.search("").draw();
            }    
        });
});
  

<强>样本

请参阅this jsFiddle以获取代码和演示。