【问题标题】:jquery previous and next on click togglejquery上一个和下一个点击切换
【发布时间】:2019-04-18 07:11:33
【问题描述】:

我想在单击上一个和下一个时显示和隐藏一个 div。我正在使用 jQuery 切换来实现这一点。以下是我迄今为止尝试过的。

HTML 代码

<div id="one">a</div>
<div id="two">b</div>
<div id="three">c</div>

<div id="prev">prev</div>
<div id="next">next</div>

jQuery 脚本

jQuery(function(){
    jQuery("#two, #three").hide();
    jQuery("#next").on("click", function(){
        jQuery("#one, #two, #three").toggle();
    });
});

小提琴链接

https://jsfiddle.net/mqns2hy4/

从上面可以看出,当我点击“下一步”时,我只希望 b 出现,然后当我再次点击时,我希望只有 c 等等。同样,单击“上一个”时,我希望上面的内容反向移动,依此类推。

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    您可以创建一个变量来保存活动元素的索引并在点击时更改该变量。然后,您可以隐藏除具有当前活动索引的元素之外的所有元素。

    let active = 0;
    let el = $("div");
    let total = el.length - 1;
    
    const toggle = (el, index) => {
      el.hide()
      el.eq(index).show()
    }
    
    toggle(el, active)
    
    $('button').on('click', function() {
      this.id === 'prev' ? active -= 1 : active += 1;
      if(active > total) active = 0;
      if(active < 0) active = total
      toggle(el, active)
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="one">a</div>
    <div id="two">b</div>
    <div id="three">c</div>
    
    <button id="prev">prev</button>
    <button id="next">next</button>

    【讨论】:

    • 感谢内纳德的回答。它在小提琴上工作正常,但是当我添加我的模块时,它隐藏了所有内容。不知道这里可能是什么问题。
    • @Nitesh 您可能需要根据您的代码调整选择器,而不仅仅是使用 $('div') 选择器
    • 你能用你的实际 html 创建一个 jsfiddle
    • 它巨大的代码块。让我看看我能做些什么来截断并只表示相关部分。
    • 好的,我发现了这个问题。我将$("div") 更新为$("div#one, div#two, div#three"),现在可以正常工作了。但是有没有比每次都添加每个 div id 让它工作更好的方法呢?我尝试通过父子选择器进行操作,但再次隐藏了所有内容。接受您的回答并 +1。谢谢。
    【解决方案2】:

    你可以保留当前显示的 div 的索引:

     jQuery(function(){
       let index = 0;
       // you could also use a class to select them:
       let divs = ["#one", "#two", "#three"].map(it => jQuery(it));
    
       divs.forEach(it => it.hide());
    
       jQuery("#next").on("click", function(){
        divs[index].show();
        if(index > 0) divs[index - 1].hide();
        index++;
      });
    });
    

    【讨论】:

    • 感谢乔纳斯的回答。 “下一个”工作正常。你能分享一下“prev”应该如何工作的更新吗?
    • @nitesh 不,我想你可以自己做 :)
    • 当然可以。感谢您的努力。 +1 相同。
    【解决方案3】:

    $(document).ready(function() {
        $(".page").hide();
        $("#page1").show();
    });
    
    $(document).on('click', "#next", function(){
        var pageCount = $(".page").length;
        var position = $(".page:visible").data('position');
        $(".page:visible").hide();
        if(position < pageCount){
            $("#page" + (position+1)).show();
        }
        else
        {
            $("#page1").show();
        }
    });
    $(document).on('click', "#prev", function(){
        var position = $(".page:visible").data('position');
        var pageCount = $(".page").length;
        $(".page:visible").hide();
        if(position > 1){
            $("#page" + (position-1)).show();
        }
        else
        {
            $("#page" + pageCount).show();
        }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="page1" data-position="1" class="page">a</div>
    <div id="page2" data-position="2" class="page">b</div>
    <div id="page3" data-position="3" class="page">c</div>
    
    <div id="prev">prev</div>
    <div id="next">next</div>

    【讨论】:

    • 感谢 Zdenek 的回答。是否有可能再次让“下一个”循环 a、b、c 而不是仅仅停在 c 上? prev 一样吗?
    • 谢谢。 +1 的努力。我会接受 Nenad 的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    相关资源
    最近更新 更多