2013-02-04 48 views
1

我有非常相似,這個問題一個問題:jQuery table sort排序使用jQuery表基於日期值

當單擊日期頭,我想根據日期錶行進行排序,不是基於在文本上。

我基於我的代碼在這個jsFiddle http://jsfiddle.net/gFzCk/這是上述問題的答案之一,它確實排序,但它將日期視爲普通文本,而不是日期。

通常情況下,我可以修改原始代碼以適應我的需要,但是這段代碼只是略微超出了我的意思。

這裏是我的jsfiddle http://jsfiddle.net/S6dM6/

HTML

<table> 
    <tr> 
     <th id="dateHeader">Date</th> 
     <th>Phone #</th> 
     <th id="city_header">City</th> 
     <th>Speciality</th> 
    </tr> 
    <tr> 
     <td>01/02/2013</td> 
     <td>00001111</td> 
     <td>Amsterdam</td> 
     <td>GGG</td> 
    </tr> 
    <tr> 
     <td>24/02/2013</td> 
     <td>55544444</td> 
     <td>London</td> 
     <td>MMM</td> 
    </tr> 
    <tr> 
     <td>28/02/2013</td> 
     <td>33332222</td> 
     <td>France</td> 
     <td>RRR</td> 
    </tr> 
    <tr> 
     <td>13/02/2013</td> 
     <td>88884444</td> 
     <td>Auckland</td> 
     <td>AA</td> 
    </tr> 
    <tr> 
     <td>04/02/2013</td> 
     <td>11115555</td> 
     <td>New York</td> 
     <td>BBB</td> 
    </tr> 
</table> 

JS

var table = $('table'); 

$('#dateHeader') 
    .wrapInner('<span title="sort this column"/>') 
    .each(function(){ 

     var th = $(this), 
      thIndex = th.index(), 
      inverse = false; 

     th.click(function(){ 

      table.find('td').filter(function(){ 

       return $(this).index() === thIndex; 

      }).sortElements(function(a, b){ 

       return $.text([a]) > $.text([b]) ? 
        inverse ? -1 : 1 
        : inverse ? 1 : -1; 

      }, function(){ 

       // parentNode is the element we want to move 
       return this.parentNode; 

      }); 

      inverse = !inverse; 

     }); 

    }); 

而且這個js文件中引用: https://raw.github.com/padolsey/jQuery-Plugins/master/sortElements/jquery.sortElements.js

以防萬一你要建議某種桌子排序插件,請注意,我的最終結果不會被排序時,單擊標題,排序功能將從我的JavaScript中的各個地方被調用,我只是使用這個點擊的例子作爲一個簡單的起點,以獲得該概念的工作和作爲一個簡單的方法來提出這個問題。

+0

您正在尋找'Date.parse',https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/日期/解析,但是,使用'dd/MM/yyyy'格式,你需要做一些進一步的處理,我相信'Date.parse'預計'MM/dd/yy(yy)' – BLSully

回答

4

修改您sortElements方法是這樣的:

 }).sortElements(function(a, b){ 

      var strDate = $.text ([a]); 
      var dateParts = strDate.split("/"); 
      var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]); 
      var a1 = date.getTime(); 
      strDate = $.text ([b]); 
      dateParts = strDate.split("/"); 
      date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]); 
      b1 = date.getTime(); 

      return a1 > b1 ? 
       inverse ? -1 : 1 
       : inverse ? 1 : -1; 
+0

現在我看看你的答案,我真的應該能夠弄清楚自己。我責怪週一。我想這並沒有幫助我從來沒有見過$ .text([「text」])。也許這可能是一個新問題。 謝謝! – Owen

+0

非常歡迎:) – AC1