如何按<span> </span>中的内容日期对div进行排序

时间:2012-01-30 14:37:50

标签: jquery sorting date

我正在尝试按页面加载时跨度的内容日期对div进行排序...我得到的是排序。但不是按日期。

这是我的代码段:

function sortDescending(a, b) {
  var date1 = $(a).find("span").text();
  date1 = date1.split('/');
  date1 = new Date(date1[2], date1[1] - 1, date1[0]);
  var date2 = $(b).find("span").text();
  date2 = date2.split('/');
  date2 = new Date(date2[2], date2[1] - 1, date2[0]);

  return date1 < date2 ? 1 : -1;
};
$(document).ready(function() {
  $('#container .element').sort(sortDescending).appendTo('#container');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">

  <div class="element">
    <p class="title">TEST 03</p>
    <span>01/2010</span>
  </div>

  <div class="element">
    <p class="title">TEST 01</p>
    <span>01/2012</span>
  </div>

  <div class="element">
    <p class="title">TEST 04</p>
    <span>01/2009</span>
  </div>

  <div class="element">
    <p class="title">TEST 02</p>
    <span>01/2011</span>
  </div>

</div>

我知道我需要一个函数来弄清楚内容是一个日期。只是不知道怎么......

2 个答案:

答案 0 :(得分:1)

<span>文本似乎只有mm / yyyy格式,而你的日期构造函数在结果数组中需要3个元素。

date1 = date1.split('/'); // -> [ "01", "2009" ]
date1 = new Date( 
    date1[2]       /* undefined */, 
    date1[1] -1    /* year */ , 
    date1[0]       /* month */ 
); 

您需要稍微更改Date构造函数:

date1 = new Date(date1[1], date1[0] -1, 1); 

答案 1 :(得分:0)

使用冒泡排序:

$(document).ready(

    function() {
        var divArray = $("div#container>div.element");

        for (j = divArray.length; j > 0; j--) {
            for (i = 0; i < j - 1; i++) {
                if ($(divArray[i]).children("span").html() > $(divArray[i + 1]).children("span").html()) {
                    temp = $(divArray[i]).html();
                    $(divArray[i]).html($(divArray[i + 1]).html());
                    $(divArray[i + 1]).html(temp);
                }
            }
        }
    });