【问题标题】:Merge two lists jquery by date按日期合并两个列表jquery
【发布时间】:2012-05-12 15:23:08
【问题描述】:

假设我们有这个标记:

<div id="container">
    <ul></ul>
    <ul></ul>
</div>

&lt;li&gt;的格式如:

<ul>
   <li>
     <span class="title">Title of the article</span>
     <span class="date" data-value="[TIMESTAMP]">Pretty Date</span>
   </li>
</ul>

我需要做的是:

  • 如果视口宽度足够大:显示两个列表

  • 如果视口宽度较小:按日期合并两个列表

    变量最小值 = 760; $(窗口).resize(函数(){ var 宽度 = $(window).width(); 如果(宽度

我不知道该怎么做:

function merge_lists(){
     /* shall i run 2 .each function and store it in an array, order by date (how?) and
        regenerate a new list?
      */
}

【问题讨论】:

  • TIMESTAMP 是特定日期格式还是只是 unix 时间?显示 TIMESTAMP 的值

标签: javascript jquery list merge


【解决方案1】:

我认为你喜欢这样的东西:

HTML:

<div id="container">
    <ul>
        <li>
         <span class="title">Title of the article</span>
         <span class="date" data-value="2012/05/01">2012/05/01</span>
       </li>
    </ul>
    <ul>
        <li>
         <span class="title">Title of the article</span>
         <span class="date" data-value="2012/05/05">2012/05/05</span>
       </li>
    </ul>
    <ul>
        <li>
         <span class="title">Title of the article</span>
         <span class="date" data-value="2012/04/10">2012/04/10</span>
       </li>
    </ul>
</div>

jQuery:

var mainlists = $('#container ul'),
    min = 550;

function merge_lists() {
     if (!$('#container').hasClass('merged')) {
        var temp = mainlists.clone(true),
            lists = $('li', temp);
        lists.sort(function(a, b) {
            var d1 = $('span.date', a).data('value'),
                d2 = $('span.date', b).data('value');
            if (new Date(d1).getTime() > new Date(d2).getTime()) return 1;
        });
        $('#container').empty().append($('<ul>', {
            html: lists
        }));
        $('#container').addClass('merged');
    }
}

function restore_lists() {
    if ($('#container').hasClass('merged')) {
       $('#container').empty().append(mainlists.clone(true));
       $('#container').removeClass('merged');
    }
}

$(window).resize(function() {
    var winWidth = $(window).width(),
        winHeight = $(window).height();
    $('#resolution').html(winWidth + 'px x ' + winHeight + 'px');
    if (winWidth < min) {
        merge_lists();
        $('body').css('background', '#ddd');
    } else {
        restore_lists();
        $('body').css('background', '#fff');
    }
});

DEMO

【讨论】:

  • 嘿!似乎工作!但检查一下。我添加了一个新容器,以保留分隔列表,以防用户重新调整屏幕大小。问题是它仍然可以完成这项工作,但原始列表似乎以某种方式丢失了:jsfiddle.net/5whus/3 有什么想法吗?
  • 几乎可以工作。但它似乎为每个“
  • ”创建了一个新的“
  • @ToniMichelCaubet 嗨,我再次更新我的小提琴作为你的评论,测试一下
  • 暂时无法使用。我做了一个混合 yourcode+window.resize:jsfiddle.net/5whus/13 它合并。但它没有很好地装饰,也没有正确恢复......
  • @ToniMichelCaubet 你看演示了吗?
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签