按日期排序并输出来自XML的jQuery数据数组

时间:2014-01-03 10:11:46

标签: jquery json arrays

See live demo

以下代码从XML文件中获取数据并输出div="item"

中的每个项目

我已经转换了日期,而不是您在YYYYMMDD中获得的完整日期(例如20131216)

var date     = new Date( $item.find('pubDate').text() );
                var yyyymmdd = date.getFullYear() +''+ (date.getMonth()+1) +''+ date.getDate();
                array += '<p>' + yyyymmdd + '</p>';

1。但是现在我需要对这些数据进行排序并将其存储在一个子数组中,以便只有最后30天存储在子数组中。

完整脚本:

jQuery(function(){
        $.ajax({
          url: 'http://www.sagittarius-digital.com/news.rss',
          dataType: 'xml'
        }).done(function(xml){
          var items = $(xml).find('item').map(function(){
                var $item = $(this);
                var array = '<div class="item">';
                array += '<a href="' + $item.find('link').text() + '">';
                array += '<h2>' + $item.find('title').text() + '</h2>';
                array += '<p>' + $item.find('description').text() + '</p>';
                var date     = new Date( $item.find('pubDate').text() );
                var yyyymmdd = date.getFullYear() +''+ (date.getMonth()+1) +''+ date.getDate();
                array += '<p>' + yyyymmdd + '</p>';
                array += '<p>Category: ' + $item.find('category').text() + '</p>';
                array += '</a>';
                array += '</div>';
                return array;
          }).get();
          $('div.item').append(items.join(' '));
        }).fail(function(){
          console.log('error', arguments)
        })
      })

2。然后我需要随机化该子数组的输出,以便最后X项(从最近30天)以随机顺序输出。这将确保数据“最近”,但不会以完美的时间顺序显示。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

似乎最容易排除循环中30天以前的所有内容

jQuery(function () {
    $.ajax({
        url: 'http://www.sagittarius-digital.com/news.rss',
        dataType: 'xml'
    }).done(function (xml) {
        var items = [];
        $(xml).find('item').each(function () {
            var $item    = $(this);
            var date     = new Date($item.find('pubDate').text());
            var date_30  = new Date().getTime() - (1000*60*60*24*30);
            var yyyymmdd = date.getFullYear() + '' + (date.getMonth() + 1) + '' + date.getDate();

            if ( date_30 < date.getTime() ) { // newer than 30 days
                var array = '<div class="item">';
                array += '<a href="' + $item.find('link').text() + '">';
                array += '<h2>' + $item.find('title').text() + '</h2>';
                array += '<p>' + $item.find('description').text() + '</p>';

                array += '<p>' + yyyymmdd + '</p>';
                array += '<p>Category: ' + $item.find('category').text() + '</p>';
                array += '</a>';
                array += '</div>';
                items.push(array);
            }
        });
        $('div.item').append(items.join(' '));
    }).fail(function () {
        console.log('error', arguments)
    });
});

如果您仍需要对阵列进行随机播放,here's a solution for that