jQuery隐藏前12个元素,显示接下来的12个元素

Posted

技术标签:

【中文标题】jQuery隐藏前12个元素,显示接下来的12个元素【英文标题】:Jquery hide first 12 elementes, show next 12 elements 【发布时间】:2016-03-29 16:10:23 【问题描述】:

我想要做的是隐藏前 12 个元素并显示接下来的 12 个元素。

//this is dynamic loaded content
<div class="inner-content">
     <div class="front-pro">1</div>
     <div class="front-pro">2</div>
     <div class="front-pro">3</div>
     <div class="front-pro">4</div>
     <div class="front-pro">5</div>
     <div class="front-pro">6</div>
     <div class="front-pro">7</div>
     <div class="front-pro">8</div>
     <div class="front-pro">9</div>
     <div class="front-pro">10</div>
     <div class="front-pro">11</div>
     <div class="front-pro">12</div>
     <div class="front-pro hidden">13</div>
     <div class="front-pro hidden">14</div>
     ..... etc (200 divs more)
</div>
<div onclick="SearchNext();">next</div>

这是我的 javascript/jquery:

function SearchNext()
 var first = $('.inner-content').children('.front-pro:hidden:first');
    first.prevAll(':lt(12)').hide();
    first.nextAll(':lt(12)').show();

它会在它停止工作后工作一次。 (它跳过了 13 号) 我希望每次单击下一个都可以看到 12 个新元素并隐藏上一个。

更新 - 这是我完美运行的最终结果 JSFIDDLE DEMO

感谢 Alex Char

PHP 用于创建页码,您也可以使用 javascript 来完成此操作

//$counter is search results
    $x = 1; 
    $Pnumbers = '';
    while($x <= ceil($counter/12)) 
        if($x == 1) $ecl = 'bold';  else $ecl = ''; 
       $Pnumbers .= ' <span class="number '.$ecl.' numbering" onClick="GoTo('.$x.');">'.$x.'</span> ';
        $x++;
     

    if($counter > 12) echo'<div class="page-numbers">
    <span class="prev number" onclick="GoTo(\'prev\')">Prev</span>
    '.$Pnumbers.'
    <span class="next number" onclick="GoTo(\'next\');">Next</span>
    </div>'; 

Javascript:

function GoTo(nn) 
      var nng = parseInt($('.page-numbers .numbering.bold').text());
     if(nn == 'next')
        nn = nng+1; 
     if(nn == 'prev')
         nn = nng-1; 
      
    //get all child elements with class front-pro 
    //of element with class .inner-content
    var childElems = $(".inner-content .front-pro");
    var totalpages = Math.ceil(childElems.length/12);
    //iterate through the elements
    var first = (nn-1)*12;
    var last = first+11;
    childElems.each(function(i, el) 

      //show the elements that match the criteria removing css class
      if (i >= first && i <= last) 
        $(el).removeClass('hidden');
       else 
        //hide rest
        $(el).addClass('hidden');
      
    );

    if(nn > 1) $('.page-numbers .prev').show(); else $('.page-numbers .prev').hide(); 
    if(nn < totalpages) $('.page-numbers .next').show(); else $('.page-numbers .next').hide(); 
    $('.page-numbers .numbering').removeClass('bold');
    $('.page-numbers .numbering:eq('+(nn-1)+')').addClass('bold');
  

CSS:

.front-pro.hidden display:none !important; 
.prev   display: none; 
.page-numbers .number
background: #ff0000;  
.page-numbers text-align:center; 
.page-numbers .number.bold font-weight:bold; background:#000; 
.page-numbers .number:hover background:#000; cursor: pointer; 

确保前 12 个 div 不包含“隐藏”类,后面的所有 div 都应该在该类中“隐藏”

【问题讨论】:

很高兴我帮助了你。看起来还不错。一个建议。与其只使用一个函数(GoTo),不如考虑使用更小的函数,或者您可以像我在示例中所做的那样使用显示模块模式。 【参考方案1】:

我将实现更改为支持和以前的版本。我使用 css 类来隐藏内容。

function searchNext() 
  $('.inner-content').children('.front-pro:lt(12)').addClass('hidden');
  $('.inner-content').children('.front-pro:gt(11)').removeClass('hidden');
  $(".next").hide();
  $(".prev").show();


function searchPrev() 
  $('.inner-content').children('.front-pro:lt(12)').removeClass('hidden');
  $('.inner-content').children('.front-pro:gt(11)').addClass('hidden');
  $(".next").show();
  $(".prev").hide();
.front-pro.hidden 
  display: none;

.prev 
  display: none;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="inner-content">
  <div class="front-pro">1</div>
  <div class="front-pro">2</div>
  <div class="front-pro">3</div>
  <div class="front-pro">4</div>
  <div class="front-pro">5</div>
  <div class="front-pro">6</div>
  <div class="front-pro">7</div>
  <div class="front-pro">8</div>
  <div class="front-pro">9</div>
  <div class="front-pro">10</div>
  <div class="front-pro">11</div>
  <div class="front-pro">12</div>
  <div class="front-pro hidden">13</div>
  <div class="front-pro hidden">14</div>
</div>
<div class="next" onclick="searchNext();">next</div>
<div class="prev" onclick="searchPrev();">prev</div>

在您对下一个和上一个发表评论后,我创建了一个通用解决方案(我将第 3 步用于演示目的,但您可以使用任何您想要的):

var pager = (function() 
  /*declare private variables*/
  var first = 0,
    last = 2,
    step = 3;

  function searchNext() 
    //next function
    //increasing first and last variables
    first += step;
    last += step;
    pagerHelper();
  

  function searchPrev() 
    //previous function
    //decrease first and last variables
    first -= step;
    last -= step;
    pagerHelper();
  

  function pagerHelper() 
    //get all child elements with class front-pro 
    //of element with class .inner-content
    var childElems = $(".inner-content .front-pro");
    //iterate through the elements
    childElems.each(function(i, el) 
      //show the elements that match the criteria removing css class
      if (i >= first && i <= last) 
        $(el).removeClass('hidden');
       else 
        //hide rest
        $(el).addClass('hidden');
      
    );
    nextPreviousToggle(childElems.length);
  

  function nextPreviousToggle(maxEle) 
    //here the code is to show/hide next/previous buttons
    if (last >= maxEle) 
      $(".next").hide();
     else 
      $(".next").show();
    
    if (first === 0) 
      $(".prev").hide();
     else 
      $(".prev").show();
    
  
  return 
    searchNext: searchNext,
    searchPrev: searchPrev
  
)();
.front-pro.hidden 
  display: none;

.prev 
  display: none;

.prev:hover,
.next:hover 
  text-decoration: underline;
  cursor: pointer;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="inner-content">
  <div class="front-pro">1</div>
  <div class="front-pro">2</div>
  <div class="front-pro">3</div>
  <div class="front-pro hidden">4</div>
  <div class="front-pro hidden">5</div>
  <div class="front-pro hidden">6</div>
  <div class="front-pro hidden">7</div>
  <div class="front-pro hidden">8</div>
  <div class="front-pro hidden">9</div>
  <div class="front-pro hidden">10</div>
  <div class="front-pro hidden">11</div>
  <div class="front-pro hidden">12</div>
  <div class="front-pro hidden">13</div>
  <div class="front-pro hidden">14</div>
</div>
<span class="next" onclick="pager.searchNext();">next</span>
<span class="prev" onclick="pager.searchPrev();">prev</span>

参考文献

:gt()

:lt()

【讨论】:

这行得通,但我得到了 200 多个前端 div,我想每次点击都转到下 12 个,现在它显示了所有内容 我使用你的 javascript 更新了我的帖子 - jsfiddle【参考方案2】:

您使用以下代码来处理任意数量的 div,

var x = $(".inner-content div").hide();

$("div:contains(next)").click(function() 
  var cnt = $(this).data("cnt") || 0;
  if((cnt * 12) > x.length) cnt = 0; 
  x.hide().filter(":eq("+ (cnt * 12)  + "), :lt(" + ((cnt * 12) + 12) + "):gt(" + (cnt * 12) + ")").show();
  $(this).data("cnt", ++cnt);
);

DEMO

【讨论】:

这是最好的方法,非常感谢!你也知道怎么做上一个按钮吗? @Vazzilly 是的,但要问一个新问题。这样它就会引起这里其他专家的注意。这也将有助于未来的游客。让这篇文章不受污染。 :) New post @Vazzilly 12:15 am 在印度。大脑已经睡着了。尝试从别人那里得到解决方案。如果不是,我会同时给你一个 tomo 的解决方案。 :)【参考方案3】:

试试这个

$('.inner-content').children().each(function (i, x) 
    if (i < 12) // Hide First 12 i.e 0-11
        $(x).addClass('hidden');
    else if (i < 24) // Show Next 12 i.e 12-23
        $(x).removeClass('hidden');
)

还要确保您已将 css 规则定义为

.hidden 
    display: none;

【讨论】:

这隐藏了一切

以上是关于jQuery隐藏前12个元素,显示接下来的12个元素的主要内容,如果未能解决你的问题,请参考以下文章

一次显示 n 个列表元素,jQuery

jQuery Slide Down 用 slice 显示更多

仅获取未隐藏的元素.. Jquery

是否可以将 jQuery 中的悬停元素应用于具有显示和隐藏功能的两个 div?

jQuery 创建元素最初是隐藏的

怎样判断jQuery 元素是不是显示与隐藏