2009-01-16 106 views
6

我正在使用jquery tablesorter插件對錶進行排序。在我的表格中,列表以mm/yy格式顯示日期。使用jQuery tablesorter排序mm/yy日期

<tr> 
    <td class="col-name">...</td> 
    ... 
    <td rel="2000" class="col-dob">10/00</td> 
    ... 
</tr> 
<tr> 
    <td class="col-name">...</td> 
    ... 
    <td rel="1986" class="col-dob">11/86</td> 
    ... 
</tr> 

注:

  • 每個單元都有一個唯一的類
  • 日期被顯示在MM/YY格式
  • 細胞與日期接收年以及

我的jQuery代碼如下:

// add parser through the tablesorter addParser method 
$.tablesorter.addParser({ 
     // set a unique id 
     id: 'user-birthdate', 
     is: function(s) { 
       // return false so this parser is not auto detected 
       return false; 
     }, 
     format: function(s) { 
       // format your data for normalization 

       var dateSplit = s.split('/'); 

       if(2 !== dateSplit.length) 
         return 0; 

       return new Date(dateSplit[1], dateSplit[0], 1); 
     }, 
     // set type, either numeric or text 
     type: 'numeric' 
}); 

myClass.init = function() { 
     $('.module .user table').tablesorter({ 
       sortList: [[0,0]],  
      widgets: ['zebra'], 
       headers: { 
         5: { 
           sorter:'user-birthdate' 
         } 
       } 
     }); 
} 

myClass.init(); 

我的問題是,tableSorter將00解釋爲1900年而不是2000年,因此排序後的數據不正確。

任何線索我該如何解決這個問題?我正在使用jQuery 1.2.6和最新版本的tablesorter。

回答

9

我發現tablesorter文檔通常相當無益。它看起來喜歡它說很多,但缺乏細節。

在這種情況下,它不會告訴您解析器的函數簽名。幸運的是,您可以閱讀the unminified code以查找它。

在那裏,我們發現metadata解析器做到這一點:

format: function(s,table,cell) { 

這意味着您可以調整格式的方法:

format: function(s, table, cell) { 
    // format your data for normalization 

    var dateSplit = s.split('/'); 
    var year = $(cell).attr('rel'); 

    if(2 !== dateSplit.length) 
     return 0; 

    return new Date(year, dateSplit[0], 1); 
}, 

或至少相似。我沒有真正測試過這個。但它至少應該非常接近。

+0

謝謝大衛。等待星期一進行測試。將在這裏更新。 – hitec 2009-01-18 17:25:25

0

我想你會發現,你的問題是日期構造及2位數字的年份字符串你逝去的無歧義:new Date(dateSplit[1], dateSplit[0], 1);

我不認爲你可以(容易)可以訪問REL基於s在解析器中。 s是否包含單元格的全部內容?你可以在單元格中的數據中做些什麼:<span style="display : none">CC</span>MM/YY,去掉標籤,然後在解析中將CC與YY結合起來?

+0

幸運的是,解析器函數也傳遞了單元格對象。看到我的答案。 :) – David 2009-01-17 05:21:14