jQuery Datatables排序时忽略空值。

3
我正在使用datatables和jQuery创建漂亮的可排序表格。我现在想通过某个值对行进行排序。该值是数字。但有时可能不存在,此时我会输出一个破折号。
当我现在对此列排序时,所有带有破折号的行都在顶部。然后显示值为1、3、6、8、10的行。如何更改此设置,以便破折号(-)始终位于表格底部?
目前,我输入了一个最大数字,可以将它们放在底部。但我不想向用户显示此值。因此,我需要一个隐藏的排序列或其他排序方法。
提前感谢您!
2个回答

8

请看这个: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"}
                ],
} );

太棒了!这就是我在寻找的答案!工作得非常好! - Timo002

0

刚刚发现这个问题,想分享一个更简单的解决方案(也许在最初回答这个问题时还没有):

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

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

...会将10排序为10,但将破折号视为9999。你可以填入任意值来代替破折号,这取决于例如在服务器端识别最大值。此外,这对于各种数据更加灵活。请查看此处的文档:

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


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