jquery / WordPress:将无限滚动效果应用于通过AJAX加载的新内容

时间:2010-08-16 21:54:54

标签: php jquery wordpress scroll infinite

因此,我尝试将jQuery无限滚动插件与一些自定义jQuery结合使用,该jQuery使用AJAX从不同的PHP文件加载新循环。无限滚动适用于初始页面内容,但我无法使用新加载的内容。以下是AJAX逻辑的工作原理:

  1. 点击类别
  2. 获取存储的类别ID REL属性
  3. 将该ID存储为变量
  4. 将变量作为参数传递给 一个不同的PHP文件循环和 加载PHP文件的那部分
  5. 无限滚动的关键部分是脚本可以找到以下内容:

    1. 包含指向帖子下一页的链接的元素(初始内容的#pageNav和新内容的#filterPageNav)
    2. 指向帖子下一页的链接(#beyondInfinity)
    3. 包含帖子的div
    4. 帖子本身
    5. 这可能是问题的一部分。另一个问题可能是$ _POST ['id']调用未正确发布到分页类别帖子的各个页面:(“../category-filter/page/2”,“.. / category -filter / page / 3“etc)

      任何见解或帮助非常感谢!!!

      编辑/添加8/17:

      在我(或你)回答关于将无限滚动应用于通过AJAX category__in'=>array($_POST['id'])加载的类别的外部循环的问题之前,首先应该假设一个固定的类别,例如{{1相反。因此,如果任何人对这个简化的问题有任何见解或答案,那也很棒!

      这是JQUERY:

      category__in'=>array(13)

      这是PHP模板对于加载的内容:

      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script> 
      <?php if( is_home() ) { ?>
      <script type="text/javascript" src="<?php bloginfo('stylesheet_directory'); ?>/assets/js/spritely.js"></script>
      <script type="text/javascript">
      $(document).ready(function(){
          //Add Loading Image
          $('body').append('<div id="catFilterLoading"></div>');
          $('#catFilterLoading').pan({fps: 30, speed: 1000, dir: 'right', depth: '1'});
      
          //Filter Categories
          $.ajaxSetup({cache:false});
          $('#categoryContainer ul li a').click( function() {
              $('#catFilterLoading').show();
                //Remove the initial page navigation + the infinite scroll script
              $('#pageNav, #documentInfinite').remove();
                //Get the category ID, stored in the REL attr
              var cat_id = $(this).attr('rel');
                //Load the '#filter' div and post the cat_id to that page to be used in the new loop
              $("#content").load("http://<?php echo $_SERVER[HTTP_HOST]; ?>/category-filter/ #filter",{id:cat_id}, function() {
                        //This is the call back function for load()
                        //Do this stuff once the new content has finished loading
                        //hide the loading graphic
                  $('#catFilterLoading').hide();
      
                        //apply a new infinite scroll effect to the loaded content
                  $('#filter').infinitescroll({
                      navSelector  : "#filterPageNav",            
                      nextSelector : "#beyondInfinity",    
                      itemSelector : "#filter .post",
                      loadingImg   : "<?php bloginfo('stylesheet_directory'); ?>/assets/images/loading.gif",
                      donetext     : ""
                  });
      
              });
      
              return false;
          })
      });
      </script>
      <?php } ?>
      <script type="text/javascript" src="<?php bloginfo('stylesheet_directory'); ?>/assets/js/jquery.easing.1.3.js"></script>
      <script type="text/javascript" src="<?php bloginfo('stylesheet_directory'); ?>/assets/js/init.js"></script>
      <script type="text/javascript" src="<?php bloginfo('stylesheet_directory'); ?>/assets/js/infinite-scroll.min.js"></script>
      <?php if( is_home() ) { ?>
      <script id="documentInfinite" type="text/javascript">
      $(document).ready(function() {
          $('#content').infinitescroll({
              navSelector  : "#pageNav",            
              nextSelector : "#beyondInfinity",    
              itemSelector : "#content .post",
              loadingImg   : "<?php bloginfo('stylesheet_directory'); ?>/assets/images/loading.gif",
              donetext     : ""
          });
      });
      </script>
      
      <script type="text/javascript" src="<?php bloginfo('stylesheet_directory'); ?>/assets/js/subnavHome.js"></script>
      <?php } else { ?>
      <script type="text/javascript" src="<?php bloginfo('stylesheet_directory'); ?>/assets/js/subnavPage.js"></script>
      <?php } ?>
      

      以下是分页功能的HTML输出(删除了域名):

      <?php
      /*
      Template Name: categoryFilter
      */
      ?>
      <?php
      
      get_header();
      
      ?>
                  <h3 id="thinkingH3">Latest Thinking</h3>
      
                  <div id="content">
                      <div id="filter">
      
      <?php
      $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
      if( !is_paged() ) {
      $args=array(
          'category__in'=>array($_POST['id']),
          'paged'=>$paged
         );
      } else {
      $args=array(
          'category__in'=>array($_POST['id']),
          'paged'=>$paged
         );
      }
      query_posts($args);
      if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>                      
      
      
                          <div class="post <?php echo $_POST['id']; ?>">
      
                              <div class="postExcerpt">
                                  <span class="postDateOutter"></span>
                                  <span class="postDate"><?php the_time('m.d.Y') ?></span>
                                  <img src="<?php bloginfo('stylesheet_directory'); ?>/assets/images/post.jpg" alt="post image" />
                                  <h2><?php the_title(); ?></h2>
                                  <?php the_advanced_excerpt(); ?>
      
                                  <a class="readFull" href="#">Read Full Post</a>
                              </div>
      
                              <div class="postAuthor">
                                  <?php echo get_avatar( get_the_author_email(), '120' ); ?>
                                  <b><?php the_author(); ?></b>
                                  <b>Comments: <?php comments_number('0', 'one', '%'); ?> </b>
                                  <b>Thinking About</b>
                                  <ul>
                                      <?php swift_list_cats(7); ?>
                                  </ul>
                              </div>
      
                          </div> <!-- post -->
      
      <?php endwhile; endif; ?>
                      <div id="filterPageNav"><?php get_pagination(); ?></div>
                      </div> <!-- filter -->
      
                  </div> <!-- content -->
      
      
      
      
                  <?php get_sidebar(); ?>
      
                  <?php get_footer(); ?>
      

1 个答案:

答案 0 :(得分:3)

很难说我是否无法在浏览器中调试脚本。您无法提供测试URI或将infinitescroll的调试属性设置为true并将其生成的输出发布到FireBug控制台?

添加带有id属性集的内容可能会有一些东西。当两个或多个元素共享相同的id时,我不知道DOM的行为方式,这应该是唯一的。

我认为这应该适用于#content和#filter,因为它们并没有真正添加到DOM中,但#filter容器中的所有元素应该更好地仅使用类,或者应该在加载任何内容之前从DOM中删除它们。