簡體   English   中英

數據表-無法按與字符串類型不同的列進行排序

[英]Datatables - Can't sort by column different than string type

我有一個數據類型為字符串類型的“日期”列。 現在,當我要按其排序時,由於明顯的原因,顯然排序不正確,因此我將sType更改為“ date”,一切都很好。
但是問題是,當我將sType從字符串更改為其他內容時,無法再按此列排序。 頁面加載后的初始排序已經過排序並且很好,但是我無法再單擊該列來對其進行排序。 它的行為就像bSortable為false,但不是(對其進行調試)。 bSort也是如此。
此外,我嘗試實現自定義比較器,包括排序插件等相同的結果。
有什么想法可能導致問題嗎?

編輯
我的數據表初始化過程:

$('#scanDataTable').dataTable({
     "bJQueryUI": true,
     "sPaginationType": "full_numbers",
     "sDom": '<""l>t<"F"fp>',
     "aaSorting": [[0, "asc"]],
     "iDisplayLength": "100",
     "aoColumnDefs": [
          {"sType": "date", "aTargets": [0]}
     ]
});

如果“ sType”參數是字符串,則單擊列標題會在asc和desc排序之間切換(但它是字符串,因此排序不正確)。 將“ sType”切換為日期或除字符串以外的任何內容后,單擊表頭均無任何作用。
如前所述,我嘗試在列0選項中使用“ bSortable”:true,在dataTable選項中使用“ bSort”:true,並導入了自定義排序插件,但它沒有任何改變。 我的日期格式是:17.11.2014 21:54:39。

重要:在對aaSorting進行了一些修改之后,我注意到asc和desc排序都是相同的,這可能意味着排序本身就是問題,而不是表選項。

您的日期格式與new Date()Data.parse()不兼容,這就是為什么當您嘗試將默認date類型應用於列時,列排序變為“凍結”的原因。 它正在嘗試對一堆NaN字符串進行排序。 因此,您必須自己創建一個合適的插件。

這是一個示例,一個sikor-date dd.mm.yyyy hh:mm:ss解析為標准UTC時間的sikor-date

jQuery.extend( jQuery.fn.dataTableExt.oSort, {
    "sikor-date-pre": function(a) {
        var dateParts = a.split('.'),
        time = a.split(' ')[1].split(':'),
        year = parseInt(dateParts[2])-1900,
        month = parseInt(dateParts[1])-1,
        day = parseInt(dateParts[0]),
        hours = parseInt(time[0]),
        mins = parseInt(time[1]),
        secs = parseInt(time[2]);
        return Date.UTC(year, month, day, hours, mins, secs);
    },
    "sikor-date-asc": function(a, b) {
        return ((a < b) ? -1 : ((a > b) ? 1 : 0));
    },
    "sikor-date-desc": function(a,b) {
        return ((a < b) ? 1 : ((a > b) ? -1 : 0));
    }
});

將整個日期字符串拆分為邏輯部分,解析為整數,然后使用Date.UTC()轉換為可比較的數字。

演示-> http://jsfiddle.net/nm261eyn/

該排序插件應適用於所有版本的dataTables。 用作

"aoColumnDefs": [
    {"sType": "sikor-date", "aTargets": [0]}
]

待辦事項 :錯誤處理,檢查日期是否滿足要求,檢查它是否為空字符串""等。插件盲目地認為日期以字符串形式出現,其格式完全相同dd.mm.yyyy hh:mm:ss

試驗台:

<tbody>
    <tr><td>17.11.2014 21:54:39</td></tr>
    <tr><td>18.11.2013 21:54:39</td></tr>
    <tr><td>17.11.2014 1:54:39</td></tr>        
    <tr><td>17.11.2014 1:54:38</td></tr>                
    <tr><td>16.11.2014 22:54:39</td></tr>        
    <tr><td>16.11.2015 00:00:00</td></tr>                
</tbody>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM