jQuery DataTable 重置排序

5

我正在尝试完成一个任务,与此问题相同。

  • 我有一个工作正常的 jQuery dataTable。
  • 我想要一个重置排序的函数,在用户选择任何列之前,将其恢复为与 HTML 中读取的相同状态。

这引导我找到了一个不错的插件。

http://datatables.net/plug-ins/api/fnSortNeutral

jQuery.fn.dataTableExt.oApi.fnSortNeutral = function ( oSettings )
{
    /* Remove any current sorting */
    oSettings.aaSorting = [];

    /* Sort display arrays so we get them in numerical order */
    oSettings.aiDisplay.sort( function (x,y) {
        return x-y;
    } );
    oSettings.aiDisplayMaster.sort( function (x,y) {
        return x-y;
    } );

    /* Redraw */
    oSettings.oApi._fnReDraw( oSettings );
};

然而我不知道“如何使它工作”。有人知道什么是“oApi”,或者在我使用这个插件之前需要进行一些更多的设置吗?

因为我的脚本会显示出未捕获的类型错误:无法读取未定义的属性'oApi',就在我复制脚本之后,这个错误导致函数变成了未定义。我该怎么办?

2个回答

6
对于 DataTable,可以使用版本为 1.10+ 的 order.neutral() 插件。 插件代码

$.fn.dataTable.Api.register( 'order.neutral()', function () {
    return this.iterator( 'table', function ( s ) {
        s.aaSorting.length = 0;
        s.aiDisplay.sort( function (a,b) {
            return a-b;
        } );
        s.aiDisplayMaster.sort( function (a,b) {
            return a-b;
        } );
    } );
} );

CDN: cdn.datatables.net/plug-ins/1.10.19/api/order.neutral().js EXAMPLE

// Return table to the loaded data order
  table.order.neutral().draw();


4
你提供的链接中有一个用法示例。
var table = $('#example').dataTable();

// Sort in the order that was originally in the HTML
table.fnSortNeutral();

编辑:在初始化时尝试给它一个“order”属性:JSBin

jQuery.fn.dataTableExt.oApi.fnSortNeutral = function ( oSettings )
{
    /* Remove any current sorting */
    oSettings.aaSorting = [];

    /* Sort display arrays so we get them in numerical order */
    oSettings.aiDisplay.sort( function (x,y) {
        return x-y;
    } );
    oSettings.aiDisplayMaster.sort( function (x,y) {
        return x-y;
    } );

    /* Redraw */
    oSettings.oApi._fnReDraw( oSettings );
};

$(document).ready(function() {
    var oTable = $('#example').dataTable({
        "order" : [[ 1, "desc" ]]
    });

    setTimeout(function() {
        oTable.fnSortNeutral()
    }, 1000)

});

是的,我已经尝试过这个。 但在运行 table.fnSortNeutral(); 这一行之前,插件脚本本身就出现了错误 Uncaught TypeError: Cannot read property 'oApi' of undefined,因此它无法运行。 - Theo Ymca
感谢您的贡献。对我来说,最好使用aaSorting:[]属性,并添加一个按钮来运行重置排序函数。以下是其他人参考的编辑用法: JSBin - Theo Ymca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接