相同元素的单个 slideToggle()

Single slideToggle() for the same elements

我有这个代码HTML:

<div>
    <div>
        <button class="btn-slide"><span class="fa fa-caret-down" aria-hidden="true"></span></button>
    </div>
    <div class="block">
    ...
    </div>
</div>

我的论坛模板中有几个这样的元素。我使用标准的 js toggle() 脚本:

$(document).ready(function() {
    $('btn-slide').click(function() {
        $('.block').slideToggle(50);
    });
});

当我单击按钮时,所有组件都会显示或隐藏,但我只想 hide/show 我选择的这个元素。我以为我可以在第 3 行使用 $(this).childern 但如果你看到 .block 不是 btn-slide 儿童。那么我怎样才能达到我想要的呢?

您可以使用parents() next()

$(document).ready(function() {
  $('.btn-slide').click(function() {
    $(this)
      // get all div in parent level
      .parents('div')
      // get immediate sibling with class block after the element 
      .next('.block')
      .slideToggle(50);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>
  <div>
    <button class="btn-slide"><span class="fa fa-caret-down" aria-hidden="true"></span>
    </button>
  </div>
  <div class="block">
    ...
  </div>
</div>

<div>
  <div>
    <div>
      <div>
        <button class="btn-slide">
          <span class="fa fa-caret-down" aria-hidden="true"></span>
        </button>
      </div>
    </div>
  </div>
  <div class="block">
    ...
  </div>
</div>

用这个改变你的 js

$(document).ready(function() {
    $('.btn-slide').click(function() {
    $(this.nextSibling.parentNode.nextElementSibling).slideToggle(50);
    });
});

如果可能,您可以向 block 添加另一个唯一的 class,例如 block-new,并使用切换事件 class。

$(document).ready(function() {
    $('.btn-slide').click(function() {
        $('.block-new').slideToggle(50);
    });
});

jsfiddle - https://jsfiddle.net/dhananjaymane11/t7reu8d1/1/