์น ๊ฐ๋ฐ์๋ถ๋ค์ด๋ผ๋ฉด DOM ์ด๋ผ๋ ๋จ์ด ํ๋ฒ์ ๋๋ ๋ค์ด๋ณด์ จ์ ๊ฒ๋๋ค. ์ ์ญ์ DOM์ ๋ํด ๋ง์ด ๋ค์ด๋ดค์ง๋ง ์ ํํ ๊ทธ๊ฒ ๋ฌด์์ธ์ง๋ ์๋ชฐ๋์ต๋๋ค. ๊ฐ๋ฐ์๋ผ๋ฉด ๊ถ๊ธํ ๊ฒ์ ๋ํด ๊ทธ๋ฅ ๋์ด๊ฐ๋ฉด ์๋๊ธฐ์ DOM์ ๋ํด ๊ณต๋ถํด๋ดค์ต๋๋ค.
Aldev๋, Code Playground๋, WIT๋ธ๋ก๊ทธ์ ๊ณ ์ฐ์๋์ ์๋ฃ๋ฅผ ํ ๋๋ก ์ ๊ฐ ์ดํดํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ ๋ฆฌํ์ต๋๋ค. ํ๋ฆฐ ๋ถ๋ถ์ด ์์ผ๋ฉด ์ธ์ ๋ ์ง์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ๋ค์ ๋ํด์๋ ํ๋จ์ ์ฃผ์๋ฅผ ๋จ๊น๋๋ค.
l BOM ๊ณผ DOM
์น์ ๊ธฐ๋ณธ์ ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์๋น์ค ๋ฉ๋๋ค. ํฌ๋กฌ, ์ฌํ๋ฆฌ, ์ต์คํ๋ก์ด ๋ฑ์ด ๋ฐ๋ก ์น ๋ธ๋ผ์ฐ์ ์ ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ html ์ฝ์ด๋ค์ฌ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋๋ค. ์ด๋ฌํ ๋ธ๋ผ์ฐ์ ์ ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ ์งํฉ์ ๋ธ๋ผ์ฐ์ ๊ฐ์ฒด ๋ชจ๋ธ ์ฆ, BOM(Browser Object Model) ์ ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ BOM ์ ์ด์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ฅ๋ค์ ์ํํ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด DOM์ ๋ฌด์์ผ๊น์?
DOM์ BOM์ ํ์ ๊ฐ์ฒด๋ก์จ DOM์ Document Object Model์ ์ฝ์์ ๋๋ค. ์ด๋ฅผ ์ง์ญํ๊ฒ ๋๋ฉด ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ์ฒด๋ ๋ฌด์์ผ๊น์?(๋ฐ์์ ๋ ์์ธํ ๋ค๋ฃน๋๋ค)
์๋ณธ html ๋ฌธ์์ <html>, <body>, <div> ๋ฑ์ด ๋ฌธ์ ๊ฐ์ฒด์ ๋๋ค. ์ด๋ฌํ ํ๊ทธ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์กฐ์์ ํ ์ ์๋๋ฐ ๋ฌธ์ ๊ฐ์ฒด๋ ์ฝ๊ฒ ๋งํด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ์์ ๊ฐ๋ฅํ ๊ฐ์ฒด์ ๋๋ค.
๋ฐ๋ผ์ DOM์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ์กฐ์ํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณธ html ๋ฌธ์๋ฅผ ํด์ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
DOM์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ์น ํ์ด์ง๋ฅผ ์กฐ์ํ ์ ์๋๋ก ์ ๊ณตํด์ฃผ๋ ์์์ผ ๋ฟ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ์น ํ์ด์ง๋ฅผ ์กฐ์ํ๋ ๊ฒ์ธ ์๋ฐํ ๋งํ๋ฉด ์๋ณธ html ๋ฌธ์๋ฅผ ์กฐ์ํ๋ ๊ฒ์ด ์๋๋ผ DOM์ ์กฐ์ํ๋ ๊ฒ์ ๋๋ค.
| DOM์ ํธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค
DOM์ ํธ๋ฆฌ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. DOM์ ์ดํดํ๊ธฐ ์ํด์ ํธ๋ฆฌ๊ตฌ์กฐ์ ๋ํด ์๊ณ ์์ด์ผ ํ๋ฏ๋ก ์งง๊ฒ ์์๋ณด๊ณ ๊ฐ๊ฒ ์ต๋๋ค.
Document Node : ์ต์์์ ์กด์ฌํ๋ฉฐ DOM ํธ๋ฆฌ์ ์ ๊ทผํ๊ธฐ ์ํ Root Node์ ๋๋ค.
Element Node : h1, div ๊ฐ์ ํ๊ทธ๋ฅผ ๊ฐ๋ฅดํค๋ Node์ ๋๋ค.
Attribute Node : class, id , href, style ๊ฐ์ ์์ฑ์ ๋ํ Node์ ๋๋ค.
Text Node : <div> Hello World </div> ์์ ํ๊ทธ ์์ ๊ฐ์ธ์ง Hello Wolrd๋ฅผ ๊ฐ๋ฅดํค๋ Node์ ๋๋ค.
l ๊ทธ๋ผ ๋ฌธ์๊ฐ์ฒด๋ ๋ฌด์์ผ๊น์?
๋ฌธ์๊ฐ์ฒด๋ 2๊ฐ์ง ์ข ๋ฅ๋ก ๋๋ ์ ์์ต๋๋ค. ์ ์ ์ธ ๋ฌธ์ ๊ฐ์ฒด์ ๋์ ์ธ ๋ฌธ์ ๊ฐ์ฒด์ ๋๋ค. ์ ์ ์ธ ๋ฌธ์ ๊ฐ์ฒด๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์๋ณธ html ๋ฌธ์์ ์๋ ๊ฐ์ฒด๋ค์ด๊ณ ๋์ ์ธ ๋ฌธ์ ๊ฐ์ฒด๋ ์๋์ ๊ฐ์ต๋๋ค.
var div = document.createElement('div');
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>DOM์ ๋ํ ์ค๋ช
์
๋๋ค.</h1>
<script>
var div = document.createElement('div');
var divText = document.createTextNode('๋์ ์ธ ๋ฌธ์๊ฐ์ฒด์
๋๋ค.');
div.appendChild(divText);
document.body.appendChild(div);
</script>
</body>
</html>
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ body ํ๊ทธ์ ์์์ผ๋ก div ํ๊ทธ๋ฅผ ์์ฑ์์ผ์ฃผ์์ต๋๋ค. h1 ๋ณด๋ค ์๋์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ํด์ฃผ์ ์ผ ์ค๋ฅ์์ด ๋ฉ๋๋ค. ์ด์ ๋ ์คํฌ๋ฆฝํธ ์ธ์ด ํน์ง์ ์ดํด๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
<h1> ๋ ์๋ณธ html ๋ฌธ์์ ์๋ ๊ฐ์ฒด์์ผ๋ฏ๋ก ์ ์ ๋ฌธ์๊ฐ์ฒด์ด๊ณ , ์๋ก ์๊ธด <div> ํ๊ทธ๋ ์คํฌ๋ฆฝํธ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋์ ๋ฌธ์๊ฐ์ฒด๊ฐ ๋ฉ๋๋ค.
l DOM์ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ด์ง ์์ต๋๋ค.
DOM์ ๋ํด ๋ ๊น์ํ ์์๋ณด๊ฒ ์ต๋๋ค. ๋ถ๋ช ์์์ DOM์ ๋ฌธ์๊ฐ์ฒด ๋ชจ๋ธ์ด๋ผ ํ์๊ณ , ๋ฌธ์๊ฐ์ฒด๋ <html>, <div> ๊ฐ์ ํ๊ทธ๋ผ๊ณ ํ์์ต๋๋ค. ํ์ง๋ง ์ด๊ฒ๋ค์ ํจ๋ถ๋ก ๋ฌธ์๊ฐ์ฒด ์ฆ, DOM ์ด๋ผ๊ณ ๋จ์ ์ง์ผ๋ฉด ์๋ฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์น ํ์ด์ง๋ DOM + CSSOM ์ ์กฐํฉ์ธ ๋ ๋ํธ๋ฆฌ๋ผ๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋๋ค. DOM์ด ๋ณด์ฌ์ง๋ ๊ฒ์ด ์๋๋๋ค.
diplay:none; ์ด๋ผ๋ ์์ฑ์ ์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
<p style="display:none"> Hello </p> ์ ๋ง๋ค๊ฒ ๋๋ฉด ์ฐ๋ฆฌ๋ ์คํ์ผ ์์ฑ ๋๋ฌธ์ <p> ํ๊ทธ๋ฅผ ํ๋ฉด์์ ๋ณผ์ ์์ต๋๋ค. ํ์ง๋ง ์ฌ์ ํ ์๋ฐ์คํฌ๋ฆฝํธ๋ก <p> ํ๊ทธ ์กฐ์์ด ๊ฐ๋ฅํฉ๋๋ค.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$(()=>{
$('p').attr('style','display:none');
});
</script>
</head>
<body>
<h1>DOM์ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ด๋ ๊ฒ์ด ์๋๋๋ค!!</h1>
<p>ํ๋ฉด์ ๋ณด์ด๋ ๊ฒ์ ๋ ๋ํธ๋ฆฌ์
๋๋ค.</p>
</body>
</html>
์ ์ฝ๋๋ DOM ์ ๋๋ค.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$(()=>{
});
</script>
</head>
<body>
<h1>DOM์ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ด๋ ๊ฒ์ด ์๋๋๋ค!!</h1>
<p>ํ๋ฉด์ ๋ณด์ด๋ ๊ฒ์ ๋ ๋ํธ๋ฆฌ์
๋๋ค.</p>
</body>
</html>
์ ์ฝ๋๋ ๋ ๋ํธ๋ฆฌ์ ๋ ๋๋ง ๋๋ ์ค์ง์ ์ธ ์ฝ๋์ ๋๋ค.
๋ ๋ํธ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก <p> ํ๊ทธ์ ์คํ์ผ ์์ฑ์ display:none ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๋ณด์ด์ง ์์ต๋๋ค.
DOM๊ณผ ๋ ๋ํธ๋ฆฌ์ ์ฐจ์ด๋ฅผ ์ดํดํ์ จ์ผ๋ฆฌ๋ผ ์๊ฐํฉ๋๋ค.
ใ ฃ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ๋ณด์ด๋ Elements ๋ ๊ณผ์ฐ DOM ์ผ๊น์?
display:none ์์๋ <p> ํ๊ทธ๊ฐ ๋ณด์ธ๋ค๊ณ ํด์ DOM ์ด๋ผ๊ณ ์๊ฐํ์ค ์ ์๊ฒ ์ง๋ง ์ญ์ DOM ์ ์๋๋๋ค. ํ์ง๋ง DOM๊ณผ ๊ฐ์ฅ ๊ฐ๊น๋ค๊ณ ํ ์๋ ์์ต๋๋ค.
์ญ์ ์๋ฅผ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๊ฐ์์์ ::after ์ ::before ๋ CSSOM์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. DOM ๊ฐ์ฒด๋ฅผ ๊ฐ์ง ์์ต๋๋ค. DOM์ ์ค์ง ์๋ณธ html ๋ฌธ์๋ก๋ถํฐ ๋น๋๋๊ณ , ์์์ ์ ์ฉํ๋ ์คํ์ผ์ ํฌํจํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ์์์๋ DOM์ด ์๋๋ฐ ๊ฐ๋ฐ์ ๋๊ตฌ์์๋ ๊ฐ์์์๋ฅผ ๋ณด์ค์ ์์ต๋๋ค.
๊ฐ์์์๊ฐ ์ DOM์ด ์๋์ง๋ ์ฝ๊ฒ ๋์น์ฑ์ จ์๊ฑฐ๋ผ ์๊ฐํฉ๋๋ค.
์์์ ๋ถ๋ช DOM์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ์์ ์ด ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ํด์ํ๋ค. ๋ผ๊ณ ํ์ต๋๋ค. ํ์ง๋ง after์ before๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์กฐ์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
after ์ before๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ ํ ์ ์์ด DOM์ด ์๋๋ฐ ๊ฐ๋ฐ์ ๋๊ตฌ์์๋ after์ before์ด ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ DOM์ ์๋๋๋ค.
์์ฝ
- DOM์ ํญ์ ์ ํจํ html ํ์์ด๋ค.
- JS์ ์ํด ์กฐ์๊ฐ๋ฅํ์ฌ์ผ ํ๋ค.
- ๊ฐ์์์๋ฅผ ํฌํจํ์ง ์๋๋ค. (ex : before, after)
- ๋ณด์ด์ง ์๋ ์์๋ฅผ ํฌํจํ๋ค. (ex : display : none)
- ๋ ๋ํธ๋ฆฌ์ DOM์ ๋ค๋ฅด๋ค.
- ๊ฐ๋ฐ์ ๋๊ตฌ์ Element ์ DOM์ ๋ค๋ฅด๋ค.
์ฐธ๊ณ ์ฌ์ดํธ
wit.nts-corp.com/2019/02/14/5522
m.blog.naver.com/magnking/220972680805
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ง๋ฌธ์ ์ธ์ ๋ ํ์ํฉ๋๋ค.
"๋ ๋ฐ๋์ ๋ฐฑ์๋ ์์ด ๋ ๊ฑฐ์ผ"
'...' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ์ฟ ํค๋ฅผ ์ฌ์ฉํด๋ณด์ (4) | 2020.12.28 |
---|---|
[JS] ๊ฐ๋ฐ์๋๊ตฌ ์ฝ์์์ response ๊ฐ ์ถ๋ ฅํ๊ธฐ (0) | 2020.12.24 |
[JS] jquery๋ก ํด๋์ค๋ช ์ด ๋์ผํ ์ฌ๋ฌ ๊ฐ์ ํ๊ทธ ์ ๊ทผํ๊ธฐ (0) | 2020.12.23 |
[Spring] ์๋ธ๋ฆฟ์ด๋? (0) | 2020.12.22 |
[DB] RDS, NoSQL ๊ทธ๋ฆฌ๊ณ NewSQL (0) | 2020.12.21 |