如何显示前n个元素,然后展开以显示剩余元素?

时间:2011-10-27 10:24:49

标签: jquery jquery-ui

我有一个elemnts列表(比方说10),我只在页面加载时显示前4个 点击more将展开列表并显示剩余元素。

我的HTML代码如下所示:

  <div id="sales">
    <div class="listContainer">
        <ul>
          <li>1</li>
          <li>2</li>
          <li>n</li>
          <li>10</li>
        </ul>
    </div>
    <div class="expandSalesList">More</div>
  </div>

更新

这是我目前的代码:

jQuery('#sales li:gt(4)').hide();

jQuery('#sales .expandSalesList').live('click',function() {
    jQuery('#sales li').not(':visible').animate({height: 'toggle'}, 500, function() {});
});

如何在下次点击时将列表向上滑动?

我猜它一定是这样的:

jQuery('#sales .expandSalesList').live('click',function() {
    jQuery('#sales li:lt(4)').animate({height: 'toggle'}, 500, function() {});
});

更新2

我和你的帮助人员找到了答案:)

jQuery('#sales .expandSalesList').live('click',function() {
    jQuery('#sales li:gt(4):visible').animate({height: 'toggle'}, 600, function() {}); // This line MUST come before next line.
    jQuery('#sales li').not(':visible').animate({height: 'toggle'}, 500, function() {});
});

2 个答案:

答案 0 :(得分:3)

显示所有尚未显示的人:)

jQuery('#sales li:lt(4)').show();

jQuery('#sales .expandSalesList').live('click',function() {
    jQuery('#sales li').not(':visible').slideDown();
});

但最好隐藏所有“li高于4”而不是显示它们,所以没有JS的人可以看到结果。

像这样:

jQuery('#sales li:gt(4)').hide();

jQuery('#sales .expandSalesList').live('click',function() {
    jQuery('#sales li').not(':visible').each( function() {

        jQuery(this).slideDown();

    });
});

答案 1 :(得分:2)

我有两个解决方案。在第一个中,所有li分别向下滑

var n = 4;

jQuery('#sales li:lt(' + n + ')').show();

jQuery('#sales .expandSalesList').live('click',function() {
  jQuery('#sales li:gt(' + (n - 1) + ')').slideDown();
});

这很简单,现在看到所有li在一个移动(fiddle)中向下滑动的解决方案:

var n = 4,
    $list = jQuery('#sales ul');

$list.find('li:lt(' + n + ')').addClass('show');

jQuery('#sales .expandSalesList').live('click',function() {
    var $li = jQuery('<li />');
    $list.find('li:gt(' + (n - 1) + ')').addClass('show')
                                        .appendTo($li);

    $li.appendTo($list).slideDown(function() {
        var $this = $(this);

        $this.find('li')
             .appendTo($list)
        $this.remove();
    });

    n = $list.find('.show').length;
});

请注意以下CSS:

.listContainer li {
    display: none;
}

.listContainer li.show {
    display: block;
}