如何打开手风琴中的下一个标签?

How to open next tab in accordion?

我正在尝试制作一个打开第一个选项卡的手风琴。一个按钮应该打开下一个选项卡并关闭前一个选项卡。 到目前为止,它只是关闭了选项卡,但没有打开下一个选项卡,我很难弄清楚如何让它工作。

$(document).ready(function() {
  $('.cat').click(function() {
    $(this).parent().slideUp('fast');
    $(".a-content").next().css('display', 'block');
  });
});
.a-toggle {
  cursor: pointer;
  margin: 0;
}

.a-content {
  display: none;
}

.a-content.default {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="a-section">
  <h4 class="a-toggle">1. Title</h4>
  <div class="a-content default">
    <p>Some text</p>
    <button type="button" class="cat">Continue</button>
  </div>
  <h4 class="a-toggle">2. Title</h4>
  <div class="a-content">
    <p>More text</p>
    <button type="button" class="cat">Continue</button>
  </div>
  <h4 class="a-toggle">3. Title</h4>
  <div class="a-content">
    <p>Even more text</p>
    <button type="button" class="cat">Continue</button>
  </div>
</div>

$(document).ready(function() {
  $('.cat').click(function() {
    const parent = $(this).parent();
    parent.slideToggle();
    const next = parent.next().next();
    next.slideToggle();
  });
});
.a-toggle {
  cursor: pointer;
  margin: 0;
}

.a-content {
  display: none;
}

.a-content.default {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="a-section">
  <h4 class="a-toggle">1. Title</h4>
  <div class="a-content default">
    <p>Some text</p>
    <button type="button" class="cat">Continue</button>
  </div>
  <h4 class="a-toggle">2. Title</h4>
  <div class="a-content">
    <p>More text</p>
    <button type="button" class="cat">Continue</button>
  </div>
  <h4 class="a-toggle">3. Title</h4>
  <div class="a-content">
    <p>Even more text</p>
    
  </div>
</div>

一行解决

你需要两件事:

  • 设置一个新的 next() 因为 .a-content 不是它自己之后的下一个兄弟,它在
  • 之间有 h4
  • 然后在单击时,您需要使用 $(this)
  • 将父元素设置为单击的元素

您可以通过添加 class 而不是设置 CSS inline

来改善这一点

$('.cat').click(function() {
  $(this).parent().slideUp('fast').next().next().addClass('open'); //SlideToggle will work too
});
.a-toggle {
  cursor: pointer;
  margin: 0;
}

.a-content {
  display: none;
}

.a-content.default, .a-content.open {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="a-section">
  <h4 class="a-toggle">1. Title</h4>
  <div class="a-content default">
    <p>Some text</p>
    <button type="button" class="cat">Continue</button>
  </div>
  <h4 class="a-toggle">2. Title</h4>
  <div class="a-content">
    <p>More text</p>
    <button type="button" class="cat">Continue</button>
  </div>
  <h4 class="a-toggle">3. Title</h4>
  <div class="a-content">
    <p>Even more text</p>
    <button type="button" class="cat">Continue</button>
  </div>
</div>

试试这个

$(document).ready(function() {
  $('.cat').click(function() {
    const $parent = $(this).parent();
    $parent.slideUp('fast');
    $parent.nextUntil(".a-content").next().css('display', 'block');
  });
});