【问题标题】:Sorting Column in Given Order for dataTable按给定顺序对数据表的列进行排序
【发布时间】:2020-11-02 12:34:14
【问题描述】:

我已经实现了 dataTable 并按照我想要的顺序对数据进行排序。 但我想最后放置空值。而真正有价值的记录应该在最前面。

例子:

<tr>
    <td>D</td>
</tr>
<tr>
    <td>A</td>
</tr>
<tr>
    <td>Z</td>
</tr>
<tr>
    <td>-</td>
</tr>
<tr>
    <td>B</td>
</tr>
<tr>
    <td>-</td>
</tr>

这是我的自定义排序代码:

jQuery.extend(jQuery.fn.dataTableExt.oSort, {
    "alphbets-pre": function ( a ) {
        return jQuery.inArray( a, ["B","D","A","Z"] );
    },
    "alphbets-desc": function ( a, b ) {
        return ((a < b) ? -1 : ((a > b) ? 1 : 0));
    },
    "alphbets-asc": function ( a, b ) {
        return ((a < b) ? 1 : ((a > b) ? -1 : 0));
    }
});

这个工作非常好。 使用代码获得这些结果:

ASC                 DESC
---------------     --------------- 
+ Alphabets  +      + Alphabates  +
---------------     ---------------
+ B          +      + -           +
---------------     ---------------
+ D          +      + -           +
---------------     ---------------
+ A          +      + Z           +
---------------     ---------------
+ Z          +      + A           +
---------------     ---------------
+ -          +      + D           +
---------------     ---------------
+ -          +      + B           +
---------------     ---------------

我想要排序:

ASC : B => D => A => Z => - => -
DESC: Z => A => D => B => - => -

有什么解决办法吗?

【问题讨论】:

    标签: javascript jquery datatable logic


    【解决方案1】:

    您的 $.inArray 返回 -1 表示“未找到”(或您所谓的“null” ("-")),因此它们出现在顶部,因为它们具有最低的整数值。

    您可以将其更改为其他内容,例如:

     "alphbets-pre": function ( a ) {
        var idx = jQuery.inArray( a, ["B","D","A","Z"] )
        return idx == -1 ? Number.MAX_SAFE_INTEGER : idx;
     },
    

    【讨论】:

      【解决方案2】:
      function sortText(a, b, asc) {
          if ((!a || a === '-') && (!b || b === '-')) {
            return 0;
          }
          if (!a || a === '-') {
            return 1;
          }
          if (!b || b === '-') {
            return -1;
          }
          if (a > b) {
            return asc ? 1 : -1;
          }
          if (a < b) {
            return asc ? -1 : 1;
          }
          return 0;
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-16
        • 2017-12-14
        • 2017-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-23
        相关资源
        最近更新 更多