jquery数据表排序忽略空值

时间:2013-05-01 12:30:17

标签: jquery datatables

我正在使用datatables和jQuery来制作漂亮的可排序表。我现在想要为行排序一个值。该值是数值。但它也可能无法使用,所以在那一点上我会回应一下。

当我现在对此列进行排序时,带有短划线的所有行都在顶部。并且显示了具有值1,3,6,8,10的行。如何更改此项以使短划线( - )始终位于表格的底部?

目前我输入了一个最大数字,这使得它们处于最底层。但是我不希望这个值显示给用户。所以我需要一个隐藏的排序列或其他排序方法。

提前致谢!

2 个答案:

答案 0 :(得分:7)

请参阅:http://jsfiddle.net/CYubV/

表格中的第一列就像普通列一样工作;第二栏就像你问的那样。

尝试自定义排序,如下所示:

$.fn.dataTableExt.oSort['nullable-asc'] = function(a,b) {
    if (a == '-')
        return 1;
    else if (b == '-')
        return -1;
    else
    {
        var ia = parseInt(a);
        var ib = parseInt(b);
        return (ia<ib) ? -1 : ((ia > ib) ? 1 : 0);
    }
}

$.fn.dataTableExt.oSort['nullable-desc'] = function(a,b) {
    if (a == '-')
        return 1;
    else if (b == '-')
        return -1;
    else
    {
        var ia = parseInt(a);
        var ib = parseInt(b);
        return (ia>ib) ? -1 : ((ia < ib) ? 1 : 0);
    }
}

$('#table').dataTable( {
    "bPaginate": false,
    "bFilter": false,
    "aoColumns": [
            null,
            {"bSortable": true, "sType": "nullable"}
                ],
} );

答案 1 :(得分:0)

刚遇到这个问题,并希望分享一个更简单的解决方案(当最初回答此问题时可能无法使用):

您可以将属性data-order添加到每个td标签,然后将其用于订购。例如:

<td data-order="10">10</td>
<td data-order="9999">&ndash;</td>

...会将10排序为10,但破折号好像是9999。您为破折号填写的内容可能是可变的,具体取决于例如确定服务器端的最大值。此外,这对于所有类型的数据都更加灵活。在此处查看文档:

https://datatables.net/examples/advanced_init/html5-data-options