简体   繁体   English

DataTables 对混合的数字和文本列进行排序

[英]DataTables sort mixed numeric and text column

I am trying to construct a DataTable sortable table that contains a column of numbers, but this column also contains the text NA to denote missing data.我正在尝试构建一个包含一列数字的 DataTable 可排序表,但该列还包含文本NA以表示丢失的数据。 I was wondering how I would write a custom sorting function so that when I sort on the column the NA s come up AFTER the numbers rather than before when listing values greatest to smallest.我想知道如何编写自定义排序 function 以便当我在列上排序时NA出现在数字之后而不是在列出值从最大到最小之前出现。 Codepen here: https://codepen.io/mayagans/pen/VwKJeMo此处的代码笔: https://codepen.io/mayagans/pen/VwKJeMo

 $('#my-table').DataTable({ "autoWidth": false, "order": [] });
 td { padding: 0 20px; } table { margin: 10px 0; }
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script> <table id="my-table"> <thead> <th>Nr. </th> <th>Name</th> </thead> <tr> <td>1</td> <td>Carl</td> </tr> <tr> <td>2</td> <td>Alan</td> </tr> <tr> <td>3</td> <td>Bobby</td> </tr> <tr> <td>NA</td> <td>Maya</td> </tr> <tr> <td>NA</td> <td>Jordan</td> </tr> </tr> <tr> <td>-</td> <td>Monica</td> </tr> </table>

Desired Output:所需的 Output:

When sorting from largest to smallest value:从最大值到最小值排序时:

 <table id="my-table"> <thead> <th>Nr. </th> <th>Name</th> </thead> <tr> <td>3</td> <td>Bobby</td> </tr> <tr> <td>2</td> <td>Alan</td> </tr> <tr> <td>1</td> <td>Carl</td> </tr> <tr> <td>NA</td> <td>Maya</td> </tr> <tr> <td>NA</td> <td>Jordan</td> </tr> </tr> <tr> <td>-</td> <td>Monica</td> </tr> </table>

Any help appreciated!!任何帮助表示赞赏!

You can take advantage of orthogonal data , which lets you store a custom sorting value, which is different from the display value:您可以利用正交数据,它允许您存储自定义排序值,该值不同于显示值:

$('#my-table').DataTable( {
  columnDefs: [ { 
    targets: [ 0 ], 
    render: function ( data, type, row ) {
      if ( type === 'sort' ) {
        var sortValue = data;
        switch( data ) {
          case '-':
            sortValue = -999998;
            break;
          case 'NA':
            sortValue = -999999
            break;
          default: // already set, in this case
        } 
        return sortValue;
      } else { 
        return data;
      }
  }
  } ]
} );

This assumes you will never have numeric values lower than the two values used in the switch statement.这假设您的数值永远不会低于switch语句中使用的两个值。 You can adjust as needed, if your overall data is not compatible with this.如果您的整体数据与此不兼容,您可以根据需要进行调整。

My sample:我的样本:

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM