使用jQuery按日期排序XML结果
按日期排序返回的XML数据我遇到了很多麻烦。 日期存储为YYYY-MM-DD。 我正在努力寻找这种特定日期格式的在线帮助。
这是我的js:
$(document).ready(function () { $.ajax({ type: "GET", url: "database.xml", dataType: "xml", success: function (xml) { $(xml).find("event").filter(function () { return $(this).find("eventplace").text() == 'NEWCASTLE'; }).each(function () { var title = $(this).find('eventname').text(); var venue = $(this).find('eventvenue').text(); var city = $(this).find('eventplace').text(); var date = $(this).find('eventdate').text(); $('' + title + '').html(title + venue + city + date).appendTo('#comingup'); }); } }); });
这是我的XML示例:
LITTLE COMETS O2 ACADEMY NEWCASTLE 2014-02-21 SYMPHONIC PICTURES THE CLUNY NEWCASTLE 2014-03-10 LET'S BUY HAPPINESS THINK TANK NEWCASTLE 2014-02-10
将时间戳存储在数据属性和数组中的元素中,然后在附加元素之前根据时间戳对数组进行排序:
$(document).ready(function () { $.ajax({ type: "GET", url: "database.xml", dataType: "xml", success: function (xml) { var items = []; $(xml).find("event").filter(function () { return $(this).find("eventplace").text() == 'NEWCASTLE'; }).each(function () { var title = $(this).find('eventname').text(); var venue = $(this).find('eventvenue').text(); var city = $(this).find('eventplace').text(); var date = $(this).find('eventdate').text(); items.push( $('', { 'class' : 'items', text : title + venue + city + date, 'data-d' : new Date(date).getTime() }) ); }); items.sort(function(a, b) { return $(a).data('d').localeCompare( $(b).data('d') ); }); $.each(items, function(idx, itm) { $('#comingup').append(itm); }); } }); });
不需要推送到arrays。 将您的集合转换为对象数组并对其进行排序。 变量xmlevents
演示了如何完成。 还要在循环之外声明变量var
。 这只需要做一次。
$(document).ready(function () { $.ajax({ type: "GET", url: "database.xml", dataType: "xml", success: function (xml) { var xmlevents = $(xml).find("event"); xmlevents.sort(function(a,b){ a = $(a).find("eventdate").text(); b = $(b).find("eventdate").text(); return (a.localeCompare(b)); } var title, venue, city, date xmlevents.each(function () { title = $(this).find('eventname').text(); venue = $(this).find('eventvenue').text(); city = $(this).find('eventplace').text(); date = $(this).find('eventdate').text(); $('' + title + '').html(title + venue + city + date).appendTo('#comingup'); }); });