数据表1.10 - TD中的HTML5"数据顺序"attr不起作用

Mar*_*rty 5 sorting jquery html5 jquery-datatables datatables-1.10

我在订购包含HTML的列时遇到问题.在1.10的文档中说明,默认情况下应该这样做,但事实并非如此.然后我查看了1.10的新功能,并看到如果同一列中的每个TD元素都有"数据顺序"属性,则可以通过所述属性进行排序.完善!问题是,我无法让它发挥作用.

奇怪的是,当页面是静态时,它们具有此示例的示例正在按预期工作,但不是在动态加载数据和表时.

我正在使用以下选项和更改来启动表以添加属性.失效是为了告诉Datatables它需要重绘它(我看到它需要在某处):

"createdRow": function ( row, data, index ) {
                if ( data[6] ) {
                    cell = $('td', row).eq(6);
                    value = cell.text();
                    if(value == "Ej fakturerad") {
                        cell.attr('data-order', 1);
                    }
                    else if(value == "Nej") {
                        cell.attr('data-order', 2);
                    }
                    else if(value == "Kredit") {
                        cell.attr('data-order', 3);
                    }
                    else if(value == "Ja") {
                        cell.attr('data-order', 4);
                    }
                }
                oTable
                    .row( index )
                    .invalidate()
                    .draw();
            },
Run Code Online (Sandbox Code Playgroud)

我正在使用Laravel项目中Chumper/datatables的composer包实现这个DataTable,这意味着数据源是Ajax,并使用服务器端处理.

提前致谢!

Gyr*_*com 6

原因

通过查看DataTables源代码,似乎data-只在表初始化期间读取HTML5 属性,并且仅针对静态数据.

解决方案#1

对于服务器端处理,您可以考虑发送一个值以与值一起排序,以便仅在特定单元格的单元格中显示.有关更多信息,请参阅正交数据示例.

基本上,对于如下结构的行数据:

{
    "name": "Tiger Nixon",
    "position": "System Architect",
    "salary": "$3,120",
    "start_date": {
        "display": "Mon 25th Apr 11",
        "timestamp": "1303682400"
    },
    "office": "Edinburgh",
    "extn": "5421"
}
Run Code Online (Sandbox Code Playgroud)

DataTables初始化代码应该是:

$(document).ready(function() {
    $('#example').dataTable( {
        ajax: "data/orthogonal.txt",
        columns: [
            { data: "name" },
            { data: "position" },
            { data: "office" },
            { data: "extn" },
            { data: {
                _:    "start_date.display",
                sort: "start_date.timestamp"
            } },
            { data: "salary" }
        ]
    } );
} );
Run Code Online (Sandbox Code Playgroud)

在这种情况下,start_data.display将在表格中显示,但start_data.timestamp将用于排序.

解决方案#2

或者,您可以使用columns.render属性来定义函数以确定要动态排序的值,例如:

$('#example').dataTable({
    "columnDefs": [{
        "targets": 6,
        "data": "field_name",
        "render": function (data, type, full, meta) {
            if(type === 'sort'){
               if(data === "Ej fakturerad") {
                   data = 1;
               } else if(data === "Nej") {
                   data = 2;
               } else if(data === "Kredit") {
                   data = 3;
               } else if(data === "Ja") {
                   data = 4;
               }
            }

            return data;
        }
    }]
});
Run Code Online (Sandbox Code Playgroud)