DataTables使用特殊字符排序/排序列

时间:2017-01-23 09:25:58

标签: jquery sorting datatables

我正在使用DataTables jQuery plugin向我的表添加排序/排序。我必须在列中的某些数字中添加特殊字符*。当我这样做时,排序/排序变得不正确。As you can see, first value on <code>korteri nr</code> is 1 then 10 and etc.. but there is 2, 3 and others which are on lower position if scroll 正如您所看到的,korteri nr上的第一个值是1然后是10等等。但是如果滚动

,则有2,3和其他位于较低位置的值

我已经尝试过这段代码来实现正确的排序,但它无济于事

$.fn.dataTableExt.oSort['custom-sorting-asc'] = function(a,b) {
        a = escapeRegExp(a);
        b = escapeRegExp(b);
        return (a == b) ? 0 : (a > b) ? 1 : -1;
    };
    $.fn.dataTableExt.oSort['custom-sorting-desc'] = function(a,b) {
        a = escapeRegExp(a);
        b = escapeRegExp(b);
        return (a == b) ? 0 : (a > b) ? -1 : 1; //reverse sorting
    };


    function escapeRegExp(string){
        return string.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
    }

    $('.handp-table').DataTable( {
            searching: false,
            paging: false,         
            aoColumns: [
                { "sType": "custom-sorting" }, //custom sorting
                null, //default sorting
                null,
                null,
                null,
                null,
                null
            ]
        } );

3 个答案:

答案 0 :(得分:0)

问题是数据表正在将该列中的值解释为字符串,并按字母顺序对它们进行排序。

您可以尝试在相应的列中使用render函数:

aoColumns: [
                { fnRender: function(data,type,full){
                       if(type==='sort'){
                           return data;
                       }
                       return data+'*';
                  } 
                }
                null, //default sorting
                null,
                null,
                null,
                null,
                null
            ]

我假设您从服务器检索的数据是普通整数。如果是这种情况,那么Datatables将足够聪明地使用整数值进行排序,并使用带有连接*的整数值(即:一个字符串)进行显示,过滤等。

顺便说一句,如果您使用的是Datatables 1.10+,我建议您使用新语法(更清晰,更易于使用)

答案 1 :(得分:0)

找到解决此问题的另一种方法。我改变了生成列内容的逻辑。我没有将*添加到应该是此字符的每个数字,而是将类添加到此元素some_class,然后使用CSS pseudo element :after添加*作为内容。 DataTables不计算CSS,因此现在可以正常工作。

答案 2 :(得分:0)

这是一种更简单,更灵活的方法:您可以将属性td添加到每个SET STAMP=%DATE:/=-% %TIME::=.% SET SOURCE="C:\Users\PersonA\Documents\Test\Source" SET DEST="C:\Users\PersonA\Documents\Test\Destination\%STAMP%" REM Set Robocopy to only retry once after waiting 1 second; copy all REM file attributes, security, etc; and create a log file in the REM temp folder with the same name as the date. robocopy %SOURCE% %DEST% /e /r:1 /w:1 /COPYALL /LOG:%TEMP%\%STAMP%.LOG C: CD \Users\PersonA\Documents\Test\Destination\ REM Recursively and quietly delete all directories older than REM 3 days FORFILES /S /D -3 /C "cmd /c IF @isdir == TRUE rd /S /Q @path" 标签中,然后将其用于订购。我在这里给出了更详细的答案:https://stackoverflow.com/a/51225222/8801891