2012-11-07 41 views
-1

我一直試圖按jQuery中的升序/降序對日期進行排序,但沒有運氣。任何想法出了什麼問題?這裏是我的代碼:http://jsfiddle.net/UdwNh/無法在jQuery中排序日期

var itemsArray = $('div#activity_box'); 
    itemsArray.sort(function(a,b){ 
     var aTime = new Date($(a).find('#activity_date').text()).getTime(); 
     var bTime = new Date($(b).find('#activity_date').text()).getTime(); 
     return aTime - bTime; 
    }); 

    $('#sortAsc').click(function(){ 
     $("#wrapper").empty(); 
     $(itemsArray).each(function(){ 
      $("#wrapper").prepend($(this)); 
     }); 
    }); 

    $('#sortDesc').click(function(){ 
     $("#wrapper").empty(); 
     $(itemsArray).each(function(){ 
      $("#wrapper").append($(this)); 
     }); 
    });​ 

相關HTML:

<input class="btn" type="button" value="Sort Ascending" id="sortAsc"/> 
<input class="btn" type="button" value="Sort Descending" id="sortDesc"/> 

<div id="wrapper"> 
    <ul> 
    <li class='item'><div id='activity_date'>01/10/2012</div> 
    <div id='activity_box'> 
    <div id='activity_text' class='windowClass2'>...text here...</div> 
    </div></li><li class='item'><div id='activity_date'>04/10/2012</div> 
    <div id='activity_box'> 
    <div id='activity_text' class='windowClass2'>...text here...</div> 
    </div></li><li class='item'><div id='activity_date'>10/10/2012</div> 
    <div id='activity_box'> 
    <div id='activity_text' class='windowClass2'>...text here...</div> 
    </div></li><li class='item'><div id='activity_date'>16/10/2012</div> 
    <div id='activity_box'> 
    <div id='activity_text' class='windowClass2'>...text here...</div> 
    </div></li> 
    </ul> 
</div> 
+0

總是在問題本身發佈相關的代碼和標記***,不要只是鏈接。 –

+0

***嘆了口氣***好吧,我已經爲你做了。但是在278個問題之後,真的,你應該自己做這個。 –

回答

2

有與該代碼的幾個問題。

  1. 您在多個元素上使用相同的id值。 id values must be unique on the page

    要解決該問題,請改爲使用類值,或使用data-* attribute或其他任何允許在頁面上多次出現的內容。

  2. 您在jQuery實例上調用sort。 jQuery has no documented sort function。它可能有一個沒有記錄的,但如果是這樣,你不知道它做了什麼。假設它將重新排列DOM元素當然沒有意義。

    要解決這個問題,你必須爲自己編寫一個函數(這並不複雜),或者找一個爲你做的插件。

  3. 即使sort沒有工作,你傳遞new Date(string)日期字符串形式20/10/201217/10/2012,並且這樣的。這不是new Date(string)記錄瞭解的格式。 new Date(string) is documented to understandISO-8601的簡化形式的唯一字符串格式,看起來不像那樣。實際上,Chrome瀏覽器和其他瀏覽器可能會出現new Date("20/10/2012")失敗。

    要解決它,您需要另一種方式獲取日期。您可以將元素中的毫秒數自始值存儲爲元素data-* attribute,然後直接使用它。或者你可以解析你自己的日期字符串。如果他們始終處於dd/mm/yyyy格式,則將各個部分解析爲數字並不重要,然後您可以將年,月和日的結果數字傳遞到new Date(year, month, date)。 (請記住,幾個月開始0 =一月。)

  4. 你在一開始,那裏沒有開放<li>投入收盤</li>英寸

    要修復它,不要這樣做。 :-)

+0

HTML在這裏http://jsfiddle.net/UdwNh/是的,ID在那裏重複。在這種情況下,使用CSS類來標記項目可能會很好。 –

+0

@EvgeniyNaydenov:確實。 –

+0

您可以在jQuery上向我展示一個例子嗎?它仍然不起作用http://jsfiddle.net/UdwNh/1/ – methuselah