უნივერსალური დელეგირება (delegation) JavaScript-ში

წინა გაკვეთილში მოყვანილი კოდი მუშაობს, თუმცა, არა ნაკლოვანებების გარეშე. მოდით განვიხილოთ ეს ნაკლოვანებები და დავწეროთ უფრო უნივერსალური გადაწყვეტა.

ჩვენი კოდის ნაკლი გამოიხატება იმ შემთხვევაში, როდესაც li-ის შიგნით იქნება რაიმე ჩადგმული ტეგები. ჩვენს შემთხვევაში მოდით ეს იყოს i ტეგები:

html<ul>
  <li>item <i>italic</i> item</li>
  <li>item <i>italic</i> item</li>
  <li>item <i>italic</i> item</li>
  <li>item <i>italic</i> item</li>
  <li>item <i>italic</i> item</li>
</ul>

ამ შემთხვევაში i ტეგზე დაწკაპუნება მოგვიყვანს კითხვის ნიშნის დამატებამდე ტეგის ბოლოს i, და არა li ტეგის, როგორც ჩვენ გვსურს - ბოლოს და ბოლოს event.target-ში შედის ზუსტად ის ტეგი, რომელშიც მოხდა მოვლენა.

პრობლემის მოგვარება შესაძლებელია closest მეთოდის დახმარებით:

javascriptlist.addEventListener('click', function(event) {
  let li = event.target.closest('li');
  
  if (li) {
    li.innerHTML = li.innerHTML + '!';
  }
});
Задание 1

გაიმეორეთ მოყვანილი გადაწყვეტა.