打开新的时如何关闭可折叠 div

How to close collapsible div when opening new one

我正在尝试设置可折叠的 div。它们工作正常,但是当我打开另一个可折叠的 div 时,打开的不会关闭,除非我手动将它们一个一个地关闭。

如何在打开另一个时自动使打开的可折叠div?

HTML

<html>
  <button type="button" class="collapsible">BUTTON</button>
  <div class="content">
    <p style="padding: 20px 0;">CONTENT</p>
  </div>
  <button type="button" class="collapsible">BUTTON</button>
  <div class="content">
    <p style="padding: 20px 0;">CONTENT</p>
  </div>
  <button type="button" class="collapsible">BUTTON</button>
  <div class="content">
    <p style="padding: 20px 0;">CONTENT</p>
  </div>
</html>

JS

var coll = document.getElementsByClassName("collapsible");
var i;
for (i = 0; i < coll.length; i++) {
  coll[i].addEventListener("click", function() {
    this.classList.toggle("active");
    var content = this.nextElementSibling;
    if (content.style.maxHeight){
      content.style.maxHeight = null;
    } else {
      content.style.maxHeight = content.scrollHeight + "px";
    }
  });
}

在打开折叠的 div 之前,您的代码必须关闭所有打开的 divs。

// toggle collapse of specified content
function toggleContent(content) {
  if (content.style.maxHeight) {
    content.style.maxHeight = null;
  } else {
    content.style.maxHeight = content.scrollHeight + 'px';
  }
}

// collapse all open content
function collapseAllOpenContent() {
  const colls = document.getElementsByClassName('collapsible');
  for (const coll of colls) {
    if (coll.classList.contains('active')) {
      coll.classList.remove('active');
      toggleContent(coll.nextElementSibling);
    }
  }
}

工作示例:

// toggle collapse of specified content
function toggleContent(content) {
  if (content.style.maxHeight) {
    content.style.maxHeight = null;
  } else {
    content.style.maxHeight = content.scrollHeight + 'px';
  }
}

// collapse all open content
function collapseAllOpenContent() {
  const colls = document.getElementsByClassName('collapsible');
  for (const coll of colls) {
    if (coll.classList.contains('active')) {
      coll.classList.remove('active');
      toggleContent(coll.nextElementSibling);
    }
  }
}

const colls = document.getElementsByClassName('collapsible');
for (const coll of colls) {
  coll.addEventListener('click', function() {
    if (!this.classList.contains('active')) {
      collapseAllOpenContent();
    }
    this.classList.toggle('active');
    toggleContent(this.nextElementSibling);
  });
}
.collapsible {
  background-color: #fff;
  color: #555;
  cursor: pointer;
  padding: 18px;
  width: 100%;
  border: none;
  text-align: left;
  outline: none;
  font-size: 15px;
}

.active,
.collapsible:hover {
  background-color: #fff;
}

.collapsible:after {
  content: '[=12=]2B';
  color: #555;
  font-weight: bold;
  float: right;
  margin-left: 5px;
}

.active:after {
  content: "12";
}

.content {
  padding: 0 18px;
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.2s ease-out;
  background-color: #fff;
}
<button type="button" class="collapsible">BUTTON</button>
<div class="content">
  <p style="padding: 20px 0;">CONTENT</p>
</div>
<button type="button" class="collapsible">BUTTON</button>
<div class="content">
  <p style="padding: 20px 0;">CONTENT</p>
</div>
<button type="button" class="collapsible">BUTTON</button>
<div class="content">
  <p style="padding: 20px 0;">CONTENT</p>
</div>