javascript - 如果单击相同则关闭 Accordion

标签 javascript jquery html css

我的网站上有 Accordion 。它工作完美。如果一个 Accordion 打开并点击第二个,那么它将关闭前一个。目前没有问题。

我的问题是,如果单击 Accordion ,我必须关闭 Accordion 。我的意思是,如果 Accordion 打开并点击它,那么它应该关闭。

你能检查我的脚本吗?我应该在哪里添加关闭脚本? 我试过了

 $('.ac-pane.active .ac-title').click(function(){
 getparent.find('.ac-pane').removeClass('active');
 //  $(this).next('.ac-content').slideUp();
 $('.ac-pane .ac-content').css('display', 'none');

 });

//Accordion
$(function() {
  'use strict';

  var selector = $('.ac-title');

  $('.accordion-wrapper').each(function() {
    if ($(this).find('.ac-pane').hasClass('active')) {
      $('.ac-pane.active .ac-content').css('display', 'block');
    }
  });

  selector.on('click', function(event) {
    event.preventDefault();

    // get the attr value
    var attr = selector.attr('data-accordion');
    var getparent = $(this).closest('.accordion-wrapper');

    if ($(this).attr('data-accordion') == 'true') {

      if ($(this).next('.ac-content').is(':visible')) {
        return false;
      } else {

        getparent.find('.ac-content').slideUp();
        $(this).next('.ac-content').slideDown();
        getparent.find('.ac-pane').removeClass('active');
        $(this).parent().addClass('active');
      }

    } else {
      $(this).next('.ac-content').slideToggle();
      $(this).parent().toggleClass('active');
    }

  });
});
.ac-pane {
  margin-bottom: 15px;
  color: #000;
}

.ac-pane:last-child {
  margin-bottom: 0;
}

.ac-content {
  display: none;
}

.ac-title {
  /*border: 1px solid #000;*/
  color: #000;
  display: block;
  padding: 12px;
}

.ac-title i {
  float: right;
  font-size: 20px;
}

.ac-title i:before {
  content: "\f107";
}

.active .ac-title i:before {
  content: "\f106";
}

.ac-content {
  border: 1px solid #fff;
  margin-top: -1px;
  padding: 15px;
}
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css">
<section>
  <div class="container">
    <div class="row">
      <div class="col-sm-12">
        <div class="heading">
          <h2>Accordion Demo</h2>
        </div>
        <div class="accordion-wrapper">
          <div class="ac-pane active">
            <a href="#" class="ac-title" data-accordion="true">
              <span>Hello World</span>
              <i class="fa"></i>
            </a>
            <div class="ac-content">
              Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nihil ullam architecto earum reprehenderit dolore iusto labore sed, sunt, quasi soluta assumenda, a quam aspernatur repudiandae enim. Architecto, assumenda tempore vitae!
            </div>
          </div>
          <div class="ac-pane">
            <a href="#" class="ac-title" data-accordion="true">
              <span>Hello World</span>
              <i class="fa"></i>
            </a>
            <div class="ac-content">
              Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nihil ullam architecto earum reprehenderit dolore iusto labore sed, sunt, quasi soluta assumenda, a quam aspernatur repudiandae enim. Architecto, assumenda tempore vitae!
            </div>
          </div>
          <div class="ac-pane">
            <a href="#" class="ac-title" data-accordion="true">
              <span>Hello World</span>
              <i class="fa"></i>
            </a>
            <div class="ac-content">
              Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nihil ullam architecto earum reprehenderit dolore iusto labore sed, sunt, quasi soluta assumenda, a quam aspernatur repudiandae enim. Architecto, assumenda tempore vitae!
            </div>
          </div>
          <div class="ac-pane">
            <a href="#" class="ac-title" data-accordion="true">
              <span>Hello World</span>
              <i class="fa"></i>
            </a>
            <div class="ac-content">
              Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nihil ullam architecto earum reprehenderit dolore iusto labore sed, sunt, quasi soluta assumenda, a quam aspernatur repudiandae enim. Architecto, assumenda tempore vitae!
            </div>
          </div>
        </div>
      </div>


    </div>
  </div>
</section>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>

最佳答案

您可以做类似的事情,选择被点击元素的 parent 并从兄弟元素和 slideToggle 被点击元素内容中移除事件类。

$('.ac-pane.active .ac-content').css('display', 'block');

$(".ac-title").click(function(e) {
  e.preventDefault();
  
  const parent = $(this).parent('.ac-pane');
  const siblings = parent.siblings('.ac-pane');
  
  siblings.removeClass('active');
  siblings.find('.ac-content').slideUp();
  
  parent.toggleClass('active');
  parent.find('.ac-content').slideToggle();
})
.ac-pane {
  margin-bottom: 15px;
  color: #000;
}

.ac-pane:last-child {
  margin-bottom: 0;
}

.ac-content {
  display: none;
}

.ac-title {
  /*border: 1px solid #000;*/
  color: #000;
  display: block;
  padding: 12px;
}

.ac-title i {
  float: right;
  font-size: 20px;
}

.ac-title i:before {
  content: "\f107";
}

.active .ac-title i:before {
  content: "\f106";
}

.ac-content {
  border: 1px solid #fff;
  margin-top: -1px;
  padding: 15px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css">
<section>
  <div class="container">
    <div class="row">
      <div class="col-sm-12">
        <div class="heading">
          <h2>Accordion Demo</h2>
        </div>
        <div class="accordion-wrapper">
          <div class="ac-pane active">
            <a href="#" class="ac-title" data-accordion="true">
              <span>Hello World</span>
              <i class="fa"></i>
            </a>
            <div class="ac-content">
              Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nihil ullam architecto earum reprehenderit dolore iusto labore sed, sunt, quasi soluta assumenda, a quam aspernatur repudiandae enim. Architecto, assumenda tempore vitae!
            </div>
          </div>
          <div class="ac-pane">
            <a href="#" class="ac-title" data-accordion="true">
              <span>Hello World</span>
              <i class="fa"></i>
            </a>
            <div class="ac-content">
              Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nihil ullam architecto earum reprehenderit dolore iusto labore sed, sunt, quasi soluta assumenda, a quam aspernatur repudiandae enim. Architecto, assumenda tempore vitae!
            </div>
          </div>
          <div class="ac-pane">
            <a href="#" class="ac-title" data-accordion="true">
              <span>Hello World</span>
              <i class="fa"></i>
            </a>
            <div class="ac-content">
              Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nihil ullam architecto earum reprehenderit dolore iusto labore sed, sunt, quasi soluta assumenda, a quam aspernatur repudiandae enim. Architecto, assumenda tempore vitae!
            </div>
          </div>
          <div class="ac-pane">
            <a href="#" class="ac-title" data-accordion="true">
              <span>Hello World</span>
              <i class="fa"></i>
            </a>
            <div class="ac-content">
              Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nihil ullam architecto earum reprehenderit dolore iusto labore sed, sunt, quasi soluta assumenda, a quam aspernatur repudiandae enim. Architecto, assumenda tempore vitae!
            </div>
          </div>
        </div>
      </div>


    </div>
  </div>
</section>

关于javascript - 如果单击相同则关闭 Accordion ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56608446/

相关文章:

javascript - 将对象的数组属性发送到 Ajax

javascript - 光滑的 slider 更改 bg 图像

javascript - Angular 2 过滤器和切换功能无法按预期工作

javascript - 自动播放音频未播放

javascript - 更改div中的字体大小

javascript - NodeJS - 使用 ajax 将数组从客户端传递到服务器

javascript - 在函数中将字符串与变量连接时出现无效的左侧参数错误

javascript - 如何在 javascript 中克隆迭代器?

javascript - 带有时间的谷歌图表来自 php json