2

我有 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
4

3 回答 3

3

我想你是在这个之后:

$(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
    });
});

更新小提琴

于 2013-04-15T11:28:50.787 回答
1

您应该使用 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();
});
于 2013-04-15T11:07:21.683 回答
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));

演示

于 2013-04-15T11:25:35.623 回答