2017-01-23 48 views
1

我使用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,另一些是在较低的位置,如果滚动
具有特殊字符的DataTables排序/排序列

我曾尝试这个代码实现正确的排序,但它并没有帮助

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

回答

0

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

0

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

您可以尝试使用渲染功能在相应的列:

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+,我建议你使用新的语法(更清晰易用)

+0

我正在使用'DataTables v 1.10.11'。有一种情况,当我可以使用counter来设置每个内部循环的编号时,但是取决于来自服务器的数据,我应该添加'*'。所以现在就像'if(true)$ counter一样简单的连接。 '*''。后端在'PHP'上 – vladja