Flere elementer med visningsknapper i JavaScript

La oss nå anta at vi har mange avsnitt og hvert av dem har sin egen knapp for skjuling:

html<p>1</p><button>toggle</button>
<p>2</p><button>toggle</button>
<p>3</p><button>toggle</button>

La oss gjøre det slik at ved et klikk på knappen skjules eller vises det tilsvarende avsnittet.

For å gjøre dette må vi på en eller annen måte koble knappene til våre avsnitt. Det finnes flere måter å gjøre dette på.

Første metode

La oss koble knapper og avsnitt på følgende måte:

html<p id="elem1">1</p><button data-elem="elem1">toggle</button>
<p id="elem2">2</p><button data-elem="elem2">toggle</button>
<p id="elem3">3</p><button data-elem="elem3">toggle</button>

Nå, ved et klikk på en hvilken som helst knapp, vil vi lese innholdet i dens data-elem-attributt og søke etter et avsnitt med en slik id. Det er den vi vil toggle. La oss implementere det som er beskrevet:

javascriptlet buttons = document.querySelectorAll('button');

for (let button of buttons) {
  button.addEventListener('click', function() {
    let elem = document.querySelector('#' + this.dataset.elem);
    elem.classList.toggle('hidden');
  });
}
Задание 1

Studer løsningen min, og løs deretter denne oppgaven på egen hånd, uten å se på koden min.

Andre metode

Det er ikke veldig praktisk å sette id og data-attributter. La oss gjøre det slik at koblingen skjer ved rekkefølgenummer: la den første knappen skjule det første avsnittet, den andre knappen - det andre, og så videre.

La oss implementere det som er beskrevet:

javascriptlet buttons = document.querySelectorAll('button');
let elems   = document.querySelectorAll('p');

for (let i = 0; i < buttons.length; i++) {
  buttons[i].addEventListener('click', function() {
    elems[i].classList.toggle('hidden');
  });
}
Задание 2

Studer løsningen min, og løs deretter denne oppgaven på egen hånd, uten å se på koden min.

Tredje metode

Som man kan se, er avsnittet knyttet til knappen dens venstre nabo. Dette kan brukes som en kobling:

javascriptlet buttons = document.querySelectorAll('button');

for (let button of buttons) {
  button.addEventListener('click', function() {
    this.previousElementSibling.classList.toggle('hidden');
  });
}
Задание 3

Studer løsningen min, og løs deretter denne oppgaven på egen hånd, uten å se på koden min.