3 ๋ถ„ ์†Œ์š”

๐Ÿ“š JAVASCRIPT


๐Ÿ“š DOM

DOM ์ด๋ž€?

  • DOM ( Document Object Model ) ์€ HTML๊ณผ XML ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” API ์ œ๊ณตํ•œ๋‹ค.
  • DOM์€ ๋ฌธ์„œ ์š”์†Œ ์ง‘ํ•ฉ์„ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ HTML์„ ํ‘œํ˜„ํ•œ๋‹ค.
  • HTML ๊ณ„์ธต ๊ตฌ์กฐ์˜ ์ œ์ผ ์œ„์—๋Š” document ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค.
  • ๊ทธ ์•„๋ž˜๋กœ HTML ํƒœ๊ทธ๋‚˜ ์š”์†Œ๋“ค์„ ํฌํ•จํ•˜๋Š” ๋…ธ๋“œ์™€ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค.


<!DOCTYPE html>
<html>
  <head>
    <title>์ œ๋ชฉ ์ž…๋‹ˆ๋‹ค.</title>
  </head>
  <body>
    <h3>h3 ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.</h3>
    <h2>h2 ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.</h2>
  </body>
</html>

DOM ๋ฌธ์„œ ๊ณ„์ธต ๊ตฌ์กฐ

  • Document๋Š” HTML๋˜๋Š” XML ๋ฌธ์„œ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
  • HTMLDocument๋Š” HTML ๋ฌธ์„œ์™€ ์š”์†Œ๋งŒ์„ ํ‘œํ˜„
  • HTMLElement์˜ ํ•˜์œ„ ํƒ€์ž…์€ HTML ๋‹จ์ผ ์š”์†Œ๋‚˜ ์š”์†Œ ์ง‘ํ•ฉ์˜ ์†์„ฑ์— ํ•ด๋‹นํ•˜๋Š” JavaScript ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•œ๋‹ค.
  • Comment ๋…ธ๋“œ๋Š” HTML์ด๋‚˜ XML์˜ ์ฃผ์„์„ ํ‘œํ˜„ํ•œ๋‹ค.

๋ฌธ์„œ ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ

๋ฌธ์„œ ๊ฐ์ฒด

  • createElement(tagName)
    element node๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

  • createTagNode(text)
    text node๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

  • appendChild(node)
    ๊ฐ์ฒด์— node๋ฅผ child๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.


// ์œˆ๋„์šฐ ํŽ˜์ด์ง€๊ฐ€ ์—ด๋ฆฌ๋ฉด ํ•จ์ˆ˜ ์‹คํ–‰ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
    window.onload = function(){
        var title = document.createElement('h2');
        var msg = document.createTagNode('Hello !!');

//  text node๋ฅผ element node์— ์ถ”๊ฐ€ํ•œ๋‹ค.
        title.appendChild(msg);
//  title์„ body์— ์ถ”๊ฐ€ํ•œ๋‹ค.
        document.body.appendChild(title);
    }

    -> ์ด ๊ฒฐ๊ณผ๋Š” body์— h2 ์†์„ฑ์˜ "Hello !!"๊ฐ€ ์ถœ๋ ฅ ๋œ๋‹ค.

๊ฐ์ฒด์˜ ์†์„ฑ ์„ค์ •

  • setAttribute(name, value)
    ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ง€์ •ํ•œ๋‹ค.

  • getAttribute(name)
    ๊ฐ์ฒด์˜ ์†์„ฑ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.


// ์œˆ๋„์šฐ ํŽ˜์ด์ง€๊ฐ€ ์—ด๋ฆฌ๋ฉด ํ•จ์ˆ˜ ์‹คํ–‰ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
// ์ด ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์›น ํ‘œ์ค€์ด๋‚˜ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜๋Š” ํƒœ๊ทธ์˜ ์†์„ฑ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค !!
window.onload = function () {
  var profile = document.createElement("img");
  profile.src = "profile.png";
  profile.width = 50;
  profile.height = 100;

  document.body.appendChild(profile);
};

// ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํƒœ๊ทธ์˜ ์†์„ฑ๋„ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ• !!
window.onload = function () {
  var profile = document.createElement("img");
  profile.setAttribute("src", "profile.png");
  profile.setAttribute("width", 50);
  profile.setAttribute("height", 100);

  profile.setAttribute("data-content", "๋‚ด์‚ฌ์ง„");

  document.body.appendChild(profile);
};

innerHTML & innerText

  • innerHTML
    ๋ฌธ์ž์—ด์„ HTML ํƒœ๊ทธ๋กœ ์‚ฝ์ž…ํ•œ๋‹ค.

  • innerText
    ๋ฌธ์ž์—ด์„ text node๋กœ ์‚ฝ์ž…ํ•œ๋‹ค.


window.onload = function(){
        var html = document.getElementById('divHtml');
        var text = document.getElementById('divText');

        html.innerHTML = "<h2> Hello !! </h2>"
        text.innerText = "<h2> Hello !! </h2>"

        -> html์€ html ์–‘์‹๋Œ€๋กœ ์ถœ๋ ฅ๋˜์ง€๋งŒ ( Hello !! )
        -> text๋Š” ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ ๋œ๋‹ค ( <h2> Hello !! </h2>)
    }

๋ฌธ์„œ ๊ฐ์ฒด ๊ฐ€์ ธ์˜ค๊ธฐ

๊ฐ์ฒด ๊ฐ€์ ธ์˜ค๊ธฐ

  • getElementById(id)
    ํƒœ๊ทธ์˜ id ์†์„ฑ์ด id ์™€ ์ผ์น˜ํ•˜๋Š” element ๊ฐ์ฒด ์–ป๊ธฐ


<script type="text/javascript">
    window.onload = function(){
        var msg = document.getElementById('head');

        msg.innerHTML = 'hi !!!';
    };
    </script>
    </head>
    <body>
        <h2 id='head'>hello!!</h2>
    </body>

    -> hi !!! ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.


  • getElementsByClassName(classname)
    ํƒœ๊ทธ์˜ classname ์†์„ฑ์ด classname ๊ณผ ์ผ์น˜ํ•˜๋Š” element ๋ฐฐ์—ด ์–ป๊ธฐ


<script type="text/javascript">
    window.onload = function(){
        var a = document.getElementsByClassName('class');

        a.style.backcolor = 'red';
    };
    </script>
    </head>
    <body>
        <h2 class='class'>hello!!</h2>
    </body>

    -> hello!! ๊ฐ€ ๋ฐฐ๊ฒฝ์ด ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.


  • getElementsByTagName(tagname)
    ํƒœ๊ทธ์ด๋ฆ„์ด tagname ๊ณผ ์ผ์น˜ํ•˜๋Š” element ๋ฐฐ์—ด ์–ป๊ธฐ


<script type="text/javascript">
    window.onload = function(){
        var a = document.getElementsByTagName('h2');

        a.style.backcolor = 'red';
    };
    </script>
    </head>
    <body>
        <h2>hello!!</h2>
    </body>

    -> hello!! ๊ฐ€ ๋ฐฐ๊ฒฝ์ด ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.


  • getElementsByName(name)
    ํƒœ๊ทธ์˜ name ์†์„ฑ์ด name ๊ณผ ์ผ์น˜ํ•˜๋Š” element ๋ฐฐ์—ด ์–ป๊ธฐ

  • querySelector(selector)
    selector์— ์ผ์น˜ํ•˜๋Š” ์ฒซ๋ฒˆ์งธ element ๊ฐ์ฒด ์–ป๊ธฐ
    class ๋Š” querySelector(โ€˜.classNameโ€™);
    id ๋Š” querySelector(โ€˜#IDNameโ€™);
    ๋Œ€๋ฌธ์ž๋กœ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์€ querySelector(โ€˜h2[id=head]โ€™); ์ด ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ์ด๋ฆ„์— ์–ธ๋”๋ฐ”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

<script type="text/javascript">
    window.onload = function(){
        var msg = document.querySelector('#head');

        msg.innerHTML = 'hi !!!';
    };
    </script>
    </head>
    <body>
        <h2 id="head">hello!!</h2>
    </body>

    -> hi !!! ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.


  • querySelectorAll(selector)
    selector์— ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  element ๋ฐฐ์—ด ์–ป๊ธฐ


<script type="text/javascript">
    window.onload = function(){
        var a = document.querySelectorAll('.class');

        a.style.backcolor = 'red';
    };
    </script>
    </head>
    <body>
        <h2 class="class">hello 1</h2>
        <h2 class="class">hello 2</h2>
        <h2 class="class">hello 3</h2>
    </body>

    -> hello 1, hello 2, hello 3 ์ด ๋ฐฐ๊ฒฝ์ด ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.


๋ฌธ์„œ ๊ฐ์ฒด ์ œ๊ฑฐํ•˜๊ธฐ

๊ฐ์ฒด ์ œ๊ฑฐ

  • removeChild(childnode)
    ๊ฐ์ฒด์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.


<head>
  <script type="text/javascript">
    window.onload = function () {
      var input4 = document.querySelector("#input4");

      document.body.removeChild(input4);
    };
  </script>
</head>
<body>
  <h2 id="input1">input1</h2>
  <h2 id="input2">input2</h2>
  <h2 id="input3">input3</h2>
  <h2 id="input4">input4</h2>
</body>

// input4 ๋Š” ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค

DOM ๋งˆ๋ฌด๋ฆฌ

JavaScript์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ธ DOM ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€๋ฅผ ํ•˜์˜€๋‹ค.
HTML์—์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋™์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ ค๋ฉด id๋‚˜ class๋ฅผ ๊ฐ€์ ธ์™€์„œ DOM์˜ API๋ฅผ ์ด์šฉํ•ด ์‹คํ–‰ํ•ด์ค€๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ getElement ์™€ querySelect ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์€๋ฐ ๊ต์ˆ˜๋‹˜์€ querySelect๋ฅผ ์ถ”์ฒœํ•ด ์ฃผ์…จ๋‹ค ใ…Žใ…Ž
๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋™์ž‘์„ ์‹œํ‚ค๊ฑฐ๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ƒ์„ฑ, ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ DOM์„ ํ†ตํ•ด ํ•˜๋‹ˆ๊นŒ DOM API์— ๋Œ€ํ•ด ์ž˜ ์•Œ์•„ ๋‘์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค !!