【问题标题】:jqPagination showing only one elementjqPagination 只显示一个元素
【发布时间】:2014-05-29 01:30:04
【问题描述】:

我正在使用jqPagination plugin 对我的新闻档案进行分页。使用这种格式从后端显示新闻:

<ul class="news-pagination">
    <li>
        <h5>Title</h5>
        <p>News text</p>
        <a href="#">read more</a>
    </li>
</ul>

我使用以下脚本进行分页,找到here:

$(document).ready(function() {
    $('.news-pagination li:not(:first)').hide();
    $('.pagination').jqPagination({
        max_page: $('.news-pagination li').length,
        paged: function(page) {
            $('.news-pagination li').hide();
            $($('.news-pagination li')[page - 1]).show();
        }
    });
});

脚本有效,但我的问题是它每页只显示一个项目 (&lt;li&gt;),我不知道如何设置每个页码的帖子,所以我可以每页显示 10 个帖子。

【问题讨论】:

    标签: javascript jquery html pagination jqpagination


    【解决方案1】:

    Slice 在这里应该可以很好地工作,尤其是因为如果超出范围,它会假定到数组的末尾 (.length)。

    跳到底部查看整个代码。这里是JSFiddle 来查看它的实际效果。


    首先,页面加载时:

    $('.news-pagination li').slice(10).hide();

    我们不使用 CSS(可能与某些浏览器不兼容),而是隐藏第 10 条之后的所有新闻。


    接下来,确定有多少页:

    max_page: Math.ceil($('.news-pagination li').length / 10),

    分页脚本只跟踪页面。由您决定您需要什么号码。你说你想要每页 10 个,所以我们将你拥有的新闻数组的总长度除以 10。所以如果我们有 55 篇新闻文章,那就是 5.5 页。 但是 5.5 页听起来很奇怪......我们真正想要的是四舍五入。 Math.ceil 为我们做到了这一点。所以现在我们有 5 页,每页 10 条,其余的新闻在第 6 页。只是一个例子。但这会很好地为我们设置分页。


    现在是用户交互:

    网站访问者想要转到下一页。我们只处理了在页面最初加载时查看我们想要的所有内容。好吧,分页脚本让我们处理:paged: function (page)

    $('.news-pagination li').hide();

    这会去掉所有的新闻条目,为下一页的新闻做准备。我们可以在技术上重新计算我们当前正在处理的项目,但这会浪费时间。


    最后一步:

    $('.news-pagination li').slice((page - 1) * 10, (page * 10)).show();

    这是锦上添花的分页蛋糕 - 我们这里是从新闻数组中切出 10 个项目来展示给读者。由于我们获得了已请求的页面,因此我们只需要传递正确的数字即可获取应在该特定页面上显示的新闻。

    第 1 页: slice(0, 10) // 前 10 个项目

    第 2 页: slice(10, 20) // 下 10 个项目

    第 3 页: slice(20, 30) // 以此类推


    总而言之,我们有这个:

    $(document).ready(function () {
    
        $('.news-pagination li').slice(10).hide();
    
        $('.pagination').jqPagination({
            max_page: Math.ceil($('.news-pagination li').length / 10),
            paged: function (page) {
                $('.news-pagination li').hide();
                $('.news-pagination li').slice((page - 1) * 10, (page * 10)).show();
            }
        });
    
    });
    

    【讨论】:

    • 没问题。 jqPagination 是一个很棒的插件,但是它让你做大部分的“脏活”来弄清楚如何显示你的项目和计算页码等等。
    • 是否也可以只在第一页加载元素并延迟其他元素直到在分页器上被选中?我问这些是因为有超过 1,000 个帖子,这个页面的加载时间现在超过 8 秒,而且它只会像这样增加时间。
    • 这会很棘手,因为您的网站会默认加载它们。您只是在操纵用户在客户端看到的内容。因此,如果我访问您的网站,我的浏览器会下载所有必要的帖子,但 jQuery 会隐藏它们并在页面完全加载之前仅显示 10 个。您必须转到服务器端并仅加载您需要的帖子,然后才能到达用户的网络浏览器。在这种情况下,我的浏览器会下载前 10 个,然后您需要 AJAX 调用或类似的调用再次联系服务器以获取我请求的页面的帖子。
    • 是的,很遗憾这是不可能的,因为我在这里只能使用前端开发。
    • 您的新闻是否由内容管理系统处理?是否有其他人管理后端?不幸的是,必须在服务器端完成工作,一次只能让 10 个项目进入页面。即使您使用 jQuery 操作它们,所有的新闻无论如何都会加载到页面上。它们只会按您的意愿显示,而不是按原样加载。
    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2020-10-13
    • 2016-12-31
    相关资源
    最近更新 更多