JS

ํด๋ž˜์Šค๋‚˜ ์•„์ด๋”” ๊ฐ’์ด ์—†๋Š” Element ๊ฐ€์ ธ์˜ฌ ๋•Œ ๋ฌธ์ œ

choi95 2021. 7. 22. 16:42
document.addEventListener('click', function (event) {
    if(event.target === document.querySelector('button')) return;
    
    (...)
  }, false);

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํด๋ž˜์Šค๋‚˜ ์•„์ด๋””๋ช…์ด ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋ฒ„ํŠผ ์š”์†Œ๋ฅผ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋‚ด์—์„œ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์กฐ๊ฑด๋ฌธ์„ ์ž‘์„ฑํ•˜์˜€๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๋ฒ„ํŠผ ์ค‘ ๊ฐ€์žฅ ์ฒ˜์Œ์— ์žˆ๋Š” ๋ฒ„ํŠผ ์š”์†Œ๋งŒ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.

 

๋ฌธ์ œํ•ด๊ฒฐ

Document.querySelector()๋Š” ์ œ๊ณตํ•œ ์„ ํƒ์ž ๋˜๋Š” ์„ ํƒ์ž ๋ญ‰์น˜์™€ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ ๋‚ด ์ฒซ ๋ฒˆ์งธ Element๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

querySelector๋กœ ์ฐธ์กฐํ•œ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ๋ฌธ์„œ ๋‚ด ์ฒซ ๋ฒˆ์งธ Element๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ์‰ฌ์šด ๋ฌธ์ œ์˜€๋‹ค.

์ด๋ฅผ ๋Œ€์‹ ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด Array.includes()๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์š”์†Œ๋ฅผ ์‹๋ณ„ํ•˜์˜€๋‹ค.

document.addEventListener('click', function (event) {
    if(Array.from(document.querySelectorAll('button')).includes(event.target)) return;
    //querySelectorAll๋กœ ๊ฐ€์ ธ์˜จ ๊ฐ์ฒด๋Š” HtmlCollection ์œ ์‚ฌ ๋ฐฐ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •๊ทœ ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ๋จ
    (...)
  }, false);

  • Element.matches()
document.addEventListener('click', function (event) {
    if(event.target.matches("#pageContainer button")) return;

    (...)
  }, false);
  • (์ถ”๊ฐ€ 2021.07.28)HtmlElement.nodeName
$itemList.addEventListener('click', (event) => {
    if(event.target.nodeName !== 'LI') return;

   (...)
});

์ฃผ์˜ํ•  ์ ์€ nodeName ํ”„๋กœํผํ‹ฐ๋Š” ์–ธ์ œ๋‚˜ ํ•ด๋‹น HTML ์š”์†Œ์˜ ํƒœ๊ทธ ์ด๋ฆ„์„ ๋Œ€๋ฌธ์ž๋กœ ์ €์žฅํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.