Jquery Pagination - 处理不可见的页面

时间:2012-05-17 00:24:31

标签: jquery pagination

我的问题是,处理不可见页面的最佳方法是什么?

$('.results').slice('//hidden pages').hide();
$('.results').slice('//current page').show();

<?php
while ($row = mysql_fetch_assoc($query)) {
   echo '<span class="results">' . $row['items'] . "</span><br/>";
}
?>

目前我使用的$.hide()工作正常 - 直到查询返回数千行数据(准确地说大约9000)。如果查询结果太多,则似乎滞后/崩溃firefox。 hide/show是错误的做法吗?我一直在关注Jquery $.detach,但我不确定这是否能解决这个问题。

这是应该用PHP处理的东西吗?

3 个答案:

答案 0 :(得分:1)

为什么不使用AJAX动态加载值?我认为您选择的方法占用了太多内存,因为它在DOM中生成了太多节点,导致Firefox崩溃。

答案 1 :(得分:1)

客户端只能处理这么多。如果你想看一个例子,试着处理10,000字节的字母a(不建议实际运行):

    var a = "a";
    var z = 100000000;
    for (var i = 0; i < z; i++) {
        a += "a";
    }

通常,分页所做的是按需加载当前页面。然后释放不在播放的页面。

我建议将ajax事件附加到页面的导航中:

<div id="myTag"></div>
<div class="PageNumbers" data-page-number="1">1</div>
<script type="text/javascript">
              $(".PageNumbers").click(function () {
                 $.ajax({
                    url: "/Page/",
                    type: 'GET',
                    data: { page: $(this).attr("data-page-number")},
                    success: function (result) {
                        $("#myTag").html(result);
                     }
                });
              });
</script>

此外,页面中最需要保留的部分是图像。将它们存储在数组中遇到它们可以大大减少“已发现”内容的重新加载。

答案 2 :(得分:1)

它很慢的主要原因是你在9000 x n DOM元素上运行。

避免这种情况的一种方法是将结果存储在javascript数组中,并仅在当前页面中呈现项目。

这是可行的,但有点单调乏味,并且在其他一些javascript库(如knockout)的帮助下会更容易。

以下是使用knockout的示例实现: http://jsfiddle.net/6bgCX/7/

编辑:添加了示例代码