我正在尝试按页面加载时跨度的内容日期对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>
我知道我需要一个函数来弄清楚内容是一个日期。只是不知道怎么......
答案 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);
}
}
}
});