Javascript 对数据表中的特定数据进行排序

Javascript 对数据表中的特定数据进行排序,javascript,jquery,html,datatable,Javascript,Jquery,Html,Datatable,我现在被一种特殊的数据格式所困扰,这种格式不能用普通的方式进行排序。 例如: 我正在尝试使用html属性数据顺序 <td data-order="1447147318">8 months, 4 weeks</td> <td></td> <td></td> <td data-order="1460026800">Apr 07 2016 13:00:00 </td> <td data-order="

我现在被一种特殊的数据格式所困扰,这种格式不能用普通的方式进行排序。 例如:

我正在尝试使用html属性数据顺序

<td data-order="1447147318">8 months, 4 weeks</td>
<td></td>
<td></td>
<td data-order="1460026800">Apr 07 2016 13:00:00 </td>
<td data-order="1460026800">Apr 07 2016 13:00:00</td>
8个月,4周
2016年4月7日13:00:00
2016年4月7日13:00:00
但这不起作用。它仍然按字母顺序排列。 通过用当前时间戳减去给定时间戳来计算“最后一个活动”数据。 我发现了一些代码,可以从排序中排除空数据单元,这也是必需的

jQuery.extend(jQuery.fn.dataTableExt.oSort, {
    "non-empty-string-asc": function (str1, str2) {
        if (str1 == "-")
            return 1;
        if (str2 == "-")
            return -1;
        return ((str1 < str2) ? -1 : ((str1 > str2) ? 1 : 0));
    },

    "non-empty-string-desc": function (str1, str2) {
        if (str1 == "-")
            return 1;
        if (str2 == "-")
            return -1;
        return ((str1 < str2) ? 1 : ((str1 > str2) ? -1 : 0));
    }
});

_j(function () {
    _j('#customerTable').DataTable({
        "columns": [
            {"data": "ID"},
            {"data": "Type"},
            {"data": "Customer"},
            {"data": "Act", "defaultContent": ""},
            {"data": "KND", "defaultContent": ""},
            {"data": "Last Active", "defaultContent": "Not logged yet", "type": "non-empty-string"},
            {"data": "Total", "defaultContent": ""},
            {"data": "Today", "defaultContent": ""},
            {"data": "Min Trial", "defaultContent": "", "type": "non-empty-string"},
            {"data": "Max Trial", "defaultContent": "", "type": "date"}
        ],
        "pageLength": 20,
        "lengthMenu": [10, 15, 20, 50, 100]
    });

});
jQuery.extend(jQuery.fn.dataTableExt.oSort{
“非空字符串asc”:函数(str1、str2){
如果(str1==“-”)
返回1;
如果(str2==“-”)
返回-1;
返回((str1str2)?1:0));
},
“非空字符串描述”:函数(str1、str2){
如果(str1==“-”)
返回1;
如果(str2==“-”)
返回-1;
返回值((str1str2)?-1:0);
}
});
_j(函数(){
_j(“#customerTable”).DataTable({
“栏目”:[
{“数据”:“ID”},
{“数据”:“类型”},
{“数据”:“客户”},
{“数据”:“行为”,“默认内容”:“},
{“数据”:“KND”,“defaultContent”:“},
{“数据”:“上次活动”,“defaultContent”:“尚未记录”,“类型”:“非空字符串”},
{“数据”:“总计”,“默认内容”:“},
{“数据”:“今天”,“默认内容”:“},
{“数据”:“最小试验”,“默认内容”:“类型”:“非空字符串”},
{“数据”:“最大试验”、“默认内容”:“类型”:“日期”}
],
“页面长度”:20,
“长度菜单”:[10,15,20,50,100]
});
});

非常感谢您的帮助。

您如何比较字符串?当我在排序中放置警报以查看str1和atr2的值时,我看到的是文本值,例如“1个月,2周”和“1周,1天”。考虑到您正在进行字符串比较,它以字母数字顺序返回并不意外

您如何比较字符串?当我在排序中放置警报以查看str1和atr2的值时,我看到的是文本值,例如“1个月,2周”和“1周,1天”。考虑到您正在进行字符串比较,它以字母数字顺序返回并不意外

请发送fiddle,以便我检查整个代码并进行更正:它包含主数据集和我用于从排序中排除空单元格的脚本。请发送fiddle,以便我检查整个代码并进行更正:它包含主数据集和我用于从排序中排除空单元格的脚本。是的。那是我的问题。有没有一种更简单的方法来排序这类数据?或者我会因为害怕自己编写排序算法而结束——我不擅长算法。我必须看到下面的数据,并了解更多关于如何排序的信息。当我在我的一个表中使用moment.js(使用datatables呈现函数)格式化日期,但使用时间戳(long)对其进行排序时,我发现它可以正确排序数据。但可悲的是,排除空数据单元让我付出了代价。线索是在初始化dataTable时删除数据规范,以便它自动检测数据。现在它排序正确了。但是,你知道我怎样才能将这些空数据单元“-”排除在排序之外吗?对不起,我不明白?对不起,误解了,不应该显示“-”。现在我得到了最近的活跃用户,而在另一端,我得到了100个带“-”的用户,因为这些用户没有登录过一次。因此,没有可用的时间戳。但我仍然希望显示最早的活动,如果用户9个月未在线,则应在排序后显示。这已经在我的第一把JS小提琴上起作用了:jsfiddle.net/mu8d5y4c。id=19“Last Active”=“-”的一行在排序时不显示。或者,如果对“Min-Trial”进行排序,则“-”单元格始终位于底部。不管ASC DESC排序如何。是的。那是我的问题。有没有一种更简单的方法来排序这类数据?或者我会因为害怕自己编写排序算法而结束——我不擅长算法。我必须看到下面的数据,并了解更多关于如何排序的信息。当我在我的一个表中使用moment.js(使用datatables呈现函数)格式化日期,但使用时间戳(long)对其进行排序时,我发现它可以正确排序数据。但可悲的是,排除空数据单元让我付出了代价。线索是在初始化dataTable时删除数据规范,以便它自动检测数据。现在它排序正确了。但是,你知道我怎样才能将这些空数据单元“-”排除在排序之外吗?对不起,我不明白?对不起,误解了,不应该显示“-”。现在我得到了最近的活跃用户,而在另一端,我得到了100个带“-”的用户,因为这些用户没有登录过一次。因此,没有可用的时间戳。但我仍然希望显示最早的活动,如果用户9个月未在线,则应在排序后显示。这已经在我的第一把JS小提琴上起作用了:jsfiddle.net/mu8d5y4c。id=19“Last Active”=“-”的一行在排序时不显示。或者,如果对“Min-Trial”进行排序,则“-”单元格始终位于底部。无论ASC DESC排序如何。