jQuery dataTable 列的自定义排序

Posted

技术标签:

【中文标题】jQuery dataTable 列的自定义排序【英文标题】:Custom Sorting of jQuery dataTable Columns 【发布时间】:2013-07-22 07:39:27 【问题描述】:

我有一个包含数字和 NA 列的表格。

<tr>
    <td>NA</td>
</tr>
<tr>
    <td>1024</td>
</tr>
<tr>
    <td>100</td>
</tr>
<tr>
    <td>200</td>
</tr>
<tr>
    <td>300</td>
</tr>
<tr>
    <td>2096</td>
</tr>

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

NA, 100, 200, 300, 1024, 2096 2096, 1024, 300, 200, 100, NA

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

我在这里创建了一个 Fiddle 代码:http://jsfiddle.net/stowball/rYtxh/,非常感谢您的帮助。

【问题讨论】:

如果你使用“-”而不是“NA”它工作正常这里是 js fiddle jsfiddle.net/stowball/rYtxh @umesh25 谢谢,这真的很有趣!如果我没有得到任何其他解决方案,我可能不得不这样做。 【参考方案1】:

只需在&lt;td&gt; 元素中使用data-order 属性。插件将基于此排序。对于您的情况,html 将是:

<tr>
    <td data-order="-1">NA</td>
</tr>
<tr>
    <td data-order="1024">1024</td>
</tr>
<tr>
    <td data-order="100">100</td>
</tr>
<tr>
    <td data-order="200">200</td>
</tr>
<tr>
    <td data-order="300">300</td>
</tr>
<tr>
    <td data-order="2096">2096</td>
</tr>

更多 HTML5 属性可用于解决过滤、排序、搜索等问题。

https://datatables.net/examples/advanced_init/html5-data-attributes.html

【讨论】:

答案有帮助,引号的位置不对。 感谢@Ken 强调 感谢@Aziz Saleh 的编辑【参考方案2】:

通过查看 Numbers with HTML 插件,您可以获取现有代码并修改正则表达式以查找负数,而不是剥离所有内容。使用它,您可以在“NA”周围放置一个 HTML 标记,并使用 HTML5 data-internalid 来存储集合的最低编号。

这样就变成了:

<td><a data-internalid="-1">NA</a></td>

和(注意正则表达式)

jQuery.extend( jQuery.fn.dataTableExt.oSort, 
"num-html-pre": function ( a ) 
    var x = String(a).replace(/(?!^-)[^0-9.]/g, "");
    return parseFloat( x );
,

"num-html-asc": function ( a, b ) 
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
,

"num-html-desc": function ( a, b ) 
    return ((a < b) ? 1 : ((a > b) ? -1 : 0));
);

然后在datatable中,设置type为num-html

$('table').dataTable(
    "aoColumns": [ "sType": "num-html" ],
    "aaSorting": [[ 0, "desc" ]],
);

您可以在此处查看我的完整解决方案:http://jsfiddle.net/rYtxh/4/

【讨论】:

以上是关于jQuery dataTable 列的自定义排序的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的自定义 jquery 表行过滤与 datatables.net 集成?

使用 Jquery Datatables 对数据排序属性中的值进行自定义排序

jquery-datatables 怎么自定义排序

使用自定义表格标签 DataTables jQuery 进行动态排序

jQuery数据表自定义排序和过滤

QTableView的自定义排序方法?