Атрыманне мэтавага элемента пры ўсплыцці падзей

Няхай у нас ёсць два элементы: div i абзац p, які ляжыць усярэдзіне гэтага дыва:

html<div>
  <p></p>
</div>

Атрымаем спасылку на наш дыў у зменную:

javascriptlet div = document.querySelector('div');

Дадамо нашым тэгам некаторыя стылі:

cssdiv {
  padding: 20px;
  border: 1px solid red;
}

p {
  width: 200px;
  height: 200px;
  border: 1px solid green;
}

Няхай цяпер на дыў навешаны апрацоўшчык кліку:

javascriptdiv.addEventListener('click', function() {
  console.log('click');
});

З-за таго, што наш дыў мае padding, то, калі мы клікаем на дыў, мы можам трапіць па абзацы, а можам трапіць у месца, дзе гэтага абзаца няма, гэта ёсць непасрэдна па дыве.

Пры гэтым у апрацоўшчыку кліку this заўсёды будзе паказваць на той элемент, на які навешаны апрацоўшчык. У нашым выпадку гэта наш дыў:

javascriptdiv.addEventListener('click', function() {
  console.log(this); // дыў
});

Аднак, мы можам атрымаць менавіта той тэг, у якім здарылася падзея. Для гэтага мы можам паглядзець, што ляжыць у event.target:

javascriptdiv.addEventListener('click', function(event) {
  console.log(event.target); // або дыў, або абзац
});

Можна адрозніць гэтыя два варыянты з дапамогай умоў:

javascriptlet div = document.querySelector('div');

div.addEventListener('click', function(event) {
  if (event.target.tagName === 'DIV') {
    console.log('клік менавіта па дыве');
  }
  if (event.target.tagName === 'P') {
    console.log('клік менавіта па абзацы');
  }
});

Можна замест tagName выкарыстоўваць matches:

javascriptlet div = document.querySelector('div');

div.addEventListener('click', function(event) {
  if (event.target.matches('div')) {
    console.log('клік менавіта па дыве');
  }
  if (event.target.matches('p')) {
    console.log('клік менавіта па абзацы');
  }
});
Задание 1

Даны наступныя элементы:

html<div>
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
  </ul>
</div>
cssdiv, ul, li {
  padding: 20px;
}

div {
  border: 1px solid red;
}
ul {
  border: 1px solid orange;
}
li {
  border: 1px solid green;
}

Навешайце на дыў апрацоўшчык кліку. У гэтым апрацоўшчыку вызначце, у якому з тэгаў спрацавала падзея.

Задание 2

Мадыфікуйце папярэднюю задачу. Зрабіце так, каб пры кліку на li, ёй у канец дадаваўся клічнік, а пры кліку на ul у кансоль выводзілася інфармацыя аб гэтым.