18

我有一个包含数字列和 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对列进行排序以生成以下内容:

不适用, 100, 200, 300, 1024, 2096 2096, 1024, 300, 200, 100, 不适用

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

我在这里创建了代码的小提琴:http: //jsfiddle.net/stowball/rYtxh/,非常感谢一些帮助。

4

2 回答 2

32

只需在元素中使用data-order属性。<td>插件将基于此排序。对于您的情况,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

于 2017-04-10T07:19:05.140 回答
17

通过查看 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));
}});

然后在数据表中,设置类型为num-html

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

你可以在这里看到我的完整解决方案:http: //jsfiddle.net/rYtxh/4/

于 2013-07-23T11:00:23.547 回答