使用jQuery切换多个DIV

cam*_*egg 2 jquery toggle

我有三个信息面板(具有ID的div panel-one,panel-two以及panel-three所有类的div info-panel),我希望在点击链接时滑入和滑出(这些具有ID toggle-one,toggle-two以及toggle-three所有类别toggle).如果其中一个div在单击其中一个链接时显示,我想隐藏可见的div并显示新的div.如果单击div自己的链接,我想切换显示/隐藏.我正在使用以下代码执行此操作:

HTML:

<ul>
    <li><a id="toggle-one" class="toggle">One</a></li>
    <li><a id="toggle-two" class="toggle">Two</a></li>
    <li><a id="toggle-three" class="toggle">Three</a></li>
</ul>

<div id="panel-one" class="info-panel"><!-- content here --></div>
<div id="panel-two" class="info-panel"><!-- content here --></div>
<div id="panel-three" class="info-panel"><!-- content here --></div>
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$("#toggle-one").click(function () {
    if($("#panel-two").is(":visible")) {
        $("#panel-two").css("z-index", "9997").hide("slide", {direction: 'up'}, 750);
    } else if($("#panel-three").css("z-index", "9997").is(":visible")) {
        $("#panel-three").css("z-index", "9997").hide("slide", {direction: 'up'}, 750);
    }
    $("#panel-one").css("z-index", "9998").toggle("slide", {direction: 'up'}, 750);
    return false;
});

$("#toggle-two").click(function () {
    if($("#panel-one").is(":visible")) {
        $("#panel-one").css("z-index", "9997").hide("slide", {direction: 'up'}, 750);
    } else if($("#panel-three").is(":visible")) {
        $("#formlink").css("z-index", "9997").hide("slide", {direction: 'up'}, 750);
    } 
    $("#panel-two").css("z-index", "9998").toggle("slide", {direction: 'up'}, 750);
    return false;
});

$("#toggle-three").click(function () {
    if($("#panel-one").is(":visible")) {
        $("#panel-one").css("z-index", "9997").hide("slide", {direction: 'up'}, 750);
    }  else if($("#panel-two").is(":visible")) {
        $("#panel-two").css("z-index", "9997").hide("slide", {direction: 'up'}, 750);
    }
    $("#panel-three").css("z-index", "9998").toggle("slide", {direction: 'up'}, 750);
    return false;
});
Run Code Online (Sandbox Code Playgroud)

它有效,但它非常冗长,并且不能很好地扩展 - 管理三个div信息很好,但是如果/何时增加更多,它将变成一个难以维持的主要痛苦.我尝试使用类似于Show/Hide Multiple Divs with Jquery中概述的方法,但似乎无法让它正常工作 - 切换和隐藏行为不能很好地工作(隐藏的潜水表演,当他们不应该'然后立即隐藏和类似的东西).同样,我似乎无法让Jquery中显示的示例在3个div切换工作.

我确信有一个更清洁的方法来做到这一点,但因为我有点jQuery和javascript n00b,我真的不知道怎么去整理它.解决这个问题的最佳方法是什么?

Ble*_*der 5

包装你的面板在<div>同一个idpanels:

<div id="panels">
  <div class="info-panel"><!-- content here --></div>
  <div class="info-panel"><!-- content here --></div>
  <div class="info-panel"><!-- content here --></div>
</div>
Run Code Online (Sandbox Code Playgroud)

应该工作:

$(".toggle").on('click', function() {
    var $panel = $('#panels').children().eq($(this).parent().index());

    $panel.toggle("slide", {direction: 'up'}, 750);
    $panel.siblings().hide("slide", {direction: 'up'}, 750);

    return false;
});
Run Code Online (Sandbox Code Playgroud)