通过多个ul列表进行jquery分页

时间:2014-05-13 16:00:44

标签: jquery pagination html-lists elements

我无法让这个脚本运行良好。有人能帮我吗?首先,我想说明我可以将它用于多个<div><ul>元素。 另外一件事,我想这样做,如果我有超过5个<li>元素,它会附加一个“下一个”按钮,然后在第2页,它会附加“prev”和“next”按钮。另外,如果在最后一页上不应该看到“下一步”按钮。 这是我目前的代码:

 $('div').each(function(){
    $(this).append('<a class="prev">prev</a> | <a class="next">next</a>');
    $(this).find('ul li:gt(4)').hide();

    $(this).find('.next').click(function() {
        var last = $('ul').children('li:visible:last');
        last.nextAll(':lt(5)').show();
        last.next().prevAll().hide();
    });

     $(this).find('.prev').click(function() {
        var first = $('ul').children('li:visible:first');
        first.prevAll(':lt(5)').show();
        first.prev().nextAll().hide()
    });

});

工作示例http://jsfiddle.net/e6sP7/3/

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作(Fiddle):

function check_navigation_display(el) {
    //accepts a jQuery object of the containing div as a parameter
    if ($(el).find('ul').children('li').first().is(':visible')) {
        $(el).children('.prev').hide();
    } else {
        $(el).children('.prev').show();
    }

    if ($(el).find('ul').children('li').last().is(':visible')) {
        $(el).children('.next').hide();
    } else {
        $(el).children('.next').show();
    }    
}

$('div').each(function () {
    $(this).append('<a class="prev">prev</a> | <a class="next">next</a>');
    $(this).find('ul li:gt(4)').hide();

    check_navigation_display($(this));

    $(this).find('.next').click(function () {
        var last = $(this).siblings('ul').children('li:visible:last');
        last.nextAll(':lt(5)').show();
        last.next().prevAll().hide();
        check_navigation_display($(this).closest('div'));
    });

    $(this).find('.prev').click(function () {
        var first = $(this).siblings('ul').children('li:visible:first');
        first.prevAll(':lt(5)').show();
        first.prev().nextAll().hide()
        check_navigation_display($(this).closest('div'));
    });
});

答案 1 :(得分:1)

只需将您的引用缓存到例如var foo = $(this);所以它指向适当的组,你没事。更新您对foo使用var last = $('ul',foo).children('li:visible:last');的第一个和最后一个引用:

<强> jsFiddle example

$('div').each(function () {
    var foo = $(this);
    $(this).append('<a class="prev">prev</a> | <a class="next">next</a>');
    $(this).find('ul li:gt(4)').hide();
    $(this).find('.next').click(function () {
        var last = $('ul',foo).children('li:visible:last');
        last.nextAll(':lt(5)').show();
        last.next().prevAll().hide();
    });
    $(this).find('.prev').click(function () {
        var first = $('ul',foo).children('li:visible:first');
        first.prevAll(':lt(5)').show();
        first.prev().nextAll().hide()
    });
});