【问题标题】:How to sort div's by content date in <span>如何在 <span> 中按内容日期对 div 进行排序
【发布时间】:2012-02-22 08:16:05
【问题描述】:

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

这是我的代码 sn-p:

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>

我知道我需要一个函数来确定内容是日期。就是不知道怎么...

【问题讨论】:

    标签: jquery sorting date


    【解决方案1】:

    使用冒泡排序:

    $(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);
                    }
                }
            }
        });
    

    【讨论】:

      【解决方案2】:

      &lt;span&gt; 文本似乎只有 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); 
      

      【讨论】:

        猜你喜欢
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 2019-05-26
        • 2015-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多