Acordeon în JavaScript

Să implementăm acum un acordeon. Acesta este asemănător cu filele, răsturnate pe o parte. În același timp, în acordeon poți închide fila curentă, dacă apeși pe legătura activă.

Iată un exemplu:

Studiați de asemenea și markup-ul, pe care vom rezolva problema:

html<div id="parent">
  <div class="tab active">
    <div class="link">
      <a href="#" >fila 1</a>
    </div>
    <div class="text">
      textul filei 1
    </div>
  </div>
  <div class="tab">
    <div class="link">
      <a href="#" >fila 2</a>
    </div>
    <div class="text">
      textul filei 2
    </div>
  </div>
  <div class="tab">
    <div class="link">
      <a href="#" >fila 3</a>
    </div>
    <div class="text">
      textul filei 3
    </div>
  </div>
</div>
css#parent {
  margin: 0 auto;
  width: 400px;
}
.tab {
  margin-bottom: 10px;
}

.tab .link a {
  display: block;
  padding: 10px;
  color: black;
  text-decoration: none;
  text-align: center;
  background: #f8f8f8;
  border: 1px solid gray;
}
.tab .link:hover a {
  background: #f2f2f2;
}

.tab:not(.active) .text {
  display: none;
}
.tab .text {
  border: 1px dashed gray;
  border-top: none;
  
  padding: 10px;
  height: 300px;
}

Discuție

Din punct de vedere tehnic, codul HTML al acordeonului este mai convenabil decât codul filelor: în el, legăturile sunt situate direct deasupra spoilerului pe care îl deschid și închid. În plus, clasa active în markup-ul nostru este dată părintelui comun al legăturii și spoilerului.

Aceasta înseamnă că la click pe legătură trebuie doar să dezactivăm vechea filă și să activăm cea nouă. Pentru a dezactiva vechea filă trebuie să găsim fila cu clasa active și să îi eliminăm această clasă.

Pentru a activa noua filă trebuie la click pe legătură să găsim părintele acestei legături și să îi dăm clasa active. Din punct de vedere tehnic, o astfel de căutare se poate face astfel: pur și simplu găsiți părintele cel mai apropiat al legăturii, care are clasa tab.

Задание 1

Copiați codurile HTML și CSS date. Implementați acordeonul conform algoritmului descris.