JavaScript
JavaScript ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ(DOM)
kohi โ
2022. 11. 16. 13:29
๐ก DOM (Document Object Model)
- XML์ด๋ HTML ๋ฌธ์์ ์ ๊ทผํ๊ธฐ ์ํ ์ธํฐํ์ด์ค, ๋ฌธ์ ๋ด์ ๋ชจ๋ ์์๋ฅผ ์ ์ํ๊ณ ๊ฐ๊ฐ์ ์์์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณต
- ์๋ฐ์คํฌ๋ฆฝํธ์์ HTML์ ์ ๊ทผํ๊ธฐ ์ํด DOM ์ฌ์ฉ
๐ฐ๏ธ DOM
- ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ ํ ์คํธ ํ์ผ๋ก ์์ฑ๋ ์น ๋ฌธ์๋ฅผ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ณด์ด๋๋ก ํ๊ธฐ ์ํด์ ์ด ์น ๋ฌธ์๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋๋ฐ ์ด๋ฅผ DOM์ด๋ผ ํ๋ค.
- DOM์ ์น ๋ฌธ์๋ฅผ ํ๋์ ๊ฐ์ฒด๋ก ์ ์ํ๊ณ , ์น ๋ฌธ์๋ฅผ ์ด๋ฃจ๋ ํ ์คํธ๋ ์ด๋ฏธ์ง, ํ ๋ฑ ๋ชจ๋ ์์๋ ๊ฐ๊ฐ ๊ฐ์ฒด๋ก ์ ์ํ๋ค. => ๋ฌธ์ ์ ์ฒด๋ document ๊ฐ์ฒด, ์ด๋ฏธ์ง๋ image ๊ฐ์ฒด, ์ด๋ฏธ์ง ์์ฑ(Attribute)์ธ alt, src๋ image ๊ฐ์ฒด์ ์์ฑ(Property)๊ฐ ๋๋ค.
<!DOCTYPE html>
<html>
<head>
<style>
.red { color: #ff0000; }
.blue { color: #0000ff; }
</style>
</head>
<body>
<div>
<h1>Cities</h1>
<ul>
<li id="one" class="red">Seoul</li>
<li id="two" class="red">London</li>
<li id="three" class="red">Newyork</li>
<li id="four">Tokyo</li>
</ul>
</div>
</body>
</html>
- DOM tree๋ ๋ธ๋ผ์ฐ์ ๊ฐ HTML ๋ฌธ์๋ฅผ ๋ก๋ํ ํ ํ์ฑํ์ฌ ์์ฑํ๋ ๋ชจ๋ธ์ ์๋ฏธํ๋ค. ๊ฐ์ฒด์ ํธ๋ฆฌ๋ก ๊ตฌ์กฐํ๋์ด ์๊ธฐ ๋๋ฌธ์ DOM tree๋ผ ๋ถ๋ฅธ๋ค.
- DOM์์ ๋ชจ๋ ์์, ์ดํธ๋ฆฌ๋ทฐํธ, ํ ์คํธ๋ ํ๋์ ๊ฐ์ฒด์ด๋ฉฐ Document ๊ฐ์ฒด์ ์์์ด๋ค.
- DOM tree๋ ๋ค ์ข
๋ฅ์ ๋
ธ๋๋ก ๊ตฌ์ฑ๋๋ค.
- ๋ฌธ์ ๋ ธ๋(Document Node): ํธ๋ฆฌ์ ์ต์์์ ์กด์ฌํ๋ฉฐ ๊ฐ๊ฐ ์์, ์ดํธ๋ฆฌ๋ทฐํธ, ํ ์คํธ ๋ ธ๋์ ์ ๊ทผํ๋ ค๋ฉด ๋ฌธ์ ๋ ธ๋๋ฅผ ํตํด์ผ ํ๋ค. ์ฆ, DOM tree์ ์ ๊ทผํ๊ธฐ ์ํ ์์์ (entry point)์ด๋ค.
- ์์ ๋ ธ๋(Element Node): ์์ ๋ ธ๋๋ HTML ์์๋ฅผ ํํํ๋ค. HTML ์์๋ ์ค์ฒฉ์ ์ํด ๋ถ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ฉฐ ์ด ๋ถ์ ๊ด๊ณ๋ฅผ ํตํด ์ ๋ณด๋ฅผ ๊ตฌ์กฐํํ๋ค. ๋ฐ๋ผ์ ์์ ๋ ธ๋๋ ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ์์ ํ๋ค๊ณ ๋ง ํ ์ ์๋ค. ์ดํธ๋ฆฌ๋ทฐํธ, ํ ์คํธ ๋ ธ๋์ ์ ๊ทผํ๋ ค๋ฉด ๋จผ์ ์์ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ๊ทผํด์ผ ํ๋ค. ๋ชจ๋ ์์ ๋ ธ๋๋ ์์๋ณ ํน์ฑ์ ํํํ๊ธฐ ์ํด HTMLElement ๊ฐ์ฒด๋ฅผ ์์ํ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋๋ค. (๊ทธ๋ฆผ: DOM tree์ ๊ฐ์ฒด ๊ตฌ์ฑ ์ฐธ๊ณ )
- ์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋(Attribute Node): ์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋๋ HTML ์์์ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ํํํ๋ค. ์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋๋ ํด๋น ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์ง์ ๋ ์์์ ์์์ด ์๋๋ผ ํด๋น ์์์ ์ผ๋ถ๋ก ํํ๋๋ค. ๋ฐ๋ผ์ ํด๋น ์์ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ๊ทผํ๋ฉด ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ฐธ์กฐ, ์์ ํ ์ ์๋ค.
- ํ ์คํธ ๋ ธ๋(Text Node): ํ ์คํธ ๋ ธ๋๋ HTML ์์์ ํ ์คํธ๋ฅผ ํํํ๋ค. ํ ์คํธ ๋ ธ๋๋ ์์ ๋ ธ๋์ ์์์ด๋ฉฐ ์์ ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ฆ, ํ ์คํธ ๋ ธ๋๋ DOM tree์ ์ต์ข ๋จ์ด๋ค.
- ์ ์ ์์ฑ๊ณผ ๋์ ์์ฑ
- ์ ์ ์์ฑ: ์น ํ์ด์ง๋ฅผ ์ฒ์ ์คํํ ๋ HTML ํ๊ทธ๋ก ์ ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ
- ๋์ ์์ฑ: ์น ํ์ด์ง๋ฅผ ์คํ ์ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด ๋ฌธ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ
- ๊ฐ์ฒด ๋ชจ๋ธ: ์น ๋ธ๋ผ์ฐ์ ๊ฐ HTML ํ์ผ์ ๋ถ์ํ๊ณ ์ถ๋ ฅํ๋ ๋ฐฉ์
- ์น ๋ธ๋ผ์ฐ์ ๋ HTML ์ฝ๋๋ฅผ ์์์ ์๋๋ก ์คํํ๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ body ํ๋จ์ ์์ฑํด์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ด๋ฒคํธ๋ฅผ ํ์ฉํด์ ํด๊ฒฐํ๋๋ก ํ๋ค.
๐ฐ๏ธ DOM ๋ฉ์๋
- DOM ๋
ธ๋ ์ ๊ทผ
- document.getElementById(): ํด๋น ์์ด๋๋ฅผ ๊ฐ์ง ์์๋ฅผ ์ ํํด์ ๊ฐ์ฒด๋ก ๊ฐ์ ธ์ด
- document.getElementsByTagName(): ํด๋น ํ๊ทธ์ธ ์์๋ค์ ์ ํํด์ ๋ฐฐ์ด๋ก ๊ฐ์ ธ์ด
- document.getElementsByClassName() : ํด๋น ํด๋์ค๋ฅผ ๊ฐ์ง ์์๋ค์ ์ ํํด์ ๋ฐฐ์ด๋ก ๊ฐ์ ธ์ด
- document.querySelector(): CSS ์ ํ์ ๋ฌธ๋ฒ์ผ๋ก ์ ํ์์ ํด๋นํ๋ ์์ ํ๋๋ฅผ ๊ฐ์ฒด๋ก ๊ฐ์ ธ์ด
- document.querySelectorAll(): CSS ์ ํ์ ๋ฌธ๋ฒ์ผ๋ก ์ ํ์์ ํด๋นํ๋ ์์๋ค์ ๋ฐฐ์ด๋ก ๊ฐ์ ธ์ด
- ํ๊ทธ ์์ ๋ด์ฉ ์์
- innerText, textContent: ํ ์คํธ ๋ด์ฉ ํ์
- innerHTML: ํ ์คํธ ๋ด์ฉ, HTML ํ๊ทธ ๋ฐ์
- ์์ฑ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์์
- getAttribute(): ํ๊ทธ์ ์์ฑ์ ๋ถ๋ฌ์ด
- setAttribute(): ํ๊ทธ์ ์์ฑ์ ์๋ก ์ค์ ํ๊ฑฐ๋ ์์ ํจ
- DOM ๋
ธ๋ ์กฐ์
- document.createElement(tag): ์์ ๋ ธ๋ ์์ฑ
- createAttribute(attr): ์์ฑ ๋ ธ๋ ์์ฑ
- ๋ ธ๋ ์์ฑ์ ๋จ์ง ์์ฑ๋ง ๋ ๊ฒ์ด๊ณ ์ค์ DOM ํธ๋ฆฌ์ ์ ์ฉํ๊ธฐ ์ ์
- parentNode.appendChild(new): parentNode์ ๋ง์ง๋ง ์์์ผ๋ก ๋ ธ๋(new) ์ถ๊ฐ
๐ฐ๏ธ ์ฌ์ฉ ์์
๐ฐ๏ธ Reference
https://donghyun-dev.tistory.com/20
https://tadaktadak-it.tistory.com/83
https://mathshpark-coding.tistory.com/179
https://tadaktadak-it.tistory.com/83#--%--document%--๏ฟฝ%A-%--๏ฟฝ%--%-C๏ฟฝ%--%-C