[TIL : 11] Dom

jabaeยท2021๋…„ 10์›” 18์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
11/44
post-thumbnail

๐Ÿฌ Today result


๐ŸŒŠ๋ฐ”๋‹ค๋ฐ”๋‹ค๐ŸŒŠ ํ•œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค. ์•„ ... ๋ฐ”๋‹ค๊ฐ€๊ณ ์‹ถ๊ณ ๋จผ๐Ÿณ๐Ÿ ๐Ÿ‹ ๊ทธ๋ž˜๋„ ๋ฐฉ์—์„œ ์ด๊ฑฐ CSS๋กœ ๋””์ž์ธ ์ž…ํžˆ๋ฉด์„œ ํž๋งํ–ˆ๋‹ค. ์žฌ๋ฐŒ์—ˆ๋‹ค.

๐Ÿ‘ฉโ€๐Ÿ’ป Achievement Goals

  • DOM ๊ธฐ์ดˆ ์‹ค์Šต์„ ํ†ตํ•ด, ๊ตฌ์ฒด์ ์ธ ์‚ฌ์šฉ๋ฒ•์„ ์ตํž ์ˆ˜ ์žˆ๋‹ค.

    yes! ๐Ÿ™Œ

  • querySelector๋ฅผ ํ™œ์šฉํ•˜์—ฌ, HTML ์—˜๋ฆฌ๋จผํŠธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

    document.querySelector()

  • oncilck, onkeyup ์†์„ฑ์ด๋‚˜ addEventListener ๋ฉ”์†Œ๋“œ๋กœ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ HTML ์—˜๋ฆฌ๋จผํŠธ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    oncilck : ํด๋ฆญํ–ˆ์„ ๋•Œ
    onkeyup : ํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ณ  ๋–ผ์—ˆ์„ ๋•Œ
    addEventListener(type, ํ•จ์ˆ˜) : ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
    ์•„๋ž˜๋Š” class="register"์ธ ๋ฒ„ํŠผ์„ ์ฐพ๊ณ  ๋ˆŒ๋ €์„ ๋•Œ(mousedown) class="click"์„ ์ถ”๊ฐ€ํ•ด ์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

    let btnRegister = document.querySelector('.register')
    btnRegister.onmousedown = function () {                         // ์ด๋Ÿฐ ์‹์œผ๋กœ ์“ฐ๊ฑฐ๋‚˜
    	btnRegister.classList.add('click')
    
    btnRegister.addEventListener('mousedown', function(event) {     // ์ด๋ ‡๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
    	btnRegister.classList.add('click')
    })

    onclick์€ ์—ฌ๋Ÿฌ๊ฐœ ๊ฑธ๋ฉด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๊ฒŒ ์‹คํ–‰์ด ๋˜๋ฏ€๋กœ ๋‹ค์ค‘์œผ๋กœ ์ค„ ๋•Œ๋Š” addEventListener๋ฅผ ์‚ฌ์šฉํ•˜์ž! ์ด์™€ ๊ด€๋ จํ•œ ๋ฒ„๋ธ”๋ง๊ณผ event.stopPropagation()์— ๋Œ€ํ•œ ์ž๋ฃŒ๋Š” ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•˜์ž.
    ๋ฒ„๋ธ”๋ง๊ณผ ์บก์ฒ˜๋ง : https://ko.javascript.info/bubbling-and-capturing

  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ณณ์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    event.target : ํ…์ŠคํŠธ์™€ ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

    console.log(event);                  // PointerEvent ๊ฐ์ฒด : PointerEvent { ... }
    console.log(event.target);            // tag + textContent : <button>์•„๋ฉ”๋ฆฌ์นด๋…ธ</button>
    console.log(event.target.textContent);   // textContent : ์•„๋ฉ”๋ฆฌ์นด๋…ธ
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋กœ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ํ•„์š”ํ•œ ๊ธฐ์ˆ  ์š”์†Œ๋ฅผ ์ตํž ์ˆ˜ ์žˆ๋‹ค.
  • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ํ•„์š”ํ•œ HTML ์—˜๋ฆฌ๋จผํŠธ, CSS ์†์„ฑ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

    yes! ๐Ÿ‘
    ๊ฐ„๋‹จํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค!

  • ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๊ฑฐ๋‚˜ ์‚ฌ๋ผ์ง€๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. (display: none)

    element.style.display = 'none';์œผ๋กœ JavaScript์—์„œ ์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋กœ CSS ์—์„œ .hide {display: none}๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ณ ,
    JavaScript์—์„œ element.classList.remove('hide')๋กœ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๊ฒŒ ์ข‹๋‹ค.

  • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ •๊ทœํ‘œํ˜„์‹ ์‚ฌ์šฉ๋ฒ• ๊ธฐ์ดˆ์— ๋Œ€ํ•ด์„œ ์ตํž ์ˆ˜ ์žˆ๋‹ค. (advanced)
  • ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ์ ์šฉํ•˜๊ฑฐ๋‚˜, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. (advanced)

    ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค! ๐Ÿ™ˆ
    https://velog.io/@developerjhp/๋งŽ์ด-์“ฐ์ด๋Š”-Regex-์˜ˆ์ œ๋“ค

๐Ÿ‘ฉโ€๐Ÿ’ป Achievement Goals

  • ๊ธฐ์ดˆ์ ์ธ event๋ฅผ ์•Œ๊ณ , event handler๋ฅผ element์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • onclick event

    event๋Š” ์‚ฌ์šฉ์ž์˜ ํ„ฐ์น˜๋‚˜ ํด๋ฆญ๊ฐ™์€ ์‚ฌ์šฉ์ž์˜ ์•ก์…˜์ด๋‚˜ API๊ฐ€ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ค๋Š˜ ๋ฐฐ์šด event๋Š” onclick onkeyup onscroll onmousedown๋“ฑ์ด ์žˆ๋‹ค.

    element.onkeyup = function () {
    	console.log(element.value) // ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋‹ค ๋—์„ ๋•Œ, element์˜ textContent๊ฐ’์„ ์ฝ˜์†”๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
        }

    ์ด๋ ‡๊ฒŒ ์ด๋ฒคํŠธ ํ•จ์ˆ˜๋ฅผ ํ•ธ๋“ค๋Ÿฌ๋กœ ์—˜๋ฆฌ๋จผํŠธ์— ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  • onclick ์— ์ง์ ‘ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ๊ณผ addEventListener์˜ ์ฐจ์ด

    ์œ„์—์„œ ์ผ๋“ฏ์ด onclick์€ ์—ฌ๋Ÿฌ๊ฐœ ๊ฑธ๋ฉด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๊ฒŒ ์‹คํ–‰์ด ๋˜๋ฏ€๋กœ ๋‹ค์ค‘์œผ๋กœ ์ค„ ๋•Œ๋Š” addEventListener๋ฅผ ์‚ฌ์šฉํ•˜์ž! addEventListner๋Š” overwriting์ด ๊ฐ€๋Šฅํ•˜๋‹ค. onclick์€ ๋ถˆ๊ฐ€ํ•˜๊ณ ! ์˜ˆ๋ฅผ ๋“ค๋ฉด,

    test.onclick ~ console.log(1) ~
    test.onclick ~ console.log(2) ~

    ์ด ์žˆ๋‹ค๋ฉด , 1์€ ์ฝ˜์†”๋กœ๊ทธ์— ์ฐํžˆ์ง€ ์•Š๊ณ  2๋งŒ ์ฐํžˆ๊ฒŒ ๋œ๋‹ค.

  • eventHandler ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , eventHandler์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ค„ ์•ˆ๋‹ค.

    yes! ๐Ÿ‘Œ
    ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ค‘์š”ํ•œ ์ ์€ ํ•จ์ˆ˜ ๊ทธ ์ž์ฒด๋กœ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
    ์ž„์˜์˜ ํ•จ์ˆ˜ makeFunction์„ ์ด๋ฒคํŠธ์™€ ์—ฐ๊ฒฐํ•ด ๋ณด์ž.

    element.onclick = makeFunction();   // X 
    element.onclick = makeFunction;      // O

    ์œ„์—์„œ๋Š” ์ž‘๋™์„ ํ•˜์ง€ ์•Š๊ณ  ์•„๋ž˜์˜ ์ฝ”๋“œ์—์„œ ์ž‘๋™ํ•œ๋‹ค. ์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ๋ถ€๋ถ„์ด๋‹ˆ ์ž˜ ์•Œ๊ณ  ๊ฐ€์ž!

๐Ÿ‘ฉโ€๐Ÿ’ป Advanced Challange

  • onsubmit

    ํ˜„์žฌ ์ฐฝ์—์„œ ํผ์„ ์ œ์ถœํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์ด๋‹ค.

    <input type="submit" ~/>

    ์ด๋Ÿฌ๋ฉด ๋ฒ„ํŠผ์ฒ˜๋Ÿผ ๋ฒ„ํŠผ์ด ํ•˜๋‚˜ ์ƒ๊ธฐ๋Š”๋ฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ด ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • onchange์™€ onkeyup์˜ ์ฐจ์ด

    onchange : ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ฐ˜์‘ํ•œ๋‹ค.
    onkeyup : ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ๊ฐ’์ด ๋ณ€ํ•œ ๋‹ค์Œ ๋–ผ์—ˆ์„ ๋•Œ

  • onmouseover

    ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ์š”์†Œ(์ž์‹์„ ํฌํ•จํ•˜์—ฌ)์˜ ์•ˆ์œผ๋กœ ๋“ค์–ด์˜ฌ ๋•Œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • onmouseout

    onmouseover์˜ ๋ฐ˜๋Œ€ ๊ฐœ๋…์œผ๋กœ, ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๊ฐ€ ์š”์†Œ ๋ฐ–(์ž์‹์„ ํฌํ•จํ•˜์—ฌ)์œผ๋กœ ๋‚˜๊ฐˆ ๋•Œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • event.preventDefault

    ํ˜„์žฌ ์ด๋ฒคํŠธ์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ค‘๋‹จํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ œ์ถœ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„์— ๋ฒ„ํŠผ ๋™์ž‘์„ ๋ง‰๊ฑฐ๋‚˜ ํ•  ๋•Œ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“š ๊ทธ ์™ธ

  • ์˜ค๋Š˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์‹ค์Šตํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ํœด ๋‹ค ํ•œ ์ค„ ์•Œ์•˜๋Š”๋ฐ ๊ฒ€์‚ฌ์ง€์—๋Š” ์“ฐ์—ฌ์žˆ์ง€ ์•Š์•˜๋˜ ๊ฒƒ๋“ค์ด ์žˆ์—ˆ๋‹ค. ๋ชฉ์š”์ผ์ด ์ง„๋„๋ฅผ ์‰ฌ๋Š” ๋‚ ์ด๋‹ˆ๊นŒ ๊ทธ ๋•Œ ๋” ๋‹ค๋“ฌ์–ด์•ผ๊ฒ ๋‹ค. (์•ž์— ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•ˆ ์“ฐ๋ฉด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ ๋‹ค๋˜์ง€, ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ œ์ถœ์™„๋ฃŒ๋ผ๋Š” ์ฐฝ์„ ๋“œ๊ฒŒ ํ•œ๋‹ค๋˜์ง€ ํ•˜๋Š” ๊ฒƒ๋“ค ... ๐Ÿคฆโ€โ™€๏ธ)
  • ๊ฐ‘์ž๊ธฐ ์ถ”์›Œ์ ธ์„œ ๊ฐ€์„์„ ํƒ€๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์“ธ์“ธํ•˜๋‹ค... ๋‚ด์ผ์€ ์นดํŽ˜์— ๊ฐ€์„œ ๋ง›๋‚œ ๋ฐ€ํฌํ‹ฐ์™€ ํ•จ๊ป˜ ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค. ํœดํŒŒ๋‹˜์ด ๋‚ด์ผ์€ ๋”๋” ์–ด๋ ค์šธ ๊ฑฐ๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ ๋‘๊ทผ๋‘๊ทผ(+๊ธฐ๋Œ€๊ธฐ๋Œ€//์–ผ๋งˆ๋‚˜ ์–ด๋ ต๊ธธ๋ž˜...?)์ด๋‹ค. ํ•ด ์งˆ ๋•Œ๊นŒ์ง€ ๋ชป ๋๋‚ด๋ฉด ์–ด๋–กํ•˜์ง€... (๋‚˜๋Š” ๋Š๋ฆผ๋ณด๋ž€ ๋ง์ด์•ผ๐Ÿ˜‚๐Ÿคข๐Ÿข) ์•„์ฃผ ๋ฐ”์ง ๊ธด์žฅํ•˜๊ณ  ์ง‘์ค‘ํ•ด์„œ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค!
  • ๋‚ด์ผ ๋ชฉํ‘œ๋Š” ์Šค์ผ€์ฅด์—์„œ ๋’ค์ณ์ง€์ง€ ์•Š๊ธฐ!๐Ÿ’ช๐Ÿ”ฅ
profile
it's me!:)

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2021๋…„ 10์›” 19์ผ

์ž๋ฐฐ๋‹˜ํ™”์ดํŒ…๐Ÿ”ฅ

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ