๐Ÿคฟ (2) DOM์—์„œ Node์™€ Element์˜ ์ฐจ์ด

Kayยท2023๋…„ 2์›” 28์ผ
0

Javascript

๋ชฉ๋ก ๋ณด๊ธฐ
3/12

์•ž ์žฅ์—์„œ HTML์˜ ํŒŒ์‹ฑํ•œ ๊ฒฐ๊ณผ์ธ DOM ํŠธ๋ฆฌ์— ๋Œ€ํ•ด ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.

DOM์— ๋Œ€ํ•ด ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒํ•œ ์ฑ…์€ DOM Enligntenment!

๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•˜๊ณ ์ž ํ–ˆ๋Š”๋ฐ ์ฒซ์žฅ๋ถ€ํ„ฐ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด ์ƒ๊ฒจ ํ•œ๋ฒˆ ์ •๋ฆฌํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค.

Node์™€ Element์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ผ๊นŒ?

DOM์€ ๋ฌด์—‡์ธ๊ฐ€? DOM Node์™€ Element์˜ ์ฐจ์ด ๊ธ€์„ ํ†ตํ•ด ํžŒํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๊ณ  ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค!

์ •๋ฆฌํ•œ ๋‚ด์šฉ์˜ ํ•ต์‹ฌ์€ Node์™€ Element์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ Node์™€ Element ์†์„ฑ์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค!


๋ชฉ์ฐจ

  1. DOM์˜ ์ •์˜
  2. Node ๊ฐ์ฒด์˜ ํƒ€์ž…
  3. Node์˜ ์†์„ฑ
  4. firstChild์™€ firstElementChild ์†์„ฑ ํ™•์ธํ•˜๊ธฐ
  5. childNodes์™€ children ์†์„ฑ ํ™•์ธํ•˜๊ธฐ
  6. Node์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ
  1. DOM์˜ ์ •์˜
    • DOM์€ Document Object Model์„ ์˜๋ฏธํ•˜๋ฉฐ HTML ๋ฌธ์„œ๋ฅผ ๋…ธ๋“œ ๊ฐœ์ฒด์˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
    • DOM์˜ ๋ชฉ์ ์€ Javascript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ๋ฅผ ์Šคํฌ๋ฆฝํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

  1. Node ๊ฐ์ฒด์˜ ํƒ€์ž…

    - DOCUMENT_NODE (ex. window.document)
    - ELEMENT_NODE (ex. <body></body>, <a></a>)
    - ATTRIBUTE_NODE (ex. cless="...")
    - TEXT_NODE (ex. carraige returns, whitespace๋ฅผ ํฌํ•จํ•˜๋Š” ํ…์ŠคํŠธ)
    - DOCUMENT_FRAGMENT_NODE (ex, document.createDocumentFragment())
    - DOCUMENT_TYPE_NODE (ex. <!DOCTYPE html>)
    • Node๋Š” Javascript์˜ ๋ชจ๋“  ๊ฐ์ฒด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Object.prototype์—์„œ ์ƒ์†ํ•œ๋‹ค.
    • Node์˜ ํƒ€์ž…์—๋Š” ELEMENT_NODE๊ฐ€ ์žˆ๋‹ค.
    • ์ฆ‰, Element๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” HTML ํƒœ๊ทธ์— ํ•ด๋‹น ํ•˜๋Š” Node๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ Node์˜ ํ•˜์œ„ ์†์„ฑ์ด๋‹ค.
    • Object < Node < Element < HTMLElement < (e.g., HTML*Element)
    • DOM์—์„œNode๋Š” Node์˜ constructor์ด๊ณ ,ย HTMLElement๋Š” Element์˜ constructor์ด๋‹ค.

  1. Node์˜ ์†์„ฑ

    ๋ชจ๋“  Node๋“ค์€ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†๋ฐ›์•„ DOM์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”๋ฐ ์•„๋ž˜๋Š” ๋Œ€ํ‘œ์ ์ธ NODE์˜ ์†์„ฑ์ด๋‹ค.

    • Node properties
      • childNodes
      • firstChild
    • HTML *Element properties
      • innerHTML
      • outerHTML
      • innerText
      • outerText
      • children
      • firstElementChild

    ์ฆ‰, Node์—๋งŒ ์žˆ๋Š” DOM ์†์„ฑ๊ณผ Element์—๋งŒ ์žˆ๋Š” DOM ์†์„ฑ์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


  1. firstChild์™€ firstElementChild ์†์„ฑ ํ™•์ธํ•˜๊ธฐ

    • 2์žฅ์—์„œ ์ •๋ฆฌํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Element๋ž€ HTML ํƒœ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” Node๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
      • ์ฆ‰, ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ a์™€ b๋Š” ELEMENT_NODE๊ฐ€ ์•„๋‹Œ TEXT_NODE์— ํ•ด๋‹นํ•œ๋‹ค.
      • ๊ทธ๋ฆฌ๊ณ  <div>b</div>๋Š” ELEMENT_NODE์— ํ•ด๋‹นํ•œ๋‹ค.
    • 3์žฅ์—์„œ Node ์†์„ฑ์œผ๋กœ firstChild, Element ์†์„ฑ์œผ๋กœ firstElementChild๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค. ๋‘˜์€ ๋น„์Šทํ•œ ์†์„ฑ์ธ ๊ฒƒ ๊ฐ™์€๋ฐ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅผ๊นŒ?
      • ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ๋‘ ์ถœ๋ ฅ๋ฌธ(console.log) ๋ชจ๋‘ body์— ์ ‘๊ทผํ•ด์„œ ๊ฐ๊ฐ firstChild์™€ firstElementchild๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค.
      • a๋Š”
        • 3๋ฒˆ์˜ Node properties ์†์„ฑ์ธ firstChild ๋‚ด์— ์†ํ•œ๋‹ค.
        • 3๋ฒˆ์˜ HTML *Element properties ์†์„ฑ์ธ firstElementChild ๋‚ด์— ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค.
      • <div>b</div>๋Š” Element์ด๋ฏ€๋กœ
        • 3๋ฒˆ์˜ HTML *Element properties ์†์„ฑ์ธ firstElementChild ๋‚ด์— ์†ํ•œ๋‹ค.
    <!DOCTYPE html>
    <html>
    	<body>
    		a
    		<div>b</div>
    		
    		<script>
            console.log(document.body.firstChild); // "a"
            console.log(document.body.firstElementChild); // <div>b</div>
        </script>
    	</body>
    </html>

  1. childNodes์™€ children ์†์„ฑ ํ™•์ธํ•˜๊ธฐ

    5 - 1) ํ…์ŠคํŠธ

    ๋งŒ์•ฝ ๋‹ค์Œ๊ณผ ๊ฐ™์€ HTML ๋ฌธ์„œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด,

    <!DOCTYPE html>
    <html>
    	<body>
    		Hello
    		
    		<script>
            console.log(document.body);
        </script>
    	</body>
    </html>

    Hello๋Š” Element๊ฐ€ ์•„๋‹Œ TEXT_NODE์ด๋ฏ€๋กœ

    • 3๋ฒˆ์˜ Node properties ์†์„ฑ์ธ childNodes ๋‚ด์— ์†ํ•œ๋‹ค.
    • 3๋ฒˆ์˜ HTML *Element properties ์†์„ฑ์ธ children ๋‚ด์— ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    5 - 2) <p> ํƒœ๊ทธ

    ์œ„ 4 - 1) ๊ฒฝ์šฐ์™€ ํ‘œ์ถœ๋˜๋Š” ํ™”๋ฉด์€ ๋™์ผํ•˜์ง€๋งŒ hello๋ฅผ <p> ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ๋ณด๋ฉด ๊ฒฐ๊ณผ๊ฐ’์€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜จ๋‹ค.

    <!DOCTYPE html>
    <html>
    	<body>
    		<p>Hello</p>
    		
    		<script>
            console.log(document.body.firstChild);
        </script>
    	</body>
    </html>

    <p>Hello</p>๋Š” Element์ด๋ฏ€๋กœ

    • 3๋ฒˆ์˜ Node properties ์†์„ฑ์ธ childNodes ๋‚ด์— ์†ํ•œ๋‹ค.
    • 3๋ฒˆ์˜ HTML *Element properties ์†์„ฑ์ธ children ๋‚ด์— ์†ํ•œ๋‹ค.

  1. Node์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ

    ์ฆ‰, ๊ฐ ์ƒํ™ฉ์— ๋งž์ถ”์–ด ๋‹ค์Œ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด Node properties ์†์„ฑ์˜ firstChild์™€ HTML *Element properties ์†์„ฑ์˜ firstElementChild์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณด๋‹ค ์ˆ˜์›”ํ•  ๊ฒƒ์ด๋‹ค.

    • Node properties
      • childNodes
      • firstChild
      • lastChild
      • nextSibling
      • nodeName
      • nodeType
      • nodeValue
      • parentNode
      • previousSibling
    • Node methods
      • appendChild()
      • cloneChhild()
      • compareDocumentPosition()
      • contains()
      • hasChildNodes()
      • insertBefore()
      • isEqualNode()
      • removeChild()
      • replaceChild()
    • Document methods
      • document.createElement()
      • document.createTextNode()
    • HTML *Element properties
      • innerHTML
      • outerHTML
      • textContent
      • innerText
      • outerText
      • firstElementChild
      • lastElementChild
      • nextElementChild
      • previousElementChild
      • children
    • HTML element method
      • insertAdjacentHTML()

์ถœ์ฒ˜
(์ฑ…) DOM Enligntenment
DOM์€ ๋ฌด์—‡์ธ๊ฐ€? DOM Node์™€ Element์˜ ์ฐจ์ด

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