我有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
答案 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
});
});
答案 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();
});