[๐Ÿฑ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] DOM (๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ)

dsfasdยท2022๋…„ 9์›” 11์ผ
0

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

๋ชฉ๋ก ๋ณด๊ธฐ
4/4

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ DOM( The Document Object Model, ๋ฌธ์„œ ๊ฐ์ฒด๋ชจ๋ธ )


๐ŸŽ DOM ์ด๋ž€?

๋…ธ๋“œ ๊ฐ์ฒด๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ

์›น ํ™”๋ฉด์˜ ๋™์  ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•ด ์›น ์ฝ˜ํ…์ธ ์˜ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋“ฑ์„ ๋‹ค๋ฃฌ๋‹ค.

JavaScript ์–ธ์–ด์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” Web API(Application Programming Interface)์ด๋‹ค.

DOM์€ document ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด HTML(root document)์— ์ ‘๊ทผํ•œ๋‹ค.
(window๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ฐฝ์ด๊ณ  document๋Š” ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ HTML ๋ฌธ์„œ ๊ฐ์ฒด, window๊ฐ€ document๋ฅผ ํฌํ•จ)

์˜ˆ์ œ

HTML ๋ฌธ์„œ๋Š” ๊ฐ๊ฐ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

    <body>
        <div id="container">
            <h2>boxes</h2>
            <div class="box">box1</div>
            <div class="box">box2</div>
            <div class="box">box3</div>
        </div>
		<div id="container2">
            <h2>cats</h2>
            <div class="cat">cat1</div>
            <div class="cat">cat2</div>
            <div class="cat">cat3</div>
        </div>
    </body>

์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž. ๊ฐ€์žฅ ์ƒ๋‹จ์— body ํƒœ๊ทธ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๊ฐ€์žฅ ์ƒ๋‹จ์— ์œ„์น˜ํ•˜๋Š” body ํƒœ๊ทธ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐ๊ฐ์˜ ํƒœ๊ทธ๋“ค์„ ๊ธฐ์ค€์œผ๋กœ ํŠธ๋ฆฌ ํ˜•ํƒœ๋ฅผ ํ˜•์„ฑํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
(๋ถ„ํ™์ƒ‰์˜ div ํƒœ๊ทธ์˜ container, container2์˜ ๊ด„ํ˜ธ๋Š” ์ดํ•ด๋ฅผ ์œ„ํ•ด ๊ตฌ๋ถ„ํ•ด ๋‘” ๊ฒƒ์ด๋‹ค.)

ํŠธ๋ฆฌ์— ์žˆ๋Š” ๋…ธ๋“œ๋Š” ๋ชจ๋‘ ๊ฐ์ฒด์— ํ•ด๋‹นํ•œ๋‹ค.

DOM์€ ํŠธ๋ฆฌ ํ˜•ํƒœ๋ฅผ ๋„๋ฏ€๋กœ DOM ํŠธ๋ฆฌ ๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.


๐ŸŽ DOM์˜ ์ž‘๋™ ์›๋ฆฌ (๋ Œ๋”๋ง ์—”์ง„์˜ ํŒŒ์‹ฑ๊ณผ ๋ Œ๋”๋ง)

๋ธŒ๋ผ์šฐ์ €๋Š” DOM์„ ์ฐธ๊ณ ํ•˜์—ฌ ํ™”๋ฉด์— ์›น ์ฝ˜ํ…์ธ ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

๋ Œ๋”๋ง

์›น ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ๋ฌธ์„œ๋ฅผ ํ•ด์„ํ•˜๊ณ , ํ™”๋ฉด์„ ํ†ตํ•ด ํ•ด์„๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฅฐ๋‹ค
์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ Œ๋”๋ง์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ฆ‰, ์‹ค์‹œ๊ฐ„์œผ๋กœ ์›น์‚ฌ์ดํŠธ๊ฐ€ ๊ทธ๋ ค์ง€๋Š” ๊ณผ์ •์„ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ์—”์ง„์˜ ๋™์ž‘ ๊ณผ์ •

๋ธŒ๋ผ์šฐ์ €๋Š” HTML ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•ด์„œ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ตฌ์กฐํ™”ํ•˜์—ฌ DOM ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.(HTML ์š”์†Œ๋Š” ๋ Œ๋”๋ง ์—”์ง„์— ์˜ํ•ด ํŒŒ์‹ฑ๋˜์–ด DOM์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ ๋…ธ๋“œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋œ๋‹ค.) ์ด๋Š” ๋ธŒ๋ผ์šฐ์ € ๋‚ด์˜ ์กด์žฌํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์—”์ง„, ์ฆ‰ ๋ Œ๋”๋ง ์—”์ง„๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ์ค‘, ๋ Œ๋”๋ง ์—”์ง„ ์ด HTML๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ์ƒ์„ฑํ•˜๊ณ , DOM์„ ์ฐธ๊ณ ํ•˜์—ฌ ํ™”๋ฉด์— ์›น ์ฝ˜ํ…์ธ ๋ฅผ ๋ Œ๋”๋ง ํ•œ๋‹ค. ์ด๋•Œ ๋ Œ๋”๋ง ์—”์ง„์€ html, css, js ํŒŒ์ผ์„ ์ฐธ๊ณ ํ•œ๋‹ค.

๋ฌธ์„œ ํŒŒ์‹ฑ : ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ

์›น ๋ธŒ๋ผ์šฐ์ € ์•ˆ์—๋Š” ์ด๋ฐ–์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ๋˜ํ•œ ์กด์žฌํ•˜๋Š”๋ฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ฝ์–ด๋‚ด ๊ธฐ๋Šฅ์„ ์ž‘๋™์‹œํ‚ค๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

HTML์€ JavaScript์˜ ๊ฐ์ฒด ๊ตฌ์กฐ์™€ ๊ฐ™์€ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ผ์„œ, JavaScript์˜ DOM์ด ๋ธŒ๋ผ์šฐ์ €์— ์ ‘๊ทผํ•˜๊ธฐ ๊ฐ€์žฅ ๋ฐ”๋žŒ์งํ•˜๋‹ค.


๐ŸŽ DOM ๋…ธ๋“œ ๊ฐ์ฒด์˜ ํŠน์ง•

  • ๋ชจ๋“  HTML ํƒœ๊ทธ๋Š” ๊ฐ์ฒด์ด๋‹ค.
  • ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ์ด 12๊ฐœ์˜ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

์‹ค๋ฌด์—์„œ ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ฃจ๋Š” ๋…ธ๋“œํƒ€์ž…์€ 4๊ฐ€์ง€๋กœ๋ฌธ์„œ๋…ธ๋“œ, ์š”์†Œ๋…ธ๋“œ, ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ, ํ…์ŠคํŠธ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค.

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

ex. document

  • DOM ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„์— ์กด์žฌํ•˜๋Š” document ๊ฐ์ฒด
  • HTML ๋ฌธ์„œ ์ „์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด
  • DOMํŠธ๋ฆฌ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ์จ DOM ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋“ค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ง„์ž…์  ์—ญํ• ์„ ๋‹ด๋‹น

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

ex. html,head,body,meta,ul,li
HTML์˜ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด

์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ

ex .id="...", src="...",rel="...",href="..."

  • ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ๋Š” ๋ถ€๋ชจ ์š”์†Œ์— ์—ฐ๊ฒฐ๋˜์žˆ์ง€ ์•Š๊ณ  ์š”์†Œ ๋…ธ๋“œ์—๋งŒ ์—ฐ๊ฒฐ
  • ๋”ฐ๋ผ์„œ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋จผ์ € ์š”์†Œ ๋…ธ๋“œ์— ์ ‘๊ทผ

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

  • HTML ์š”์†Œ์˜ ํ…์ŠคํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด
  • ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ์ด๋‹ค.
  • ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ(์ตœ์ข…๋‹จ)
  • ํ…์ŠคํŠธ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋ถ€๋ชจ ๋…ธ๋“œ์ธ ์š”์†Œ ๋…ธ๋“œ์— ๋จผ์ € ์ ‘๊ทผ.

๐ŸŽ DOM ๊ฐ„๋‹จ ๋…ธ๋“œ ์ƒ์„ฑ, ์ถ”๊ฐ€, ์‚ญ์ œ ์˜ˆ์ œ

์œ„ ์ฝ”๋“œ์—์„œ ์ƒˆ๋กœ์šด toDo ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ถ”๊ฐ€ํ•ด๋ณด์ž.
๊ฐ„๋‹จํžˆ CSS๋กœ ์Šคํƒ€์ผ๋ง์„ ์ ์šฉํ•ด์ค€ ์ƒํƒœ์ด๋‹ค.

1. ๋…ธ๋“œ ๋งŒ๋“ค๊ธฐ

document.createElement ('div')

let newToDo = document.createElement('div')

createElement ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์ž.
๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ›„ newToDo๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด์•„๋‘์—ˆ๋‹ค.
์ด๋•Œ์˜ ๋…ธ๋“œ๋Š” DOM์—์„œ ์ƒ์„ฑ๋งŒ ํ•œ ์ƒํƒœ์ด๊ณ , DOM ํŠธ๋ฆฌ์— ์ถ”๊ฐ€๋˜์ง€๋Š” ์•Š์€ ์ƒํƒœ์ด๋‹ค.
๋”ฐ๋ผ์„œ ์•„์ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๋™์ด ์—†์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๋…ธ๋“œ ๋”ํŠธ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๊ธฐ

container.append(newToDo)

์ปจํ…Œ์ด๋„ˆ์— ์ƒ์„ฑํ•œ newToDo๊ฐ’์„ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

์ฝ˜์†”์ฐฝ์—์„œ ์œ„์™€ ๊ฐ™์ด ๋นˆ div ํƒœ๊ทธ๊ฐ€ ์ƒ์„ฑ๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ๋…ธ๋“œ์— ํ…์ŠคํŠธ ์ถ”๊ฐ€

newToDo.textContent = '๋ง›์žˆ๋Š”๊ฑฐ ๋จน๊ธฐ'

div ํƒœ๊ทธ ๋‚ด๋ถ€์— ํ…์ŠคํŠธ '๋ง›์žˆ๋Š”๊ฑฐ ๋จน๊ธฐ'๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.
์›น ํ™”๋ฉด์—์„œ๋„ ํ…์ŠคํŠธ๊ฐ€ ์ถœ๋ ฅ๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ์•„์ง class = "toDo"๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์•„ CSS๋Š” ์ ์šฉ๋˜์ง€ ์•Š์€ ์ƒํƒœ์ด๋‹ค.

4. ํƒœ๊ทธ์— ํด๋ž˜์Šค ์ถ”๊ฐ€ํ•˜๊ธฐ

newToDo.classList.add('toDo')

classList ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด toDo ํด๋ž˜์Šค๋ฅผ ์ ์šฉํ•ด์ค€ ๋ชจ์Šต์ด๋‹ค.
CSS๋„ ์ž˜ ์ ์šฉํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

5. ๋…ธ๋“œ ์‚ญ์ œํ•˜๊ธฐ

newToDo.remove( )๋ฅผ ํ†ตํ•ด ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.


๋…ธ๋“œ๊ฐ€ ์™„์ „ํžˆ ์‚ญ์ œ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


๐ŸŽ DOM ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค ์ •๋ฆฌ

์š”์†Œ์—์˜ ์ ‘๊ทผ

ํ•˜๋‚˜์˜ ์š”์†Œ๋…ธ๋“œ ์„ ํƒ

document.getElementById(id)

Return: HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด

  • id ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์œผ๋กœ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ํ•œ ๊ฐœ ์„ ํƒํ•œ๋‹ค.
    ๋ณต์ˆ˜๊ฐœ๊ฐ€ ์„ ํƒ๋œ ๊ฒฝ์šฐ, ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํ•ด๋‹น id๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ์„ ์–ธ๋˜๊ณ  ํ•ด๋‹น ๋…ธ๋“œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋œ๋‹ค.
    (๋‹จ, id์™€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ์ด๋ฏธ ์„ ์–ธ๋œ ๊ฒฝ์šฐ์—๋Š” ๋…ธ๋“œ ๊ฐ์ฒด๊ฐ€ ์žฌํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค.)

document.querySelector(cssSelector)

Return: HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด

  • CSS ์„ ํƒ์ž๋ฅผ ์ด์šฉํ•œ ์š”์†Œ ๋…ธ๋“œ ์ทจ๋“
  • CSS ์…€๋ ‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ํ•œ ๊ฐœ ์„ ํƒํ•œ๋‹ค.
    ๋ณต์ˆ˜๊ฐœ๊ฐ€ ์„ ํƒ๋œ ๊ฒฝ์šฐ, ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํ•ด๋‹น id๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ CSS ์„ ํƒ์ž๊ฐ€ ๋ฌธ๋ฒ•์— ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ DOM Exception ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ์˜ ์š”์†Œ๋…ธ๋“œ ์„ ํƒ

*HTML Collection / NodeList ๊ฐ์ฒด๋Š” ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์ด๋ฉด์„œ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋‹ค.

document.getElementsByClassName(class)

Return: HTMLCollection ๊ฐ์ฒด [ ... , ... , ... ] , (live)

  • class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์œผ๋กœ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•œ๋‹ค.
    ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ class๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํƒœ๊ทธ ์ด๋ฆ„์„ ๊ฐ–๋Š” ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋นˆ HTMLCollection ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

document.getElementsByTagName(tagName)

Return: HTMLCollection ๊ฐ์ฒด [ ... , ... , ... ] , (live)

  • ํƒœ๊ทธ๋ช…์œผ๋กœ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•œ๋‹ค.
  • ํƒœ๊ทธ ์ด๋ฆ„์„ ๊ฐ–๋Š” ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋นˆ HTMLCollection ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

document.querySelectorAll(selector)

Return: NodeList (non-live)

  • CSS ์„ ํƒ์ž๋ฅผ ์ด์šฉํ•œ ์š”์†Œ ๋…ธ๋“œ ์ทจ๋“
  • ์ง€์ •๋œ CSS ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•œ๋‹ค.
  • ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ CSS ์„ ํƒ์ž๊ฐ€ ๋ฌธ๋ฒ•์— ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ DOM Exception ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

ํƒ์ƒ‰

parentNode
Return: HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด

  • ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

firstChild, lastChild
Return: HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด

  • ์ž์‹ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

hasChildNodes()
Return: Boolean ๊ฐ’

  • ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  Boolean ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘

childNodes
Return: NodeList (non-live)

  • ์ž์‹ ๋…ธ๋“œ์˜ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํ…์ŠคํŠธ ์š”์†Œ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘

children
Return: HTMLCollection (live)

  • ์ž์‹ ๋…ธ๋“œ์˜ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ž์‹ ์š”์†Œ ์ค‘์—์„œ Element type ์š”์†Œ๋งŒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

previousSibling, nextSibling
Return: HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด

  • ํ˜•์ œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. text node๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ํ˜•์ œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

previousElementSibling, nextElementSibling
Return: HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด

  • ํ˜•์ œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. ํ˜•์ œ ๋…ธ๋“œ ์ค‘์—์„œ Element type ์š”์†Œ๋งŒ์„ ํƒ์ƒ‰ํ•œ๋‹ค.

์กฐ์ž‘

ํ…์ŠคํŠธ ๋…ธ๋“œ์—์˜ ์ ‘๊ทผ / ์ˆ˜์ •

์š”์†Œ์˜ ํ…์ŠคํŠธ๋Š” ํ…์ŠคํŠธ ๋…ธ๋“œ์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ํ…์ŠคํŠธ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆ˜์ˆœ์ด ํ•„์š”ํ•˜๋‹ค.

1 ํ•ด๋‹น ํ…์ŠคํŠธ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค. ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹์ด๋‹ค.
2 firstChild ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.
3 ํ…์ŠคํŠธ ๋…ธ๋“œ์˜ ์œ ์ผํ•œ ํ”„๋กœํผํ‹ฐ(nodeValue)๋ฅผ ์ด์šฉํ•˜์—ฌ ํ…์ŠคํŠธ๋ฅผ ์ทจ๋“ํ•œ๋‹ค.
4 nodeValue๋ฅผ ์ด์šฉํ•˜์—ฌ ํ…์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

nodeValue
Return: ํ…์ŠคํŠธ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ๋Š” ๋ฌธ์ž์—ด, ์š”์†Œ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ null ๋ฐ˜ํ™˜

  • ๋…ธ๋“œ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ์—์˜ ์ ‘๊ทผ/์ˆ˜์ •

className

  • class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฐ’์„ ์ทจ๋“ ๋˜๋Š” ๋ณ€๊ฒฝํ•œ๋‹ค.

  • className ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ, class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ง€์ •๋œ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

  • class ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ, ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด์ด ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ String ๋ฉ”์†Œ๋“œ split(' ')๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

classList

  • add, remove, item, toggle, contains, replace ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    IE10 ์ด์ƒ์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•œ๋‹ค.

id

  • id ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฐ’์„ ์ทจ๋“ ๋˜๋Š” ๋ณ€๊ฒฝํ•œ๋‹ค.
  • id ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ, id ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด id ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ง€์ •๋œ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

hasAttribute(attribute)
Return : Boolean

  • ์ง€์ •ํ•œ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.

getAttribute(attribute)
Return : ๋ฌธ์ž์—ด

  • ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฐ’์„ ์ทจ๋“ํ•œ๋‹ค.

setAttribute(attribute, value)
Return: undefined

  • ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

removeAttribute(attribute)
Return : undefined

  • ์ง€์ •ํ•œ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

HTML ์ฝ˜ํ…์ธ  ์กฐ์ž‘

innerHTML, innerText, textContent ๋ชจ๋‘ node๋‚˜ element์˜ ํ…์ŠคํŠธ ๊ฐ’์„ ์ฝ์–ด์˜ค๊ณ  ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

innerHTML

  • ํ•ด๋‹น ์š”์†Œ์˜ ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ์ฝ˜ํ…์ธ ๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ์ทจ๋“ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ์ด ๋ฌธ์ž์—ด์€ ๋งˆํฌ์—…(HTML,XML ๋“ฑ)์„ ํฌํ•จํ•œ๋‹ค.

์˜ˆ์ œ id='example'์„ ๋‹ด์€ ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋ž˜ ์ „์ฒด ํ…์ŠคํŠธ๋ฅผ ํ•œ๋ฒˆ์— ๋ฐ›์•„์˜ค๊ฒŒ ๋œ๋‹ค.

<div id='example'>
innerHTML์˜ ์˜ˆ์ œ ์ถœ๋ ฅ ์ž…๋‹ˆ๋‹ค. 
<span style='color:red'>๋นจ๊ฐ„์ƒ‰</span></div>

textContent

  • ์š”์†Œ์˜ ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ ๋ฅผ ์ทจ๋“ ๋˜๋Š” ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด๋•Œ ๋งˆํฌ์—…์€ ๋ฌด์‹œ๋œ๋‹ค.
  • textContent๋ฅผ ํ†ตํ•ด ์š”์†Œ์— ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ๋ฅผ ํ• ๋‹นํ•˜๋ฉด ํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งˆํฌ์—…์„ ํฌํ•จ์‹œํ‚ค๋ฉด ๋ฌธ์ž์—ด๋กœ ์ธ์‹๋˜์–ด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

์˜ˆ์ œ id='example'์„ ๋‹ด์€ ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ style ํƒœ๊ทธ์™€ ์ƒ๊ด€ ์—†์ด ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง„ ํ…์ŠคํŠธ ๊ฐ’์„ ์ฝ๋Š”๋‹ค.

 innerHTML์˜ ์˜ˆ์ œ ์ถœ๋ ฅ ์ž…๋‹ˆ๋‹ค. 
 ๋นจ๊ฐ„์ƒ‰

innerText

  • innerText ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ๋„ ์š”์†Œ์˜ ํ…์ŠคํŠธ ์ฝ˜ํ…์ธ ์—๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์•„๋ž˜์˜ ์ด์œ ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    • ๋น„ํ‘œ์ค€์ด๋‹ค.
    • CSS์— ์ˆœ์ข…์ ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด CSS์— ์˜ํ•ด ๋น„ํ‘œ์‹œ(visibility: hidden;)๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ํ…์ŠคํŠธ๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค.
    • CSS๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฏ€๋กœ textContent ํ”„๋กœํผํ‹ฐ๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค

์˜ˆ์ œ id='example'์„ ๋‹ด์€ ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ํ…์ŠคํŠธ๋งŒ ์ถœ๋ ฅ๋œ๋‹ค.

innerHTML์˜ ์˜ˆ์ œ ์ถœ๋ ฅ ์ž…๋‹ˆ๋‹ค. 

DOM ์กฐ์ž‘ ๋ฐฉ์‹

innerHTML ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•œ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ์˜ ์ˆ˜์ˆœ์— ๋”ฐ๋ผ ์ง„ํ–‰ํ•œ๋‹ค.

์š”์†Œ ๋…ธ๋“œ ์ƒ์„ฑ createElement() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. createElement() ๋ฉ”์†Œ๋“œ์˜ ์ธ์ž๋กœ ํƒœ๊ทธ ์ด๋ฆ„์„ ์ „๋‹ฌํ•œ๋‹ค.

ํ…์ŠคํŠธ ๋…ธ๋“œ ์ƒ์„ฑ createTextNode() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ƒ๋žต๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ๋žตํ•˜๋Š” ๊ฒฝ์šฐ, ์ฝ˜ํ…์ธ ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ์š”์†Œ๊ฐ€ ๋œ๋‹ค.

์ƒ์„ฑ๋œ ์š”์†Œ๋ฅผ DOM์— ์ถ”๊ฐ€ appendChild() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ๋…ธ๋“œ๋ฅผ DOM tree์— ์ถ”๊ฐ€ํ•œ๋‹ค. ๋˜๋Š” removeChild() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DOM tree์—์„œ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

createElement(tagName)
ํƒœ๊ทธ์ด๋ฆ„์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
Return: HTMLElement๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด
๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•œ๋‹ค.

createTextNode(text)
ํ…์ŠคํŠธ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
Return: Text ๊ฐ์ฒด
๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•œ๋‹ค.

appendChild(Node)
์ธ์ž๋กœ ์ „๋‹ฌํ•œ ๋…ธ๋“œ๋ฅผ ๋งˆ์ง€๋ง‰ ์ž์‹ ์š”์†Œ๋กœ DOM ํŠธ๋ฆฌ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
Return: ์ถ”๊ฐ€ํ•œ ๋…ธ๋“œ
๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•œ๋‹ค.

removeChild(Node)
์ธ์ž๋กœ ์ „๋‹ฌํ•œ ๋…ธ๋“œ๋ฅผ DOM ํŠธ๋ฆฌ์— ์ œ๊ฑฐํ•œ๋‹ค.
Return: ์ถ”๊ฐ€ํ•œ ๋…ธ๋“œ
๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•œ๋‹ค.

insertAdjacentHTML( )

insertAdjacentHTML(position, string)
์ธ์ž๋กœ ์ „๋‹ฌํ•œ ํ…์ŠคํŠธ๋ฅผ HTML๋กœ ํŒŒ์‹ฑํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋กœ ์ƒ์„ฑ๋œ ๋…ธ๋“œ๋ฅผ DOM ํŠธ๋ฆฌ์˜ ์ง€์ •๋œ ์œ„์น˜์— ์‚ฝ์ž…ํ•œ๋‹ค. ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ์‚ฝ์ž… ์œ„์น˜, ๋‘๋ฒˆ์งธ ์ธ์ž๋Š” ์‚ฝ์ž…ํ•  ์š”์†Œ๋ฅผ ํ‘œํ˜„ํ•œ ๋ฌธ์ž์—ด์ด๋‹ค. ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
โ€˜beforebeginโ€™
โ€˜afterbeginโ€™
โ€˜beforeendโ€™
โ€˜afterendโ€™
๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•œ๋‹ค.

Element.prototype.matches( )

์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ CSS ์„ ํƒ์ž๋ฅผ ํ†ตํ•ด ํŠน์ • ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ทจ๋“ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
์ด๋Š” ์ด๋ฒคํŠธ ์œ„์ž„์„ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

[์ฐธ๊ณ ] https://poiemaweb.com/js-dom
์œ„ ๊ธ€์˜ ๋‚ด์šฉ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •๋ฆฌ, ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

profile
๊ธฐ๋ก์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„!

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