自定义排序jQuery dataTable列的容量

时间:2015-03-09 14:35:53

标签: javascript sorting jquery-datatables

我有一个表格,其中包含这样的容量列:

<table id="datatable" class="display" width="100%">
    <thead>
        <tr>
            <th>Col1</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>2 Go</td>
        </tr>
        <tr>
            <td>1 To</td>
        </tr>
        <tr>
            <td>320 Go</td>
        </tr>
        <tr>
            <td>2 To</td>
        </tr>
        <tr>
            <td>500 Go</td>
        </tr>
    </tbody>
</table>

我尝试使用jQuery dataTable对列进行排序以生成以下内容:

2 Go
320 Go
500 Go
1 To
2 To

但是无法通过阅读排序和插件文档来弄清楚如何做到这一点。

我尝试了this解决方案,但无法使其正常运行。

2 个答案:

答案 0 :(得分:0)

我使用您引用的代码的修改版本的未经测试的建议是从您正在比较的数据中删除“开始”和“收件人”文本,同时为以“收件人”结尾的数字添加100万”。

注意:我使用了一百万,假设NNN Go / To永远不会> =一百万。

jQuery.extend( jQuery.fn.dataTableExt.oSort, { "capacity-pre": function ( a ) {

// Remove ' To' and add 1 million to the number:
var x = String(a).replace(/ To/g, "1000000"); 

// Just remove the text ' Go'
x = String(a).replace(/ Go/g, "") 

// now we are just returning a number to do your sorting comparisons against
return parseFloat( x ); 

},

"capacity-asc": function ( a, b ) { return ((a < b) ? -1 : ((a > b) ? 1 : 0)); },

"capacity-desc": function ( a, b ) { return ((a < b) ? 1 : ((a > b) ? -1 : 0)); }

// Remove ' To' and add 1 million to the number: var x = String(a).replace(/ To/g, "1000000"); // Just remove the text ' Go' x = String(a).replace(/ Go/g, "") // now we are just returning a number to do your sorting comparisons against return parseFloat( x );

然后在数据表中,将类型设置为容量

答案 1 :(得分:0)

你可以试试这个。希望你有To and Go作为选项。我使用First char(T / G)获取ascii代码,并获得了num。

的第一部分的产品
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
  "capacities-pre": function ( a ) {
      var x = a.substring(0, a.length - 2);
      var x_unit = (a.substring(a.length-2, a.length-1)).charCodeAt(0);
      return parseInt( x * x_unit, 10 );
  },

  "capacities-asc": function ( a, b ) {
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
  },

  "capacities-desc": function ( a, b ) {
    return ((a < b) ? 1 : ((a > b) ? -1 : 0));
  }
} );