DOM elementų gavimas be dublikatų

Tarkime, kad turime pastraipas ir mygtuką:

html<p>aaa</p>
<p>bbb</p>
<p>ccc</p>
<p>ddd</p>
<p>eee</p>

<button>click me</button>

Tegul vartotojas spusteli šias pastraipas bet kokia tvarka. Padarykime taip, kad paspaudus mygtuką į kiekvienos pastrapos, ant kurios buvo spustelta, galą būtų pridėtas šauktukas. Išspręskime užduotį naudojant Set.

Pradėkime. Pirmiausia gaukime savo elementus į kintamuosius:

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

Sukurkime naują Set kolekciją:

javascriptlet set = new Set;

Pereikime per pastraipas ciklu ir uždėkime ant jų paspaudimo apdorojimo funkciją:

javascriptfor (let elem of elems) {
  elem.addEventListener('click', function() {
    
  });
}

Dabar paspaudus ant pastraipos pridėkime šią pastraipą į kolekciją:

javascriptfor (let elem of elems) {
  elem.addEventListener('click', function() {
    set.add(this);
  });
}

Dėl to, kad naudojame Set kolekciją, pakartotinis paspaudimas ant pastraipos nesukels pastrapos dublio pridėjimo.

Dabar paspaudus ant mygtuko pereikime mūsų kolekcijos turinį ir kiekvienai pastrapai į galą pridėkime šauktuką:

javascriptbutton.addEventListener('click', function() {
  for (let elem of set) {
    elem.textContent = elem.textContent + '!';
  }
});
Задание 1

Duotos pastraipos ir mygtukas. Vartotojas spusteli šias pastraipas bet kokia tvarka. Padarykite taip, kad paspaudus mygtuką į kiekvienos pastrapos, ant kurios buvo spustelta, galą buvo pridėtas šauktukas.