JS : DOM

?ยท2020๋…„ 9์›” 30์ผ
0

TIL

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

๐Ÿ“– BOM(Browser Object Model)

1. BOM์˜ ์ •์˜

์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ์€ ๋ธŒ๋ผ์šฐ์ €์™€ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ๋‹ค. ๋ชจ๋“  ์„œ๋น„์Šค๋Š” ์‚ฌ์‹ค ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋•Œ ๋ธŒ๋ผ์šฐ์ €์™€ ๊ด€๋ จ๋œ ๊ฐ์ฒด๋“ค์˜ ์ง‘ํ•ฉ์„ Browser Object Model ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
(DOM์€ BOM์ค‘ ํ•˜๋‚˜์ด๋‹ค)



๐Ÿ“– DOM(Document Object Model)

2. DOM์˜ ์ •์˜

DOM์€ 'HTML์„ ๊ณ„์ธตํ™” ์‹œ์ผœ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ๋งŒ๋“  ๊ฐ์ฒด ๋ชจ๋ธ'์ด๋‹ค. ๋˜ํ•œ HTML๋‚ด์˜ ์›ํ•˜๋Š” ์œ„์น˜์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํ•˜๋‚˜์˜ ๋ฐฉ์‹์ด๋ฉฐ W3C์˜ ํ‘œ์ค€์ด๋‹ค.

๐Ÿ‘‰ DOM์€ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๋ฌธ์„œ์˜ ๋‚ด์šฉ, ๊ตฌ์กฐ, ๋ชจ์–‘ ๋“ฑ์— ์ ‘๊ทผํ•˜์—ฌ ๊ทธ๊ฒƒ์„ ๊ฐฑ์‹ , ๊ต์ฒด, ์‚ญ์ œ ํ•˜๋„๋ก ๋„์™€์ค€๋‹ค.


3. DOM์˜ ์ข…๋ฅ˜

๐Ÿ™† W3C DOM ํ‘œ์ค€์€ ์„ธ ๊ฐ€์ง€ ๋ชจ๋ธ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

  • Core DOM : ๋ชจ๋“  ๋ฌธ์„œ ํƒ€์ž…์„ ์œ„ํ•œ DOM ๋ชจ๋ธ
  • HTML DOM : HTML ๋ฌธ์„œ ํƒ€์ž…์„ ์œ„ํ•œ DOM ๋ชจ๋ธ
  • XML DOM : XML ๋ฌธ์„œ ํƒ€์ž…์„ ์œ„ํ•œ DOM ๋ชจ๋ธ


4. DOM tree

๐Ÿ™† HTML DOM ๊ตฌ์กฐ๋Š” HTML Tagging ์ฐจ๋ก€์™€ ๊นŠ์€ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ, DOM Node ์ฆ‰, ํ˜„์žฌ ์œ„์น˜ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ€๋ชจ ์š”์†Œ, ์ž์‹ ์š”์†Œ, ํ˜•์ œ ์š”์†Œ ๋“ฑ์— ๊ธฐ์ดˆํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ํ•œ๋ˆˆ์— ์•Œ์•„ ๋ณด๊ธฐ ์‰ฝ๋„๋ก, ์ง๊ด€์ ์œผ๋กœ ๋‚˜๋ฌด ๋ชจ์–‘์˜ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์„ DOM tree๋ผ๊ณ  ํ•œ๋‹ค.

DOM์€ ์•ž์„œ ์ด์•ผ๊ธฐ ํ–ˆ๋“ฏ ์›น ๋ฌธ์„œ์˜ ์š”์†Œ๋ฅผ ๋ถ€๋ชจ์™€ ์ž์‹ ์š”์†Œ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ณ„์ธต์  ๊ตฌ์กฐ๋กœ ์ธ์‹ํ•œ๋‹ค. DOM์˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋Š” ๋…ธ๋“œ์™€ ๊ฐ€์ง€๋กœ ํ‘œํ˜„ํ•œ๋‹ค. ๋…ธ๋“œ๋Š” ์›น ๋ฌธ์„œ์˜ HTML ์š”์†Œ๋งŒ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๋ชจ๋“  ํ…์ŠคํŠธ์™€ ์ด๋ฏธ์ง€, ํƒœ๊ทธ์˜ ์†์„ฑ๋“ค๊นŒ์ง€ ๊ฐ์ฒดํ™” ํ•˜์—ฌ DOM tree์— ํ‘œํ˜„ํ•œ๋‹ค.

๐Ÿ‘‰ ๋ฌธ์„œ ๋…ธ๋“œ (Document Node)
ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„์— ์กด์žฌํ•˜๋ฉฐ, ํ•˜์œ„ ์ž์‹ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Document Node๋ฅผ ํ†ตํ•ด์•ผ ํ•œ๋‹ค.
DOM tree์˜ ์ ‘๊ทผํ•˜๊ธฐ ํ•˜๊ธฐ ์‹œ์ž‘์  ์ด๋‹ค.

๐Ÿ‘‰ ์š”์†Œ ๋…ธ๋“œ (Element Node)
์›น ๋ฌธ์„œ์˜ ํƒœ๊ทธ๋Š” Element Node๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋ชจ๋“  Element Node๋Š” Atrribute Node์™€ Text Node๋ฅผ ์ž์‹์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ ์†์„ฑ ๋…ธ๋“œ (Atrribute Node)
ํƒœ๊ทธ์˜ ๋ชจ๋“  ์†์„ฑ์€ Atrribute Node๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ํ•ด๋‹น ํƒœ๊ทธ์˜ ์ž์‹ ๋…ธ๋“œ๋กœ ์ธ์‹๋œ๋‹ค.

๐Ÿ‘‰ ํ…์ŠคํŠธ ๋…ธ๋“œ (Text Node)
ํƒœ๊ทธ์˜ ๋ชจ๋“  ์†์„ฑ์€ Attribute Node๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ํ•ด๋‹น ํƒœ๊ทธ์˜ ์ž์‹ ๋…ธ๋“œ๋กœ ์ธ์‹๋œ๋‹ค.

๐Ÿ‘‰ ์ฃผ์„ ๋…ธ๋“œ (Comment Node)
์ฃผ์„์€ Comment Node๋กœ ํ‘œํ˜„ํ•œ๋‹ค.


5. DOM์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•

<h1>DOM์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•</h1>
<span id="domInfo">DOM์€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?</span>
<span class="content">์ฒซ๋ฒˆ์งธ ์‚ฌ์šฉ๋ฒ•</span>
<span class="content">๋‘๋ฒˆ์งธ ์‚ฌ์šฉ๋ฒ•</span>

์œ„์™€ ๊ฐ™์€ HTML ๋ฌธ์„œ๊ฐ€ ์žˆ์„ ๋•Œ JS์—์„œ getElementsByTagName, getElementsByClassName, getElementById, querySelector ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด HTML์˜ ์š”์†Œ๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ, Elements๋ผ๊ณ  ์“ฐ์—ฌ์ง„ ๋ฉ”์†Œ๋“œ๋Š” ์ค‘๋ณต์˜ ์š”์†Œ๋“ค์„ ๊ฐ–๊ณ  ์˜ค๊ฒŒ ๋˜๋ฉฐ ์ด๋•Œ ์ด ๋ฉ”์†Œ๋“œ๋Š” '์œ ์‚ฌ๋ฐฐ์—ด'์„ ๋ฆฌํ„ดํ•œ๋‹ค. ์ด ์œ ์‚ฌ๋ฐฐ์—ด์€ ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์ˆซ์ž์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ณ„์ ์ธ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

<script>
const spanTag = document.getElementByTagName('span');
// html๋‚ด์˜ 3๊ฐœ์˜ Span tag์˜ ๊ฐ์ฒด์š”์†Œ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. 

const content = document.getElementsByClassName('content');
// class="content"๋ฅผ ๊ฐ€์ง„ ๋‘๊ฐœ์˜ Element์˜ ๊ฐ์ฒด์š”์†Œ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. 

console.log(spanTag[1] === content[0]) 
// true. ๋‘๋ฒˆ์งธ span tag element๋Š” class= "content"๋ฅผ ๊ฐ€์ง„ ์ฒซ๋ฒˆ์งธ Element์™€ ๊ฐ™๋‹ค. 

content[0].className = 'first';
// className ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•ด class๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. 
</script>

์œ„์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด class ๋ช…๊ณผ ๊ฐ™์€ CSS ์š”์†Œ๋Š” ๋ฌผ๋ก  ๋‹ค์–‘ํ•œ ์š”์†Œ๋“ค์„ ์ˆ˜์ •, ์‚ญ์ œ, ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

profile
?

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