jQuery dataTables 搜索 - 设置搜索过滤器以仅获取以搜索值开头的匹配项

jQuery dataTables search - Set search filter to get only matches that starts like search value

如果您在数据 table 中搜索一个词,它将在一个词的任何位置找到。

示例:在 table 中搜索 "b":

 banana
 subway
 sub

将 return 全部 3.

如果我在搜索字段中输入 "b",我如何设置为只获取 "banana"。

我敢假设您正在考虑 jQuery 数据表(也替换了含糊不清的 tag with the correct 标签)。

如果您想过滤列数据的开头,而不是搜索/过滤整个字符串,您可以创建自定义过滤函数。像这样,这也是不区分大小写的:

$.fn.dataTable.ext.search.push(
    function( settings, data, dataIndex ) {
        //$('#example_filter input') is the default #example filter box
        var term = $('#example_filter input')
                .val()
                .toLowerCase();

        for (var i=0;i<data.length;i++) {
            value = data[i]
                .toString()
                .toLowerCase();

            if (value.indexOf(term)==0) {
                return true;
            }
        };
        return false;
    }
);

查看演示 -> http://jsfiddle.net/v1yguqLz/

注意 :根据文档以及数据表在 "the old days" 中的工作方式,这应该是 regular expression search, but I cannot get even the simpliest regular expression example to work, neither by table.search() nor table.column().search(). Have tried with 1.10.0 through to 1.10.5 (recent version). I guess this has something to do with this bugreport -> https://github.com/DataTables/DataTables/issues/341 和向后兼容性的任务.

另一方面,如果您只想过滤列数据的开头,那么自定义过滤功能无论如何都是完美的解决方案。

我有一个用于其中一列的单独搜索字段,这是我的开头搜索解决方案:

    vm.searchForLocation = function() {
        vm.dtInstance.DataTable.column(2)
            .search("^"+vm.locationCode, true, false )
            .draw();
    }