Simple Wordpress AJAX pagination

前端 未结 2 2029
眼角桃花
眼角桃花 2020-12-05 06:18

I\'m using the loop + jQuery below to load in the next set of pages, and it works on the first click, but when the next page is loaded in and I click on \"newer posts\" it r

相关标签:
2条回答
  • 2020-12-05 06:42

    I used adeneo's solution, with a couple of minor tweaks.

    1. My pagination was outside of the container that I wanted to load, so I performed a separate call for the pagination content. Per the comments, I've updated the code to make a single Ajax call, filtering on the returned data to retrieve and update the desired elements.
    2. My pagination consisted of all links, even for the current page. There was no point in doing an Ajax request if the clicked element is the active page, so I added logic to target only pagination links whose parent list item element did not have the .disabled class.
    3. The page jumped every time I loaded new content because it was using fadeOut/In (which sets display: none; once the opacity animation is complete). Instead, I manually animate the opacity, which limits the amount of height fluctuation.

    Here's the updated code:

    $('#content').on('click', '#pagination :not(.disabled) a', function(e){
        e.preventDefault();
        var link = $(this).attr('href');
        $.post( link, function( data ) {
            var content = $(data).filter('#content');
            var pagination = $(data).filter('#pagination');
            $('#pagination').html(pagination.html());
            $('#content').animate(
                {opacity: 0},
                500, 
                function(){
                    $(this).html(content.html()).animate(
                        {opacity: 1},
                        500
                    );
                }
            );
        });
    });
    
    0 讨论(0)
  • 2020-12-05 06:50

    You're using jQuery's load() method to insert content, which is a shortcut for $.ajax, which of course inserts the content dynamically.

    Dynamic content requires delegation of the events to a non-dynamic parent, something jQuery makes easy with on()

    jQuery(function($) {
        $('#content').on('click', '#pagination a', function(e){
            e.preventDefault();
            var link = $(this).attr('href');
            $('#content').fadeOut(500, function(){
                $(this).load(link + ' #content', function() {
                    $(this).fadeIn(500);
                });
            });
        });
    });
    
    0 讨论(0)
提交回复
热议问题