我一直在尝试按jQuery中的升序/降序排序我的日期,但没有运气。什么出错了?这是我的代码:http://jsfiddle.net/UdwNh/
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 :(得分:2)
该代码存在几个问题。
您在多个元素上使用相同的id
值。 id
values must be unique on the page
要修复它,请使用类值,或data-*
attribute,或允许在页面上多次出现的任何其他内容。
您正在jQuery实例上调用sort
。 jQuery has no documented sort
function。它可能有一个没有文档的,但如果是这样,你根本不知道它做了什么。假设它会重新排列DOM元素,这当然没有意义。
要修复它,你必须为此编写自己的函数(它并不复杂),或找到一个为你做的插件。
即使sort
确实有效,您传入new Date(string)
的日期字符串的格式为20/10/2012
,17/10/2012
等。这不是new Date(string)
要记录的格式。唯一的字符串格式new Date(string)
is documented to understand是ISO-8601的简化形式,看起来不像那样。事实上,new Date("20/10/2012")
在Chrome和其他浏览器上都失败了。
要修复它,您需要以另一种方式获取日期。您可以将元素上的毫秒 - 自上帝值存储为data-*
attribute,然后直接使用它。或者你可以解析你自己的日期字符串。如果它们始终采用dd/mm/yyyy
格式,则将各个部分解析为数字是微不足道的,然后您可以将年,月和日的结果数传递给new Date(year, month, date)
。 (请记住,月份以0
= 1月开头。)
您在开始时关闭</li>
,其中没有开放<li>
。
要解决此问题,请不要这样做。 : - )