jquery dataTable重置排序

时间:2014-11-19 04:14:03

标签: jquery sorting datatable

我正在尝试执行任务,就像这个question一样。

  • 我有一个工作的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”,或者在使用此插件之前是否需要更多设置?

因为我的脚本显示Uncaught TypeError: Cannot read property 'oApi' of undefined ,所以在我复制脚本之后,错误使函数未定义。我该怎么办?

2 个答案:

答案 0 :(得分:2)

您提供的链接中有一个使用示例。

var table = $('#example').dataTable();

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

编辑尝试给它一个"命令"初始化时的属性: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)

});

答案 1 :(得分:1)

对于DataTable 1.10 + ,可以使用order.neutral()插件

插入代码

[[6.0, 7.0], [7.0, 12.0], [12.0, 17.0], [17.0, 46.0], [17.0, 29.0], [29.0, 30.0], [33.0, 34.0], [34.0, 35.0], [35.0, 36.0], [36.0, 7.0], [36.0, 6.0], [41.0, 42.0], [42.0, 17.0], [46.0, 47.0]]

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

示例

$.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;
        } );
    } );
} );