使用列优先级在DataTable中搜索

时间:2018-01-09 18:13:47

标签: javascript jquery datatables

我正在尝试使用DataTables进行搜索,一切都很好,但我遇到了一个我无法解决的问题。说我有一张这样的桌子:

NAME |   TAGS
----------------
Tom  | qwe, mark
Mark | dfg, uio

当我搜索“标记”时,订单仍然如上所示,但我想以某种方式给予NAME列更高的优先级,所以当我搜索“mark”时,订单将被颠倒:

NAME |   TAGS
----------------
Mark | dfg, uio
Tom  | qwe, mark

有没有办法将搜索优先级设置为列?谢谢。

2 个答案:

答案 0 :(得分:1)

这是我使用隐藏列的解决方法:

$(function () {
    let i = 0;
    let table_selector = "#myTableId";
    let input_unique_id = "datatables_helper_id";
    let hidden_col_index = document.querySelector(table_selector + " thead tr").childElementCount;

    $(table_selector)
        .find("tr")
        .each(function () {
            let trow = $(this);
            trow.append("<td>" + i + "</td>");
            i += 1;
        });
    let table = $(table_selector).DataTable({
        pageLength: 10,
        columnDefs: [
            {
                targets: [hidden_col_index],
                visible: false,
                searchable: false,
            },
        ],
    });

    $(table_selector + "_filter label input").on("focus", function () {
        this.setAttribute("id", input_unique_id);
    });

    $("body").on("keyup", "#" + input_unique_id, function () {
        table.rows({ search: "applied" }).every(function () {
            if (this.data()[0].startsWith(table.search())) {
                let data = this.data();
                data[hidden_col_index] = 1;
                this.data(data);
            } else {
                let data = this.data();
                data[hidden_col_index] = 2;
                this.data(data);
            }
        });
        table.order([[hidden_col_index, "asc"]]).draw();
    });
});

答案 1 :(得分:0)

不,没有办法直接从数据表(在客户端)这样做。我尝试过使用自定义过滤算法,但无法使其正常工作。

我唯一想到的方法是使数据表服务器端处理并返回过滤的数据并按照我想要的方式(按优先级)从服务器进行排序。但这也意味着我必须管理服务器端的每个数据表事件(排序,过滤,分页......),可能并不理想。

如果您想尝试一下,请查看server side processing mode