Introduction to the DOM - Lee-hyuna/33-js-concepts-kr GitHub Wiki
๋ฒ์ญ : https://www.digitalocean.com/community/tutorials/introduction-to-the-dom
์ผ๋ฐ์ ์ผ๋ก ** DOM **์ด๋ผ๊ณ ํ๋ ** ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ **์ ์น ์ฌ์ดํธ๋ฅผ ๋ํ์์ผ๋ก ๋ง๋๋ ํ์์ ์ธ ๋ถ๋ถ์ ๋๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์น ์ฌ์ดํธ์ ๋ด์ฉ, ๊ตฌ์กฐ ๋ฐ ์คํ์ผ์ ์กฐ์ ํ ์์๊ฒ ํด์ฃผ๋ ์ธํฐํ์ด์ค์ ๋๋ค. JavaScript๋ ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ ์์ DOM์ ์ฐ๊ฒฐํ๋ ํด๋ผ์ด์ธํธ ์ธก ์คํฌ๋ฆฝํ ์ธ์ด์ ๋๋ค.
์น ์ฌ์ดํธ๊ฐ ์ด๋ฏธ์ง์ ์ฌ๋ผ์ด๋ ์ผ๊ฐ์ ํ์ ํ๊ฑฐ๋, ์ฌ์ฉ์๊ฐ ๋ถ์์ ํ ์์์ ์ ์ถํ๋ ค๊ณ ํ ๋ ์ค๋ฅ๋ฅผ ํ์ํ๊ฑฐ๋, ํ์ ๋ฉ๋ด๋ฅผ ์ ํํ๋ ๋ฑ์ ์์
์ ์ํํ๋ ๊ฑฐ์ ์ธ์ ๋ ์ง JavaScript๊ฐ DOM์ ์ก์ธ์คํ๊ณ ์กฐ์ ํ ๊ฒฐ๊ณผ์
๋๋ค. ์ด ๊ธฐ์ฌ์์๋ DOM์ด ๋ฌด์์ธ์ง,document
๊ฐ์ฒด๋ก ์์
ํ๋ ๋ฐฉ๋ฒ, HTML ์์ค ์ฝ๋์ DOM์ ์ฐจ์ด์ ์ ๋ํด ๋ฐฐ์ฐ๊ฒ๋ฉ๋๋ค.
** ์ฐธ๊ณ : ** DOM์ ์ธ์ด์ ๊ตฌ์๋ ฅ์ด ์๊ฑฐ๋ ํน์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ๋์์ง๋ง์ด ๋ฆฌ์์ค ์ ์ฒด์์ JavaScript์ HTML DOM ๊ตฌํ์ ์ด์ ์ ๋ง์ถ๊ณ ์ฐธ์กฐํฉ๋๋ค.
DOM์ ํจ๊ณผ์ ์ผ๋ก ์ดํดํ๊ณ ์ด๊ฒ์ด ์น ์์ ๊ณผ ์ด๋ป๊ฒ ๊ด๋ จ๋์ด ์๋์ง๋ฅผ ์ดํดํ๋ ค๋ฉด HTML์ ๋ํ ๊ธฐ์กด ์ง์์ด ํ์ํฉ๋๋ค. ๋ฐ CSS๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ๊ทผ๋ณธ์ ์ธ JavaScript ๊ตฌ๋ฌธ ๋ฐ ์ฝ๋ ๊ตฌ์กฐ ์ ์ต์ํ ๊ฒ๋ ์ ์ตํฉ๋๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์ค์์ ์น ์ฌ์ดํธ๋ HTML ๋ฌธ์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์น ์ฌ์ดํธ๋ฅผ ๋ณด๋ ๋ฐ ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ ๋ HTML๊ณผ CSS๋ฅผ ํด์ํ๊ณ ์ฌ์ฉ์๊ฐ ๋ณด๋ ํ์ด์ง์ ์คํ์ผ, ๋ด์ฉ ๋ฐ ๊ตฌ์กฐ๋ฅผ ๋ ๋๋งํ๋ ํ๋ก๊ทธ๋จ์ ๋๋ค.
๋ธ๋ผ์ฐ์ ๋ HTML๊ณผ CSS์ ์คํ์ผ๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ๊ฒ ์ธ์๋ ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ผ๋ ๋ฌธ์์ ํํ์ ๋ง๋ญ๋๋ค. ์ด ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด JavaScript๊ฐ ์น ์ฌ์ดํธ ๋ฌธ์์ ํ ์คํธ ๋ด์ฉ๊ณผ ์์์ ๊ฐ์ฒด๋ก ์ก์ธ์ค ํ ์ ์์ต๋๋ค.
JavaScript๋ ๋ํ ํ ์ธ์ด์ด๋ฏ๋ก ์ํํ์ฌ ์๋ก์ด ๊ฐ๋ ์ ์ดํดํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค. ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์น ์ฌ์ดํธ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. index.html ํ์ผ์ ๋ง๋ค๊ณ ์ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํ์ญ์์ค.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Learning the DOM</title>
</head>
<body>
<h1>Document Object Model</h1>
</body>
</html>
์ด ์ฝ๋๋ ์๋ก์ด ์น ์ฌ์ดํธ ๋ผ๋์ ์ต์ํ HTML ์์ค์
๋๋ค. doctype๊ณผhead
์body
๊ฐ ๋ด๋ถ์์๋html
ํ๊ทธ๊ฐ ์น ์ฌ์ดํธ ๋ฌธ์์ ๊ฐ์ฅ ์ค์ํ ์์์
๋๋ค.
์ฐ๋ฆฌ๋ Chrome ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ๋ค๋ฅธ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. Chrome์์ 'index.html'์ ์ฝ๋ ๋ค. ์ฐ๋ฆฌ๋ "Document Object Model"์ด๋ผ๋ ์ ๋ชฉ์ ์ผ๋ฐ ์น ์ฌ์ดํธ๋ฅผ ๋ณด๊ฒ๋ฉ๋๋ค. ํ์ด์ง์ ์๋ฌด ๊ณณ์ด๋ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ผ๋ก ํด๋ฆญํ๊ณ "Inspect"๋ฅผ ์ ํํ์ญ์์ค. ๊ทธ๋ฌ๋ฉด ๊ฐ๋ฐ์ ๋๊ตฌ๊ฐ ์ด๋ฆฝ๋๋ค.
Elements ํญ ์๋์ DOM์ด ํ์๋ฉ๋๋ค.
์ด ๊ฒฝ์ฐ ํ์ฅ๋์์ ๋, ๋ฐฉ๊ธ ์์ฑํ HTML ์์ค ์ฝ๋ (doctype ๋ฐ ์ถ๊ฐ ๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ HTML ํ๊ทธ)์ ์์ ํ ๋์ผํ๊ฒ ๋ณด์ ๋๋ค. ๊ฐ ์์ ์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๋ฉด ๋ ๋๋ง ๋ ์น ์ฌ์ดํธ์ ๊ฐ ์์๊ฐ ๊ฐ์กฐ ํ์๋ฉ๋๋ค. HTML ์์์ ์ผ์ชฝ์์๋ ์์ ํ์ดํ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ฒฉ ๋ ์์์๋ณด๊ธฐ๋ฅผ ์ ํ ํ ์ ์์ต๋๋ค.
document
๊ฐ์ฒด๋ ์น ์ฌ์ดํธ์ ์ก์ธ์คํ๊ณ ์์ ํ ์์๋ ๋ง์ ** ์์ฑ ** ๋ฐ ** ๋ฉ์๋ **๊ฐ์๋ ๋ด์ฅ ๊ฐ์ฒด์
๋๋ค. DOM ์์
๋ฐฉ๋ฒ์ ์ดํดํ๋ ค๋ฉด JavaScript์์ ๊ฐ์ฒด๊ฐ ์๋ํ๋ ๋ฐฉ์์ ์ดํดํด์ผํฉ๋๋ค. ๊ฐ์ฒด ๊ฐ๋
์ ์ต์ํ์ง ์์ ๊ฒฝ์ฐ [JavaScript์ ๊ฐ์ฒด ์ดํด] (https://www.digitalocean.com/community/tutorials/understanding-objects-in-javascript)๋ฅผ ๊ฒํ ํ์ญ์์ค.
** index.html **์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ Console ํญ์ผ๋ก ์ด๋ํ์ญ์์ค. ์ฝ์์document
๋ฅผ ์
๋ ฅํ๊ณ ENTER๋ฅผ ๋๋ฆ
๋๋ค. ์ถ๋ ฅ๋๋ ๋ด์ฉ์ Elements ํญ์ ๋ด์ฉ๊ณผ ๋์ผํฉ๋๋ค.
> document;
Output
#document
<!DOCTYPE html>
<html lang="en">
<head>
<title>Learning the DOM</title>
</head>
<body>
<h1>Document Object Model</h1>
</body>
</html>
document
๋ฅผ ํ์ดํํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฝ์์์ ์ง์ ์์
ํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋๋ฒ๊น
๋ฐ์์ ํ ์ผ์ด ์๋์ง๋ง ์๋์์ ์ ์ ์๋ฏ์ดdocument
๊ฐ์ฒด๊ฐ ๋ฌด์์ธ์ง์ ๊ทธ๊ฒ์ ์์ ํ๋ ๋ฐฉ๋ฒ์ ์ ํํ ์๊ณ ์ํค๋ ๋ฐ ๋์์ด๋ฉ๋๋ค.
ํ์ฌ์ด ์์ ์์ HTML ์์ค ์ฝ๋์ DOM์ ์์ ํ ๋๊ฐ์ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๋ธ๋ผ์ฐ์ ์์ ์์ฑ ํ DOM์ด HTML ์์ค ์ฝ๋์ ๋ค๋ฅธ ๋ ๊ฐ์ง ์ธ์คํด์ค๊ฐ ์์ต๋๋ค.
- DOM์ ํด๋ผ์ด์ธํธ ์ธก JavaScript์ ์ํด ์์ ๋ฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์์ค ์ฝ๋์ ์ค๋ฅ๋ฅผ ์์ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ ์ธก JavaScript๋ก DOM์ ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ฝ์์ ๋ค์์ ์ ๋ ฅํ์ญ์์ค.
> document.body;
์ฝ์์ ๋ค์ ์ถ๋ ฅ์ผ๋ก ์๋ตํฉ๋๋ค.
output
<body>
<h1>Document Object Model</h1>
</body>
document
๋ ๊ฐ์ฒด์ด๊ณ ,body
๋ ์ฐ๋ฆฌ๊ฐ dot notation์ผ๋ก ์ ๊ทผ ํ ๊ฐ์ฒด์ ์์ฑ์
๋๋ค. document.body
๋ฅผ ์ฝ์์ ์ ์ถํ๋ฉด body ์์์ ๊ทธ ์์ ๋ชจ๋ ๋ด์ฉ์ ์ถ๋ ฅํฉ๋๋ค.
์ฝ์์์, ์ฐ๋ฆฌ๋์ด ์น ์ฌ์ดํธ์์body
๊ฐ์ฒด์ ๋ช๋ช ๋ผ์ด๋ธ ์์ฑ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋style
์์ฑ์ ํธ์งํ์ฌ ๋ฐฐ๊ฒฝ์์fuchsia
๋ก ๋ณ๊ฒฝํฉ๋๋ค. ์ฝ์์ ๋ค์์ ์
๋ ฅํ์ญ์์ค.
> document.body.style.gackgroundColor = 'fuchsia';
์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๊ณ ์ ์ถํ๋ฉด ๋ฐฐ๊ฒฝ์์ด ๋ณ๊ฒฝ ๋ ๋ ์ฌ์ดํธ์ ๋ํ ์ค์๊ฐ ์ ๋ฐ์ดํธ๊ฐ ํ์๋ฉ๋๋ค.
Elements ํญ์ผ๋ก ์ ํํ๊ฑฐ๋document.body
๋ฅผ ๋ค์ ์ฝ์์ ์
๋ ฅํ๋ฉด DOM์ด ๋ณ๊ฒฝ๋์์์ ์ ์ ์์ต๋๋ค.
<body style="background-color: fuchsia;">
<h1>Document Object Model</h1>
</body>
**์ฃผ์ : **background-color
CSS ์์ฑ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋ ์๋ฐ ์คํฌ๋ฆฝํธ์์backgroundColor
๋ผ๊ณ ์
๋ ฅํด์ผํฉ๋๋ค. ํ์ดํ์ผ๋ก ์ฐ๊ฒฐ๋ ๋ชจ๋ CSS ์์ฑ์ JavaScript์ camelCase๋ก ์์ฑ๋ฉ๋๋ค.
body
์ ๋ฐฐ๊ฒฝ์์ fuchsia
๋ฅผ ๋์
ํ์ฌ ์
๋ ฅ ํ JavaScript ์ฝ๋๋ ์ด์ DOM์ ์ผ๋ถ์
๋๋ค.
๊ทธ๋ฌ๋ ํ์ด์ง๋ฅผ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญํ๊ณ "ํ์ด์ง ์์ค๋ณด๊ธฐ"๋ฅผ ์ ํํ์ญ์์ค. ์น ์ฌ์ดํธ์ ์์ค์๋ JavaScript๋ฅผ ํตํด ์ถ๊ฐ ํ ์ ์คํ์ผ ์์ฑ์ด ํฌํจ๋์ด ์์ง ์์ต๋๋ค. ์น ์ฌ์ดํธ์ ์์ค๋ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉฐ ํด๋ผ์ด์ธํธ ์ธก JavaScript์ ์ํฅ์๋ฐ์ง ์์ต๋๋ค. ํ์ด์ง๋ฅผ ์๋ก ๊ณ ์นจํ๋ฉด ์ฝ์์ ์ถ๊ฐ ํ ์ ์ฝ๋๊ฐ ์ฌ๋ผ์ง๋๋ค.
DOM์ด HTML ์์ค ์ฝ๋์ ๋ค๋ฅธ ์ถ๋ ฅ์ ๊ฐ๋ ๋ค๋ฅธ ์ธ์คํด์ค๋ ์์ค ์ฝ๋์ ์ค๋ฅ๊ฐ์๋ ๊ฒฝ์ฐ์
๋๋ค. ํ ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์๋table
ํ๊ทธ์
๋๋ค.tbody
ํ๊ทธ๊ฐtable
๋ด๋ถ์ ํ์ํ์ง๋ง ๊ฐ๋ฐ์๋ ์ข
์ข
HTML์ ํ๊ทธ๋ฅผ ํฌํจํ์ง ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์๋์ผ๋ก ์ค๋ฅ๋ฅผ ์์ ํ๊ณ tbody
๋ฅผ ์ถ๊ฐํ์ฌ DOM์ ์์ ํฉ๋๋ค. DOM์ ๋ซํ์ง ์์ ํ๊ทธ๋ ์์ ํฉ๋๋ค.
์ด ํํ ๋ฆฌ์ผ์์๋ DOM์ ์ ์ํ๊ณ document
๊ฐ์ฒด์ ์ก์ธ์คํ์ฌ JavaScript ๋ฐ ์ฝ์์ ์ฌ์ฉํ์ฌdocument
๊ฐ์ฒด์ ์์ฑ์ ์
๋ฐ์ดํธํ๊ณ HTML ์์ค ์ฝ๋์ DOM์ ์ฐจ์ด์ ์ ์ดํด ๋ณด์์ต๋๋ค.
DOM์ ๋ํ ์์ธํ ๋ด์ฉ์ Mozilla ๊ฐ๋ฐ์ ๋คํธ์ํฌ์ DOM (Document Object Model) ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋ค์ ํํ ๋ฆฌ์ผ์์๋ ์ค์ํ HTML ์ฉ์ด๋ฅผ ๊ฒํ ํ๊ณ , DOM ํธ๋ฆฌ์ ๋ํด ๋ฐฐ์ฐ๊ณ , ๋ ธ๋๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ณ , ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ํ์ ๋ ธ๋์ ๋ํด ๋ฐฐ์ฐ๊ณ , JavaScript๋ก ๋ํ ํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ธฐ ์์ํฉ๋๋ค.