๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JavaScript/Nomad Coders

[TIL] ๐Ÿ’ก Day 4 - HTML๊ณผ JS ์—ฐ๊ฒฐ, ์กฐ์ž‘ ๋ฐฉ๋ฒ•

by vividmin 2022. 3. 13.
320x100

โœ” ์ด ํฌ์ŠคํŒ…์€ ๋…ธ๋งˆ๋“œ์ฝ”๋” - "๋ฐ”๋‹๋ผ JS๋กœ ํฌ๋กฌ ์•ฑ ๋งŒ๋“ค๊ธฐ๋ฅผ ๋“ค์œผ๋ฉด์„œ ๊นƒํ—ˆ๋ธŒ์— ๊ธฐ๋กํ•œ ํ•„๊ธฐ๋ฅผ ์˜ฎ๊ธด ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

๐Ÿ“‘ ๋ณธ๊ฒฉ์ ์œผ๋กœ HTML๊ณผ JS๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, JS์—์„œ HTML์„ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋ฐฐ์› ๋‹ค.๐Ÿ˜†



๐ŸŒฑ JS ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  โ“

๐Ÿ‘‰ HTML๊ณผ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๊ธฐ ์œ„ํ•ด์„œ
- JS๋Š” HTML์˜ element๋“ค์„ ์ž์‹ ์˜ ๋ฐฉ์‹์œผ๋กœ ์กฐ์ž‘ ๊ฐ€๋Šฅํ•˜๋‹ค.
- JS๋กœ HTML์„ ์กฐ์ž‘ํ•˜๋ฉด ์›๋ž˜ HTML ํŒŒ์ผ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.



๐ŸŒฑ Document๋Š” Object โ—

๐Ÿ‘‰ document๋Š” ๋ธŒ๋ผ์šฐ์ €์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” Object

  • ์ฝ˜์†” ์ฐฝ์— document๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ธด object์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • html์„ JS์˜ ํ˜•ํƒœ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. = JS์—์„œ HTML document Object๋กœ๋ถ€ํ„ฐ ๋‹ค์–‘ํ•œ property๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๐Ÿ™Š
  • document์•ˆ์—๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•œ property๊ฐ€ ์กด์žฌํ•œ๋‹ค. (ex. location, title, className...)

 

                       ์›๋ž˜ Object์—์„œ๋Š” property๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ ์ˆ˜ ๋„ ์žˆ๊ณ , ์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.๐Ÿค”
                    ๐Ÿ“Œ document๋Š” Object, ์ฆ‰, document๋„ ์•ˆ์˜ property๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.๐Ÿ˜ฒ
                                                  ๐Ÿ”ฅ ์ด๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•œ ํฌ์ธํŠธ! ๐Ÿ”ฅ

 

๐ŸŒฑ JS์—์„œ HTML ์กฐ์ž‘ํ•˜๊ธฐโ‰

๐Ÿ‘‰ HTML์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  JS์—์„œ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • HTML์—์„œ ์กฐ์ž‘ํ•˜๋ ค๋Š” ๊ณณ์— id, class ๋“ฑ์„ ์„ค์ •ํ•œ๋‹ค.
  • JS์—์„œ document๋ฅผ ํ†ตํ•ด ํ•ญ๋ชฉ๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค.
  • document ํ•ญ๋ชฉ๋“ค์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • โœ” property๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ• (ํ•จ์ˆ˜)
                               ๋‹จ, HTML๊ณผ JS์—์„œ ๋™์ผํ•˜๊ฒŒ ํ‘œ๊ธฐ๋˜์–ด ์žˆ๋Š” ์š”์†Œ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค ๐Ÿ”ฅ
  • getElementById( ) : id๊ฐ€ ๋™์ผํ•œ ํ•ญ๋ชฉ ์ค‘ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  • getElementByCalssName( ) : class๊ฐ€ ๋™์ผํ•œ ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์˜จ๋‹ค.
  • querySelector( ) : ๊ด„ํ˜ธ ์•ˆ์˜ ์š”์†Œ์™€ ๋™์ผํ•œ ๊ฒƒ์„ ๊ฐ€์ ธ์˜จ๋‹ค. element๋ฅผ CSS๋ฐฉ์‹์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.๐Ÿ”
    (ex. title, #title, .hello h1)
  • querySelectorAll( ) : ๊ด„ํ˜ธ ์•ˆ์˜ ์š”์†Œ์™€ ๋™์ผํ•œ ๊ฒƒ์„ ๋ชจ๋‘ ๊ฐ€์ ธ์˜จ๋‹ค.


- ์˜ˆ์‹œ ์ฝ”๋“œ

    const title = document.getElementById("title");     
    // title์ด๋ผ๋Š” id์˜ ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

    title.innerHTML = "Got you";        
    // title ํ•ญ๋ชฉ์˜ ๋‚ด๋ถ€ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝ
    getElementByClassName(), getElementsByTagName(), getElementsByName() ๐Ÿ‘‰ [] ๋ฅผ ๋ฐ˜ํ™˜!

    querySelector() ๐Ÿ‘‰ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ํ•˜๋‚˜๋งŒ ๋ฐ˜ํ™˜!, ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜

    const title = document.querySelector(".hello");
    const title = document.querySelector(".hello:first-child h1");  // ์ด๋Ÿฐ ๊ฒƒ๋„ ๊ฐ€๋Šฅ



๐ŸŒฑ Events

๐Ÿ‘‰ document์˜ ํ•จ์ˆ˜์ธ event๋“ค์„ ์ด์šฉํ•˜์—ฌ JS๋กœ HTML์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๐Ÿ“Œ document๋Š” HTML์ด app.js๋ฅผ load ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค!
  • ๋งŒ์•ฝ element์˜ ๋‚ด๋ถ€๊ฐ€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด console.dir( )์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
    object๋กœ ํ‘œ์‹œ๋œ element๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
    console.dir(title); 
    ๐Ÿ‘‡
    /** 
    ์ฝ˜์†”์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ 
    ex. onfocus, onclick, onmouseenter, onmouseleave ...
    */

 

  • object์•ˆ์˜ ๋‚ด์šฉ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ „๋ถ€ ๋‹ค ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ listen ํ•˜๊ณ  ์‹ถ์€ event๋ฅผ ์ฐพ๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•
    • ๐Ÿ“Œ ๋ฐฉ๋ฒ• 1 ) ๊ตฌ๊ธ€์— ์ฐพ๊ณ  ์‹ถ์€ element์˜ ์ด๋ฆ„ + mdn์ด๋ผ๊ณ  ๊ฒ€์ƒ‰ ๐Ÿ”
                                                   ex) h1 html element mdn
                                    ๊ทธ์ค‘์— Web APIs๋ผ๋Š” ๋ฌธ์žฅ์ด ํฌํ•จ๋œ ํŽ˜์ด์ง€ ์ฐพ๊ธฐ!
    • ๐Ÿ“Œ ๋ฐฉ๋ฒ• 2 ) console.dir(h1)ํ•ด์„œ on~ ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” property์ธ evnet๋ฅผ ๊ด€์ฐฐ ๊ฐ€๋Šฅ
  • ๋Œ€ํ‘œ์  ์ข…๋ฅ˜
    • click, mouseenter, ์ž…๋ ฅ์„ ๋๋‚ด๊ฑฐ๋‚˜, ํ‚ค๋ณด๋“œ ํ‚ค๋ˆ„๋ฅผ ๋•Œ, wifi ์ ‘์† ํ•ด์ œ๋  ๋•Œ...
    //	style๋ณ€๊ฒฝ ์˜ˆ์‹œ
    title.style.color = "blue";         // ์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉ
  • Event ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•
    // title.addEventListener("๋™์ž‘"); 

    function handleTitleClick() { 
        console.log("title was clicked!"); 
        title.style.color = "green"; 
    } 

    title.addEventListener("click", handleTitleClick); 
    // ํ•จ์ˆ˜๋ฅผ 2๋ฒˆ ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ
  • ๐Ÿ‘† ์œ„์˜ ์ฝ”๋“œ์—์„œ function์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”!!
    • (function( ) ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด ์•ˆ ๋จ๐Ÿ™…‍โ™€๏ธ)
	// ํ•จ์ˆ˜ ํ˜ธ์ถœ? 
    ๐Ÿ‘‰  function( )

    ํ•˜์ง€๋งŒ addEventListenr์—์„œ๋Š” ( )๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค.

    ๐Ÿคท‍โ™€๏ธโ“ ์™œ ๊ทธ๋ ‡๊นŒ? → ์š”์†Œ๋ฅผ 'ํด๋ฆญ' ํ•  ๋•Œ JS๊ฐ€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒƒ,  
        ํ‰์†Œ์— ํ˜ธ์ถœํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

    h1.addEventListener("mouseleave", handleMouseLeave); 
    
    /** 
     ์ฆ‰, ์ด ์ฝ”๋“œ์˜ ์˜๋ฏธ๋Š”
    ๋ˆ„๊ตฐ๊ฐ€ h1์„ ํด๋ฆญํ•˜๋ฉด handleMouseLeave ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด! 
    ๋ผ๊ณ  JS์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ 
    */
  • โž• JS๋กœ style์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ , ์ด๋ก ์ ์œผ๋กœ๋Š” css์—์„œ ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹คโ—



๐ŸŒฑ Event ์‚ฌ์šฉ๋ฐฉ๋ฒ•

๐Ÿ‘‰ event๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž!

  • ๐Ÿ“Œ ์ฒซ ๋ฒˆ์งธ ๋ฐฉ์‹
    • ๋‚˜์ค‘์— removeEventLister๋กœ ์ด๋ฒคํŠธ ์‚ญ์ œ๋„ ๊ฐ€๋Šฅ
    // target.addEventLister("์ด๋ฒคํŠธ", ์ด๋ฒคํŠธ ํ•จ์ˆ˜๋ช…)
    title.addEventListener("mouseleave", handleMouseLeave);
  • ๐Ÿ“Œ ๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹
    // target.on์ด๋ฒคํŠธ = ์ด๋ฒคํŠธ ํ•จ์ˆ˜๋ช… 

    title.onclick = handleMouseLeave;
    // ์˜ˆ์‹œ 
    function handleWindowResize() { 
    document.body.style.backgroundColor = "tomato" 
    }; 

    window.addEventListener("resize", handleWindowResize);
  • clipboard์— ๊ด€ํ•œ event
    • copy, cut, paste
    function handleCopy() { 
    alert("Copier!") 
    } 
    window.addEventListener("copy", handleCopy);
  • wifi์— ๊ด€ํ•œ event
    • offline, online
    function handleOffline() {
        alert("๐Ÿ˜ฑ SOS No wifi!")
    }

    function handleOnline() {
        alert("๐Ÿ˜Ž Are goooood!")
    }

    window.addEventListener("offline", handleOffline);
    window.addEventListener("online", handleOnline);
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€