Дубликатсыз DOM элементтердин алуусу

Бизде абзацтар жана баскыч бар деп коёлу:

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

<button>click me</button>

Колдонуучу бул абзацтарга ыктыярдуу тартипте чыкылдатышы мүмкүн. Баскычты басканда, ар бир чыкылдатылган абзацтын аягына үн сүрөөчү белги кошулсун кылалы. Маселени Set аркылуу чечейли.

Баштайлы. Адегенде биздин элементтерибизди өзгөрмөлөргө алалы:

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

Жаңы Set коллекциясын түзөлү:

javascriptlet set = new Set;

Абзацтарды цикл менен айланып өтүп, аларга чыкылдатуу иштеткичтерин коёлу:

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

Эми абзацты чыкылдатканда, аны коллекцияга кошолу:

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

Set коллекциясын колдонгондуктан абзацты кайра чыкылдатуу ага дубликат кошумчалоого алып келбейт.

Эми баскычты чыкылдатканда, биздин коллекциянын ичиндегилерди айланып өтүп, ар бир абзацтын аягына үн сүрөөчү белги кошолу:

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

Абзацтар жана баскыч берилген. Колдонуучу бул абзацтарга ыктыярдуу тартипте чыкылдатат. Баскычты басканда, ар бир чыкылдатылган абзацтын аягына үн сүрөөчү белги кошулсун кыл.