DOM ์ดํด ํ๊ธฐ
๐ DOM(Document Object Model) ?
: XML๊ณผ HTML ๋ฌธ์์ ์ ๊ทผํ๊ธฐ ์ํ ์ธํฐํ์ด์ค.
Web API๋ก ๋ธ๋ผ์ฐ์ ์น ๋ฌธ์ ์กฐ์ํ ์ ์์.
๐ Web API?
API (web or XML page) = DOM + JS (scripting language)
์์)
const contentBox = document.querySelector('.contentBox');
document.style.backgroundColor = 'red';
const innerHeight = document.innerHeight;
DOM์ ๋ ธ๋๋ค ์ค์์ ํน์ ๋ ธ๋๋ฅผ ์ ํํ๊ณ , ์ ํํ ๋ ธ๋์ ์์ ๋ณ๊ฒฝํ๊ฑฐ๋ viewport์ ๋์ด๋ฅผ ์ฐพ๋ ๋ฑ DOM์ ์กฐ์ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์คํธ๋ฆฝํธ ๋ฉ์๋๋ค์ Web API๋ผ๊ณ ํ๋ค. ์ด๋ฐ ๋ฉ์๋๋ค์ window ์ต์์ ๊ฐ์ฒด์ ๋ด๊ฒจ์ ธ ์๋ค.
๐ DOM์ ๊ฐ์ฒด ๊ตฌ์กฐ
: DOM์ ์๋ณธ HTML ๋ฌธ์์ ๊ฐ์ฒด ๊ธฐ๋ฐ ํํ ๋ฐฉ์์ด๋ฉฐ ๊ฐ์ฒด ๊ตฌ์กฐ๋ ๋ ธ๋ ํธ๋ฆฌ (ํ๋์ ๋ถ๋ชจ ์ค๊ธฐ๊ฐ ์ฌ๋ฌ๊ฐ์ ์์ ๋๋ญ๊ฐ์ง, ๋๋ญ์๋ค์ ๊ฐ์ง ์ ์๋ ๋๋ฌด์ ๊ฐ์ ๊ตฌ์กฐ)๋ก ํํ๋๋ค.
์์ )
<!DOCTYPE html>
<html lang="en">
<head>
<title> My first web page </title>
</head>
<body>
<h1> Hello, world! </h1>
<p> How are you? </p>
</body>
</html>
์ ๋ฌธ์๋ ์๋์ ๊ฐ์ ๋ ธ๋ ํธ๋ฆฌ๋ก ํํ ๋๋ค.
! DOM์ด HTML ๋ฌธ์๋ก๋ถํฐ ์์ฑ๋์ง๋ง ๊ฐ์ ๊ฐ๋ ์ ์๋.
๐ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ํ๋ฆ
*webkit ๋ ๋๋ง ์์ง ๊ธฐ์ค
1. ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์์ HTML๊ณผ ์ ์ ํ์ผ์ ๋ฐ์์จ๋ค.
2. ๋ ๋๋ง ์์ง์ด ๊ฐ์ ธ์จ HTML๊ณผ ์ ์ ํ์ผ์ ํ์ฑํ๋ค.
3. ๋ ๋๋ง ์์ง์ด ํ์ฑํ ํ์๋ HTML๊ณผ ์ ์ ํ์ผ ๊ฐ์๋ฅผ DOM Tree์ CSSOM Tree๋ก ๋ง๋ ๋ค.
4. ๋ ๋๋ง ์์ง์ด Attachment ํ ํ, Render Tree๋ฅผ ๋ง๋ ๋ค.
5. Layout์ Render Tree์ ์์๋ค์ ์ ๋ ฅ๋ style rule๋๋ก ๋ธ๋ผ์ฐ์ ์ viewport๋ด์ ๊ทธ๋ ค์ง ์์์ ํฌ๊ธฐ์ ์์น ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์น๋ฅผ ๊ณ์ฐํ๋ค. *viewport : ๊ทธ๋ํฝ์ด ํ์๋๋ ๋ธ๋ผ์ฐ์ ์์ญ
6. Layout ์์ ์ด ๋๋ Render Tree๊ฐ ๋ ๋๋ง ์์ง์ ์ํด ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ค.
โ ์ฌ์ฉ์๊ฐ ์์์ ์คํ์ผ์ ์ํฅ์ ์ฃผ๋ ์ก์ ์ด๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผฐ์ ๊ฒฝ์ฐ
-> Layout๊ณผ Paint ์์ ์คํ ํ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ด๊ฒ ๋จ.
โ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ์ํค๋ ์์ ์ด๋ ์์๋ฅผ ์ถ๊ฐํ๋ ์์ ์ ๋ฐ์์ํจ ๊ฒฝ์ฐ
-> DOM Tree๋ถํฐ ๋ค์ ๊ทธ๋ฆผ.
๊ฒฐ๋ก
1. HTML์ ์์ฑํ๋ฉด ๋จ์ํ ์ธ์ด์ผ ๋ฟ์ด๊ณ ๋ธ๋ผ์ฐ์ ์ ํด์์ ๊ฑฐ์ณ ๊ฐ์ฒด๋ก ๋ณํ๋ ๊ฑธ DOM์ด๋ผ๊ณ ํ๋ค.
(์น ์ฌ์ดํธ์์ F12 ๋๋ฅธ ๋ค Elementsํญ์ ๊ฐ๋ฉด ๋์ค๋ ์ฝ๋๋ค์ด DOM)
2. HTML๊ณผ DOM์ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค.
์ฐธ๊ณ