DataTables是一个功能强大的前端插件,可以用来轻松实现数据表格在前端的分页、搜索等功能(数据初始化后,无需请求服务器即可实现低延迟的分页、搜索等功能,加速页面响应时间,提升用户体验)。

DataTables默认提供模糊匹配,若需实现精确匹配则需要用到正则表达式。

在此样例中,分别有两个搜索关键字f1和f2(对应页面中的下拉框和输入框,f1需要精确匹配,f2需要模糊匹配),在用户点击搜索按钮后,会调用controller中的doSearch方法来搜索。

controller:

({
    doSearch: function (component, event, helper) {

        // 获取DataTable中的数据
        let tableElem = component.find("myTable").getElement();
        let table = $(tableElem).DataTable({ "retrieve": true });
        
        // 先初始化一版搜索结果
        let searchResult = table.search('');

        // 依次遍历搜索条件,每搜一个关键字就把结果返回一次,这样,搜索结果就是若干个搜索条件的交集了

        // 搜索条件1(精确匹配)
        let f1 = component.get("v.filter1");
        if (f1.length > 0) {
            f1 = f1.replace('\(', '\\(').replace('\)', '\\)'); // 精确搜索时需将关键字中的括号转义
            searchResult = searchResult.column(8).search('^' + f1 + '$', true, false); // 使用正则表达式实现精确搜索
        } else {
            // 若关键字为空,说明这一列不需要被筛选,在这一列搜索一个空字符串,这样,这一列的数据就会全部显示
            searchResult = searchResult.column(8).search('');
        }

        // 搜索条件4(模糊匹配)
        let f4 = component.get("v.filter4");
        if (f4.length > 0) {
            searchResult = searchResult.column(0).search(f4); // Datatables的默认搜索模式为模糊匹配
        } else {
            // 若关键字为空,说明这一列不需要被筛选,在这一列搜索一个空字符串,这样,这一列的数据就会全部显示
            searchResult = searchResult.column(0).search('');
        }

        // 重绘表格
        searchResult.draw();
    }
})

参见:

在所有列中搜索:https://datatables.net/reference/api/search()

在特定列中搜索:https://datatables.net/reference/api/column().search()

posted on 2021-09-03 14:47  Lancen  阅读(214)  评论(0编辑  收藏  举报