Оқиғалардың орындалуы кезінде нысана элементін алу

Бізде екі элемент бар делік: div және осы div ішінде жатқан p абзацы:

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-те басу оқиғасын өңдегіш орнатайық:

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

Біздің div-де padding болғандықтан, biz div-ті басқанда, біз абзацқа да, абзац жоқ жерге, яғни тікелей div-ге де тікелей соғуымыз мүмкін.

Бұл ретте басу оқиғасын өңдегішінде this әрқашан өңдегіш орнатылған элементті көрсетеді. Біздің жағдайда бұл біздің div:

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

Алайда, біз нақты оқиға болған тегті ала аламыз. Бun үшін 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-те басу оқиғасын өңдегішін орнатыңыз. Бұл өңдегіште қай тегте оқиға орын алғанын анықтаңыз.

Задание 2

Алдыңғы тапсырманы өзгертіңіз. li-ге басқанда, оның соңына леп сәйкес қойылып, ал ul-ге басқанда консольде бұл туралы ақпарат шығарылуы үшін жасаңыз.