์น ๋ธ๋ผ์ฐ์ ์์ HTML/XML์ ์ ๊ทผํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง๋ HTML ํ์ผ์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ์ ์ ์๊ฒ ํด์ฃผ๋ ์ญํ ๊ณผ,
์ฝ๊ณ ์กฐ์ํ ์ ์๋๋ก API๋ฅผ ์ ๊ณตํ๋ค.
์น ๋ธ๋ผ์ฐ์ ๋ HTML ํ๊ทธ๋ค์ ํ ์ค์ฉ ์ฝ์ผ๋ฉด์ ๋
ธ๋(Node) ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
HTML ํ๊ทธ์๋ ๊ทธ์ ์์ํ๋ DOM ํธ๋ฆฌ ์์๊ฐ ์๋ค.
์น ๋ธ๋ผ์ฐ์ ๋ ์ด๋ค ๋ด์ฉ์ ํ๋ฉด์ ๋ ๋๋งํ ์ง ๊ฒฐ์ ํ๋๋ฐ ์ด ๋ ๋ ๋ํธ๋ฆฌ(Render Tree)๊ฐ ์์ฑ๋๋ค.
๋
ธ๋๋ EventTarget ๊ฐ์ฒด๋ฅผ ์์๋ฐ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ๋
ธ๋(Node)๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
EventTarget ๊ฐ์ฒด์๋ ์ฐ๋ฆฌ๊ฐ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ๋ ์ฐ๋ addEventListener()๋ฅผ ๊ฐ๊ณ ์๋ ๊ฐ์ฒด์ด๋ค.
๋
ธ๋ ๋ฐ์๋ Document, Element, Text ๋ฑ์ด ์กด์ฌํ๋ฉฐ, ์ฌ๊ธฐ์ Element์๋ ์ฐ๋ฆฌ๊ฐ ์ ์๊ณ ์๋
HTML ํ๊ทธ๊ฐ ํฌํจ๋์ด์๋ค.
HTML ํ๊ทธ๋ HTMLElement ๊ฐ์ฒด๋ฅผ ์์ํ๊ณ ,
HTMLElement๋ Element ๊ฐ์ฒด๋ฅผ ์์ํ๊ณ ,
Element๋ Node๋ฅผ, Node๋ EventTarget์ ์์ํ๋ค.
์ด๋ฌํ ์ด์ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ(JS)์์ ๋ณ์๋ก HTMLํ๊ทธ๋ฅผ ํ ๋น๋ฐ๊ณ , HTML ํ๊ทธ์ ์ด๋ฒคํธ๋ฅผ ๊ฑธ ์ ์์๋ ๊ฒ์ด๋ค.
EventTarget์ ๋ฉ์๋ ๐
1. addEventListener() - ์ด๋ฒคํธ ์์ฑ
2. removeEventListener() - ์ด๋ฒคํธ ์ญ์
3. dispathEvent() - ์๋ก์ด ์ด๋ฒคํธ ๋ฐํ
Node์ ๋ฉ์๋ ๐
appendChild(), firstChild ... ๋ฑ
1. DOM์ ๋ฌธ์์ ํ์ ์์๋ฅผ ์ป๊ธฐ ์ํ API๋ฅผ ์ ๊ณตํ๋ค.
document.getElementById()๊ฐ ๋ํ์ ์ด๋ค.
2. DOM์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์๋๋ค.
DOM์ด ์๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ ์น ํ์ด์ง ์์๋ค๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ป์ง ๋ชปํ๋ค.
3. html์ ๋ชจ๋ ์์๋ DOM์ ํ ๋ถ๋ถ์ด๋ฏ๋ก DOM๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด์ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋ค.
4. DOM์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก๋ถํฐ ๋
๋ฆฝ์ ์ด๋ค.
๋ฌธ์์ ๊ตฌ์กฐ์ ํํ์ ๋จ์ผ API๋ก ์ด์ฉ๊ฐ๋ฅํ๋ฉฐ, DOM์ ๊ตฌํ์ ์ด๋ ํ ์ธ์ด์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. (Python, JavaScript ๋ฑ)
5. DOM์ ๋ชจ๋ ๊ฐ์ฒด๋ ํด๋์ค๋ฅผ ์์๋ฐ๋๋ค.
DOM ์๋์ ์๋ ๊ฐ์ฒด(HTMLElement)๋ค์ Element๊ฐ์ฒด๋ฅผ ์์๋ฐ์ผ๋ฏ๋ก ์์๋ผ๊ณ ํ ์ ์๋ค.
ํ๊ทธ ํ๋ํ๋๊ฐ ๋ชจ๋ ๊ฐ์ฒด์ด๋ค.
6. DOM์ HTML์ด ์๋๋ค.
DOM์ ๋ด๊ฐ ์์ฑํ HTML ์์ค์ ๋ค๋ฅผ ์ ์๋ค.
1) HTML์์ค๊ฐ ์ ํจํ์ง ์์ ๋
๊ฐ๋ก๊ฐ์ด ์ ์ด๋ ์ฐฐ๋ก๊ฐ์ด ์์ ๋ค์ ๋์ด๋ค. ๊ฐ๋จํ ์์๋ฅผ ๋ด๋ณด์.
<head>
์ <body>
ํ๊ทธ๊ฐ ๋น ์ ธ์๋ค.
ํ์ง๋ง DOM ํธ๋ฆฌ์์๋ ์์ ๊ฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ต์ ๋๋ค.
2) ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ DOM์ ์์ ํ ๋
์ฐ๋ฆฌ๋ ์์ฃผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํ์ฌ ์์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๊ณค ํ๋ค.
createTextNod()
, appendChild()
๋ฑ์ ํตํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ๋ฅผ ํ์ฌ๋,
์๋ณธ HTML ์์ค๋ฅผ ๋ณ๊ฒฝํ๋๊ฑด ์๋๋ค. ์ด๊ฒ HTML๊ณผ DOM์ ๋ค๋ฅธ ์ ์ด๋ค.
7. DOM์ ๊ฐ๋ฐ์๋๊ตฌ์์ ๋ณด์ด๋ ๊ฒ๊ณผ ๋ค๋ฅด๋ค.
F12
๋ฒํผ์ ํตํด DOM๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ทผ์ฌ์น๋ฅผ ๋ณผ ์ ์์ง๋ง, ๊ทผ๋ณธ์ ์ผ๋ก DOM๊ณผ๋ ๋ค๋ฅด๋ค.
์๋ฅผ ๋ค์ด css์ ::before
, ::after
์ ํ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์์๋ ๊ฐ๋ฐ์๋๊ตฌ์์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค. CSSOM๊ณผ ๋ ๋ํธ๋ฆฌ์ ์ผ๋ถ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง DOM์ ์ค์ง ์๋ณธ HTML ์์ค๋ก๋ถํฐ ๋น๋๋๋ฏ๋ก, ์์์ ์ ์ฉ๋๋ ์คํ์ผ์ ํฌํจํ์ง ์๋๋ค. ๋๋ฌธ์ ์ด ์์๋ DOM์ ์ผ๋ถ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ ์์ ํ ์ ์๋ค.
Render Tree = DOM + CSSOM
๋ ๋ํธ๋ฆฌ๋ DOM๊ณผ CSSOM์ ํฉํ ํ์ ์ต์ข
์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ํ์๋ ๊ฒ๋ค๋ง์ ์๊ธฐํ๋ค.
DOM์ ๊ฐ HTML ํ๊ทธ ์์์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ ์์ผ๋ฉฐ,
CSSOM์ ๊ฐ ํ๊ทธ ์์์ ๋ํ CSS ์์ฑ์ด ๋ค์ด๊ฐ ์๋ค.
style:none
๊ณผ ๊ฐ์ด ์ฌ์ฉ์์๊ฒ ๋ณด์ด์ง ์๋ ์์ฑ์ ๊ฐ๊ณ ์๋ <span>
ํ๊ทธ๋ ๋ ๋ํธ๋ฆฌ์์ ์๋ต๋์๋ค. ์ด๊ฒ DOM๊ณผ ๋ค๋ฅธ ์ ์ค ํ๋์ด๋ค.
visibility : hidden
- ๋น์ด์๋ ์์๋ก ๋ ๋๋ง ๋๋ค.
style : none
- ๋ ๋ ํธ๋ฆฌ์์ ์์ ํ ์ ๊ฑฐ๋๋ค.
https://developer.mozilla.org/ko/docs/Web/API/Document_Object_Model/Introduction
https://onlydev.tistory.com/9
https://from2020.tistory.com/23
https://wit.nts-corp.com/2019/02/14/5522
https://velog.io/@godori/DOM%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80