javascript - Accordion 组如何修改代码

标签 javascript jquery html css accordion

var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].onclick = function() {
    var active = document.querySelector(".accordion.active");
    if (active && active != this) {
      active.classList.remove("active");
      active.nextElementSibling.classList.remove("show");
    }
    this.classList.toggle("active");
    this.nextElementSibling.classList.toggle("show");
  }
}

var accd = document.getElementsByClassName("accordion-deep");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].onclick = function() {
    var active = document.querySelector(".accordion-deep.active");
    if (active && active != this) {
      active.classList.remove("active-deep");
      active.nextElementSibling.classList.remove("show");
    }
    this.classList.toggle("active-depp");
    this.nextElementSibling.classList.toggle("show");
  }
}
<button class="accordion">Section 1</button>
<div id="foo" class="panel">
<button class="accordion-deep">Section 1</button>
<div id="foo" class="panel-deep">
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
</div>

我在线程中找到了这样的代码并且效果很好,但我需要将另一个 Accordion 放入第 1 部分。现在,当我这样做时,当我单击更深的 Accordion 面板时,第 1 部分正在关闭。 我试图将另一个变量添加到更深的 Accordion 中,但这没有用。

CSS: toggle accordion panel?

最佳答案

由于您没有提供 css,我只能假设您是从另一个示例中复制的。我对您的代码进行了更改,现在可以使用了。

但在此之前,您的代码存在语法错误。如:

this.classList.toggle("active-depp");

应该是

this.classList.toggle("active-deep");

所有的acc 都应该是第二个函数的accd。 但最重要的是,你必须为 accordion-deeppanel-deep 复制 css,例如

var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].onclick = function() {
    var active = document.querySelector(".accordion.active");
    if (active && active != this) {
      active.classList.remove("active");
      active.nextElementSibling.classList.remove("show");
    }
    this.classList.toggle("active");
    this.nextElementSibling.classList.toggle("show");
  }
}

var accd = document.getElementsByClassName("accordion-deep");
var i;

for (i = 0; i < accd.length; i++) {
  accd[i].onclick = function() {
    var active = document.querySelector(".accordion-deep.active");
    if (active && active != this) {
      active.classList.remove("active-deep");
      active.nextElementSibling.classList.remove("show");
    }
    this.classList.toggle("active-deep");
    this.nextElementSibling.classList.toggle("show");
  }
}
	button.accordion, button.accordion-deep {
	background-color:#CBF1F5;
	
    color: #444;
    cursor: pointer;
    padding: 18px;
    width: 100%;
    border:solid 1px #3CF;
    text-align: left;
    outline: none;
    font-size: 18px;
    transition: 0.4s;
	font-weight:600;
}

button.accordion.active, button.accordion-deep.active, button.accordion:hover, button.accordion-deep:hover {
    background-color: #E1F7FB;
}

button.accordion:after, button.accordion-deep:after {
    content: '\25bc';
    font-size: 13px;
    color: #777;
    float: right;
    margin-left: 5px;
}

button.accordion.active:after, button.accordion-deep.active:after {
    content: "\25b2";
	color:#FFF;

}

.panel, .panel-deep {
    padding: 0 18px;
    background-color: white;
    max-height: 0;
    overflow: hidden;
    transition: 0.6s ease-in-out;
    opacity: 0;
}

.panel.show, .panel-deep.show {
    opacity: 1;
    max-height: 500px;  
}

.panel.hide, .panel-deep.hide {
    opacity: 0;
    height: 0;  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="accordion">Section 1</button>
<div id="foo" class="panel">
<button class="accordion-deep">Section 1</button>
<div id="foo" class="panel-deep">
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
</div>

希望对您有所帮助。

EDIT : With this workaround, you can go one-level deep. But if you want to go deep, it is not an elegant way of writing code this way like copying each time you wanna go deep.

关于javascript - Accordion 组如何修改代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43343290/

相关文章:

html - 显示上方的空白区域 :inline-block divs

html - 列表不会水平居中

javascript - 在具有不同边框的 div 上调用函数

javascript - 如何将canvas绘制到新的html页面

javascript - 查询 : Sliding Puzzle Generator Giving Unsolvable Puzzles

javascript - 在 CodeIgniter 中使用 Bootstrap 提交 jQuery 表单

javascript - jQuery 选择器和智能克隆

javascript - NextJS : getStaticProps revalidate not working

javascript - JS 获取一个新数组,只包含包含特定值的元素

javascript - jquery数据表: page length select list not shown