CodeGym /ํ–‰๋™ /Frontend SELF KO /DOM ์†Œ๊ฐœ

DOM ์†Œ๊ฐœ

Frontend SELF KO
๋ ˆ๋ฒจ 41 , ๋ ˆ์Šจ 0
์‚ฌ์šฉ ๊ฐ€๋Šฅ

1.1 DOM์˜ ์ฃผ์š” ๊ฐœ๋…

๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ (DOM)์€ ์›น ๋ฌธ์„œ์— ๋Œ€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค์•ผ. ๋ฌธ์„œ ๊ตฌ์กฐ๋ฅผ ๋…ธ๋“œ ํŠธ๋ฆฌ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” ๋ฌธ์„œ์˜ ์ผ๋ถ€๋กœ, ์š”์†Œ, ํ…์ŠคํŠธ, ์ฃผ์„ ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋ผ. DOM๊ณผ ๊ทธ ๋…ธ๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ์›น ๊ธฐ์ˆ ์„ ๋‹ค๋ฃจ๋Š” ๋ฐ ์žˆ์–ด ํ•„์ˆ˜์•ผ.

DOM์˜ ์ฃผ์š” ๊ฐœ๋…๋“ค

DOM์ด๋ž€?

DOM (Document Object Model)์€ HTML ๋ฌธ์„œ์˜ ๋‚ด์šฉ์„ ์„ค๋ช…ํ•˜๋Š” ๊ณ„์ธต ๊ตฌ์กฐ์•ผ. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฌธ์„œ ๋‚ด์šฉ์— ๋™์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ณ  ๊ตฌ์กฐ, ์Šคํƒ€์ผ, ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜.

๋…ธ๋“œ์™€ ์š”์†Œ

DOM ๋งฅ๋ฝ์—์„œ ๋ฌธ์„œ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์€ ๋…ธ๋“œ (node)๋กœ ๊ฐ„์ฃผ๋ผ. ๋…ธ๋“œ๋Š” ๋ช‡ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์–ด:

  1. ์š”์†Œ ๋…ธ๋“œ: HTML ํƒœ๊ทธ๋ฅผ ๋‚˜ํƒ€๋ƒ„.
  2. ํ…์ŠคํŠธ ๋…ธ๋“œ: ์š”์†Œ ๋…ธ๋“œ์— ํฌํ•จ๋œ ํ…์ŠคํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ„.
  3. ์ฃผ์„ ๋…ธ๋“œ: HTML ์ฃผ์„์„ ๋‚˜ํƒ€๋ƒ„.
  4. ๋ฌธ์„œ ๋…ธ๋“œ: ์ „์ฒด ๋ฌธ์„œ๋ฅผ ๋‚˜ํƒ€๋ƒ„.

๋…ธ๋“œ ํŠธ๋ฆฌ

DOM์€ ํŠธ๋ฆฌ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๊ฐ ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ๋“ค์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด. ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ์ „์ฒด HTML ๋ฌธ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” document ๊ฐ์ฒด์•ผ.

DOM ๊ตฌ์กฐ ์˜ˆ์‹œ:

HTML
    
      <!DOCTYPE html>
      <html>
        <head>
          <title>Document Title</title>
        </head>
        <body>
          <h1>Hello, World!</h1>
          <p>This is a paragraph.</p>
        </body>
      </html>
    
  

์ด ๋ฌธ์„œ์˜ DOM ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฑฐ์•ผ:

Text
    
      document
      โ””โ”€โ”€ html
          โ”œโ”€โ”€ head
          โ”‚   โ””โ”€โ”€ title
          โ”‚       โ””โ”€โ”€ #text: "Document Title"
          โ””โ”€โ”€ body
              โ”œโ”€โ”€ h1
              โ”‚   โ””โ”€โ”€ #text: "Hello, World!"
              โ””โ”€โ”€ p
                  โ””โ”€โ”€ #text: "This is a paragraph."
    
  

1.2 ๋…ธ๋“œ์˜ ์œ ํ˜•

1. ์š”์†Œ ๋…ธ๋“œ

์š”์†Œ ๋…ธ๋“œ๋Š” HTML ํƒœ๊ทธ์— ํ•ด๋‹นํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด, <body> ํƒœ๊ทธ์˜ ๋…ธ๋“œ๋Š” ์š”์†Œ ๋…ธ๋“œ๋ผ๊ณ  ๋ถˆ๋Ÿฌ.

์˜ˆ์‹œ:

์ด ์˜ˆ์‹œ์—์„œ <body>์™€ <h1>๋Š” ์š”์†Œ ๋…ธ๋“œ์•ผ.

HTML
    
      <body>
        <h1>Hello, World!</h1>
      </body>
    
  

2. ํ…์ŠคํŠธ ๋…ธ๋“œ

ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” ์š”์†Œ ๋…ธ๋“œ ๋‚ด๋ถ€์˜ ํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•ด. ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋กœ ์กด์žฌํ•˜๋ฉฐ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด.

์˜ˆ์‹œ:

์ด ์˜ˆ์‹œ์—์„œ ํ…์ŠคํŠธ "Hello, World!"๋Š” <h1> ๋…ธ๋“œ์˜ ์ž์‹์ธ ํ…์ŠคํŠธ ๋…ธ๋“œ์•ผ.

HTML
    
      <h1>Hello, World!</h1>
    
  

3. ์ฃผ์„ ๋…ธ๋“œ

์ฃผ์„ ๋…ธ๋“œ๋Š” HTML ์ฃผ์„์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, <!--๋กœ ์‹œ์ž‘ํ•ด์„œ -->๋กœ ๋๋‚˜.

์˜ˆ์‹œ:

์ด ์˜ˆ์‹œ์—์„œ <!-- This is a comment -->๋Š” ์ฃผ์„ ๋…ธ๋“œ์•ผ.

HTML
    
      <!-- This is a comment -->

      <p>This is a paragraph.</p>
    
  

4. ๋ฌธ์„œ ๋…ธ๋“œ

๋ฌธ์„œ ๋…ธ๋“œ๋Š” DOM ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ ๋…ธ๋“œ์ด๋ฉฐ, ๋ฌธ์„œ์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์•ผ.

์˜ˆ์‹œ:

JavaScript์˜ document ๊ฐ์ฒด๋Š” ๋ฌธ์„œ ๋…ธ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด:

JavaScript
    
      console.log(document);
    
  

1.3 DOM ๋…ธ๋“œ์™€์˜ ์ƒํ˜ธ์ž‘์šฉ

1. ๋…ธ๋“œ ์ •๋ณด ์–ป๊ธฐ

๋…ธ๋“œ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ํ†ตํ•ด ํŠน์ • ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋…ธ๋“œ์˜ ์œ ํ˜•, ์ด๋ฆ„, ๋‚ด์šฉ์„ ์•Œ ์ˆ˜ ์žˆ์ง€.

์˜ˆ์‹œ:

HTML
    
      <html>
        <head>
          <title>๋‚ด ์›น์‚ฌ์ดํŠธ</title>
        </head>
        <body>
          <h1>์•ˆ๋…•, ์„ธ์ƒ!</h1>
        </body>
      </html>
    
  
JavaScript
    
      const heading = document.querySelector('h1');

      console.log(heading.nodeName); // ์ถœ๋ ฅ: H1
      console.log(heading.nodeType); // ์ถœ๋ ฅ: 1 (์š”์†Œ ๋…ธ๋“œ)
      console.log(heading.textContent); // ์ถœ๋ ฅ: "์•ˆ๋…•, ์„ธ์ƒ!"
    
  

2. ๋…ธ๋“œ ๋‚ด์šฉ ์ˆ˜์ •

DOM ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด.

์˜ˆ์‹œ:

JavaScript
    
      const paragraph = document.querySelector('p');
      paragraph.textContent = 'Updated text content';
    
  

3. ์ž์‹ ๋…ธ๋“œ ๋‹ค๋ฃจ๊ธฐ

DOM์˜ ๊ฐ ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž์‹ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด.

์˜ˆ์‹œ:

HTML
    
      <html>
        <head>
          <title>๋‚ด ์›น์‚ฌ์ดํŠธ</title>
        </head>
        <body>
          <ul>
            <li>ํšŒ์‚ฌ ์†Œ๊ฐœ</li>
            <li>์ฑ„์šฉ ์ •๋ณด</li>
            <li>์—ฐ๋ฝ์ฒ˜</li>
          </ul>
        </body>
      </html>
    
  
JavaScript
    
      const list = document.querySelector('ul');
      const firstItem = list.firstElementChild;
      const lastItem = list.lastElementChild;

      console.log(firstItem.textContent); // ์ฒซ ๋ฒˆ์งธ ๋ฆฌ์ŠคํŠธ ํ•ญ๋ชฉ์˜ ํ…์ŠคํŠธ ์ถœ๋ ฅ
      console.log(lastItem.textContent); // ๋งˆ์ง€๋ง‰ ๋ฆฌ์ŠคํŠธ ํ•ญ๋ชฉ์˜ ํ…์ŠคํŠธ ์ถœ๋ ฅ
    
  

1.4 ์œ ์šฉํ•œ ์†์„ฑ๋“ค

1. ์†์„ฑ nodeName๊ณผ nodeType

  • nodeName์€ ๋…ธ๋“œ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•ด
  • nodeType์€ ๋…ธ๋“œ ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•ด (์˜ˆ: 1์€ ์š”์†Œ ๋…ธ๋“œ, 3์€ ํ…์ŠคํŠธ ๋…ธ๋“œ)

์˜ˆ์‹œ:

HTML
    
      <html>
        <head>
          <title>๋‚ด ์›น์‚ฌ์ดํŠธ</title>
        </head>
        <body>
          <h1>์•ˆ๋…•, ์„ธ์ƒ!</h1>
        </body>
      </html>
    
  
JavaScript
    
      const element = document.querySelector('h1');

      console.log(element.nodeName); // ์ถœ๋ ฅ: H1
      console.log(element.nodeType); // ์ถœ๋ ฅ: 1
    
  

2. ์†์„ฑ textContent์™€ innerHTML

  • textContent๋Š” ๋…ธ๋“œ์˜ ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•ด
  • innerHTML์€ ๋…ธ๋“œ์˜ HTML ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•ด

์˜ˆ์‹œ:

HTML
    
      <html>
        <head>
          <title>๋‚ด ์›น์‚ฌ์ดํŠธ</title>
        </head>
        <body>
          <p>์ •๋ง <b>ํฅ๋ฏธ๋กญ๊ณ </b> <b>์œ ์ตํ•œ</b> ๋ฌธ๋‹จ!</p>
        </body>
      </html>
    
  
JavaScript
    
      const element = document.querySelector('p');

      console.log(element.textContent); // ๋ฌธ๋‹จ์˜ ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ  ์ถœ๋ ฅ
      console.log(element.innerHTML); // ๋ฌธ๋‹จ์˜ HTML ์ฝ˜ํ…์ธ  ์ถœ๋ ฅ
    
  

3. ์†์„ฑ parentNode, childNodes, firstChild์™€ lastChild

  • parentNode๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด
  • childNodes๋Š” ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ์˜ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜ํ™˜ํ•ด
  • firstChild๋Š” ์ฒซ ๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด
  • lastChild๋Š” ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด

์˜ˆ์‹œ:

HTML
    
      <html>
        <head>
          <title>๋‚ด ์›น์‚ฌ์ดํŠธ</title>
        </head>
        <body>
          <ul>
            <li>ํšŒ์‚ฌ ์†Œ๊ฐœ</li>
            <li>์ฑ„์šฉ ์ •๋ณด</li>
            <li>์—ฐ๋ฝ์ฒ˜</li>
          </ul>
        </body>
      </html>
    
  
JavaScript
    
      const element = document.querySelector('ul');

      console.log(element.parentNode); // ๋ถ€๋ชจ ๋…ธ๋“œ ์ถœ๋ ฅ
      console.log(element.childNodes); // ์ž์‹ ๋…ธ๋“œ ์ปฌ๋ ‰์…˜ ์ถœ๋ ฅ
      console.log(element.firstChild); // ์ฒซ ๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ ์ถœ๋ ฅ
      console.log(element.lastChild); // ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ ์ถœ๋ ฅ
    
  
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION