์น ์๋น์ค ๊ฐ๋ฐ์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ ํ ๊ด๋ จ์ด ์๋ค. ๋ชจ๋ ์๋น์ค๋ ์ฌ์ค ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ฐํ์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ์ ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ ์งํฉ์ Browser Object Model ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
(DOM์ BOM์ค ํ๋์ด๋ค)
DOM์ 'HTML์ ๊ณ์ธตํ ์์ผ ํธ๋ฆฌ๊ตฌ์กฐ๋ก ๋ง๋ ๊ฐ์ฒด ๋ชจ๋ธ'์ด๋ค. ๋ํ HTML๋ด์ ์ํ๋ ์์น์ ์ ๊ทผํ๊ธฐ ์ํ ํ๋์ ๋ฐฉ์์ด๋ฉฐ W3C์ ํ์ค์ด๋ค.
๐ DOM์ ํ๋ก๊ทธ๋จ์ด๋ ์คํฌ๋ฆฝํธ๊ฐ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๋ฌธ์์ ๋ด์ฉ, ๊ตฌ์กฐ, ๋ชจ์ ๋ฑ์ ์ ๊ทผํ์ฌ ๊ทธ๊ฒ์ ๊ฐฑ์ , ๊ต์ฒด, ์ญ์ ํ๋๋ก ๋์์ค๋ค.
๐ W3C DOM ํ์ค์ ์ธ ๊ฐ์ง ๋ชจ๋ธ๋ก ๊ตฌ๋ถ๋๋ค.
๐ 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๋ก ํํํ๋ค.
<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 ์์๋ ๋ฌผ๋ก ๋ค์ํ ์์๋ค์ ์์ , ์ญ์ , ์์ฑ ํ ์ ์๊ฒ ๋๋ค.