一次显示 n 个列表元素,jQuery

Posted

技术标签:

【中文标题】一次显示 n 个列表元素,jQuery【英文标题】:Show n number of list elements at a time, jQuery 【发布时间】:2013-12-05 00:36:34 【问题描述】:

我正在尝试将 LI 或 TR 形式的大量数据放入小屏幕 - 通过电视显示的员工状态。客户端请求能够一次显示 x 行,以便遍历列表。

例如,如果列出了 12 个人,则一次只显示 4 个。 0 - 4、4-8、8-12 等。如果列表中的人数是奇数,则还需要显示剩余的少数人 - 因此可能是 4、4、2。

这是我尝试过的 - 它显示 0-4,然后隐藏所有内容,然后再次显示 0-4。

<!DOCTYPE html>
<html>
<head>
    <title>Long List Test</title>
    <script type="text/javascript" src="//code.jquery.com/jquery-1.10.2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() 
            var elements = $("#longList li");
            var index = 0;

            var showNextFour = function() 
                elements.hide();
                var location = parseInt(index) + parseInt(4);
                if (location < elements.length) 
                    elements.slice(index, 4).show();
                    index = index + 4;
                 else 
                    index = 0;
                    elements.slice(index, 4).show();
                
                setTimeout(showNextFour, 500);
            
            showNextFour();
        );
    </script>
</head>
<body>
    <ul id="longList">
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
        <li>Four</li>
        <li>Five</li>
        <li>Six</li>
        <li>Seven</li>
        <li>Eight</li>
        <li>Nine</li>
    </ul>
</body>
</html>

【问题讨论】:

你为什么对已经是整数的变量使用parseInt 【参考方案1】:

您错误地使用了.slice。试试:

elements.slide(index, index+4).show();

但是,这仍然不会显示最后一个元素,因为那时location &lt; elements.length。这是一个重写,可以进一步优化您的代码:

var showNextFour = function (index) 
    if (index >= elements.length) 
        index = 0;
    
    elements.hide().slice(index, index+4).show();
    setTimeout(function() showNextFour(index+4) , 500);

showNextFour(0);

http://jsfiddle.net/mblase75/wE4S8/

【讨论】:

又短又甜。谢谢!【参考方案2】:

.slice 接受起始索引和结束索引。

var showNextFour = function() 
    elements.hide();
    var location = index + 4;
    if (location < elements.length) 
        elements.slice(index, index + 4).show();
        index = index + 4;
     else 
        elements.slice(index, elements.length).show();
        index = 0;
    
    setTimeout(showNextFour, 500);

Link to fiddle

【讨论】:

【参考方案3】:

jQuery 的 slice 方法的 end 是它在集合中从 0 开始的位置,而不是它相对于 start 的位置。

如果你解决了这个问题,你就有了工作代码。

http://jsfiddle.net/UCSJL/1/

var elements = $("#longList li");
var index = 0;

var showNextFour = function() 
    elements.hide();

    var end = index + 4;

    if (end > elements.length) 
        end = elements.length;
    

    if (index < elements.length) 
        elements.slice(index, end).show();
        index += 4;
     else 
        index = 0;
        elements.slice(index, 4).show();
    

    setTimeout(showNextFour, 500);

showNextFour();

【讨论】:

【参考方案4】:

有执行此操作的 JQueryUI 库。

例如,Datatables 所做的事情与您想要的非常相似,即显示分页数据。使用计时器来旋转数据而不是使用分页 prev 和 next 按钮不会有太大的压力。在超时期间,可以更改DataTable iDisplayStart 属性,然后调用myTable.fnDraw 更新表格。

<script>
$(document).ready(function() 
    myTable = $('#longList').dataTable( 
    "aaData": [
        /* Data set */
        [ "One" ],
        [ "Two" ],
        [ "Three" ],
        [ "Four" ],
        [ "Five" ],
        [ "Six" ],
        [ "Seven" ],
        [ "Eight" ]
    ],
    "aoColumns": [
         "sTitle": "Items" 
    ]
     );   
  );

</script>
<body>
    <table cellpadding="0" cellspacing="0" border="0" class="display" id="longList">
    </table>
</body>

【讨论】:

应该是评论。 在我编辑答案的时候不要急于求成。 :-P 我绝不会建议添加一个像 DataTables 这样相当大的插件来完成可以在十几行 JavaScript 中完成的工作。 是的,我同意在给出的例子中,它使用大锤敲碎坚果,但这取决于他的例子是否被简化了 很高兴知道这个插件就在那里,谢谢你让我注意到它:)

以上是关于一次显示 n 个列表元素,jQuery的主要内容,如果未能解决你的问题,请参考以下文章

用jquery怎么实现点击显示,再一次点击隐藏

使用多个Jquery的$.ajax()请求服务器获取新闻列表

使用 JQuery 从列表中删除除前 N 个元素之外的所有元素

jquery 点击一次加载几张图片,再点击再加载几张图片,一直到所有图片都显示,怎么实现

显示列表中的随机 10 个元素颤动 [关闭]

如何在第一次触摸时打开下拉菜单,点击第二个链接 - Jquery?