Добијање циљног елемента приликом догађаја

Нека имамо два елемента: div и параграф p, који се налази унутар тог div-a:

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

Добијмо референцу на наш div у променљиву:

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

Додајмо нашим таговима неке стилове:

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

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

Нека је сада на div додат click догађај:

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

Због тога што наш div има padding, када кликнемо на div, можемо погодити параграф, или можемо погодити место где тог параграфа нема, односно директно на div.

При томе у click догађају this увек ће указивати на онај елемент на који је додат догађај. У нашем случају то је наш div:

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

Међутим, можемо добити управо овај таг, у коме се десио догађај. За то можемо погледати шта се налази у event.target:

javascriptdiv.addEventListener('click', function(event) {
  console.log(event.target); // или div, или параграф
});

Можемо разликовати ове две варијанте помоћу услова:

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

div.addEventListener('click', function(event) {
  if (event.target.tagName === 'DIV') {
    console.log('клик управо на div');
  }
  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('клик управо на div');
  }
  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;
}

Додајте на div click догађај. У овом догађају одредите, у ком од тагова се активирао догађај.

Задание 2

Модификујте претходни задатак. Направите тако да при клику на li, њој на крај додајте узвичник, а при клику на ul у конзолу испише информација о томе.