jquery按id显示/隐藏多个元素

时间:2013-04-15 10:54:10

标签: jquery click hide show

我有3段和2个按钮,它们是下一个/上一个。在初始加载时,用户只能看到第一个段落和下一个按钮,除非他在第2段中有下一个和前一个按钮,并且只有最后一个段落上的前一个按钮。这总结了我的所作所为。

除了后退按钮,我的代码工作正常,但我真正想要的是更干净/更好的做同样事情的方法。

我的HTML:

<p id="page-1" class="ui-bottom-article">
blah blah blah 1
<p id="page-2" class="ui-bottom-article">
blah blah blah 2
</p>
<p id="page-3" class="ui-bottom-article">
blah blah blah 3
</p>

<a id="rd_bk" href="">back</a><a id="rd_more" href="">Read more...</a>

我的剧本

$(function() {

     var pageNumber = 1;
         $('p.ui-bottom-article').hide();
         $('#page-1').show();
         $('#rd_bk').hide();



    $('#rd_more, #rd_bk').click(function(e){
        e.preventDefault();

     if(pageNumber == 1){
         $('p.ui-bottom-article').hide();
         $('#page-2').show();
          $('#rd_bk').show();
        pageNumber++;

        }else if(pageNumber == 2){
         $('p.ui-bottom-article').hide();
         $('#page-3').show();
         $('#rd_more').hide();
         $('#rd_bk').show();

        }else if(pageNumber == 3){
         $('p.ui-bottom-article').hide();
         $('#page-1').show();
         $('#rd_more').hide();
        pageNumber--;
        }

    }//end of if statement
    );//end of click function

}); // end of function

3 个答案:

答案 0 :(得分:2)

我想你是在追求这个:

$(function(){
    $('p.ui-bottom-article').hide(); // all p hidden here
    $('#page-1').show(); // first of it shown
    $('#rd_bk').hide(); // back btn hidden by default

    $('#rd_more').on('click', function (e) {
        e.preventDefault(); // prevent the default behavior of <a>
        $('p:visible').next('p[id^="page-"]').show().siblings('p').hide(); // show the next of the visible page in this case its page-2 is the next one
        ($('p[id^="page-"]').last().is(':visible')) ? $('#rd_more').hide().addBack('#rd_bk').show() : $('#rd_bk').show(); // show hide the next prev btns
    });

    $('#rd_bk').on('click', function (e) {
        e.preventDefault();
        $('p:visible').prev('p[id^="page-"]').show().siblings('p').hide(); // show the prev hidden div and hide the visible one
        ($('p[id^="page-"]').first().is(':visible')) ? $('#rd_bk').hide().addBack('#rd_more').show() : $('#rd_more').show(); // show hide the next prev btns
    });
});

Updated Fiddle

答案 1 :(得分:1)

我会做这样的事情:

(function($) {
  var paras,
      buttons,
      currPara = 0;

  function init() {
    paras = $('.ui-bottom-article');
    buttons = $('#rd_bk, #rd_more');
    buttons.back = buttons.eq(0);
    buttons.more = buttons.eq(1);

    buttons.on('click', buttonClick);
    updateUI();
  }

  function buttonClick(e) {
    // currPara is decreased if we're clicking
    // back or increased if we're clicking more
    currPara += (this === buttons.back[0]) ? -1 : 1;
    updateUI();
    e.preventDefault();
  }

  function updateUI() {
    paras.hide().eq(currPara).show();
    buttons.back.toggle(currPara !== 0);
    buttons.more.toggle(currPara < (paras.length-1));
  }

  // on DOM ready.
  // start 'er up    
  $(init);
}(jQuery));

<强> DEMO

答案 2 :(得分:0)

您应该使用jquery的prev和next选择器进行枚举。

这可能是下一个和上一个按钮的代码:

$('#rd_more').click(function()
{
    var next = $('.ui-bottom-article:visible').hide().next('.ui-bottom-article').show();
    if($(next).next('.ui-bottom-article').length == 0)
        $('#rd_more').hide();
    else
        $('#rd_more').show();
});

$('#rd_bk').click(function()
{
    var prev = $('.ui-bottom-article:visible').hide().prev('.ui-bottom-article').show();
    if($(prev).prev('.ui-bottom-article').length == 0)
        $('#rd_bk').hide();
    else
        $('#rd_bk').show();
});