*DOM: ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ(The Document Object Model)
์น๋ธ๋ผ์ฐ์ ๋ HTML ๋ฌธ์๋ฅผ ํด์ํ๊ณ , ํ๋ฉด์ ํตํด ํด์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค.
ํด์ํ HTML ์ฝ๋๋ฅผ ํ๋ฉด์ ํตํด ๋ณด์ฌ์ฃผ๋ ๊ณผ์ ์ '๋ ๋๋ง'์ด๋ผ ํ๋ค.
- DOM์ html ๋ฌธ์์ ๊ฐ ์์๋ค์ ํธ๋ฆฌํํ๋ก ๊ตฌ์กฐํํด ํํํ๋ ๋ฌธ์(๋ฐ์ดํฐ)๋ฅผ ์์ฑํ๋ค. ๊ฐ๋ฐ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ด์ฉํด์ ์ผ์ ์์ฑํ๊ฑฐ๋ ์์ ํ๊ฑฐ๋ ์ญ์ ํ ์ ์๋ค.
์ด๋ฅผ DOM์ด๋ผ ํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ๋ DOM์ ํตํด ํ๋ฉด์ ์น ์ฝํ ์ธ ๋ค์ ๋ ๋๋งํ๋ค.
DOM๋ชฉ์
Q. Html ์ฝ๋์ ์จ์ ธ ์๋ ๋ฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋๊ฒ ๋ธ๋ผ์ฐ์ ์ญํ ์ธ๋ฐ
๊ตณ์ด ์ค๊ฐ์ DOM์ด๋ผ๊ณ ํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ์ด์ ?
A. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด ์ด ๋ฌธ์์ ๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
DOM์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด์ ์น ์ฝํ ์ธ ๋ฅผ ์ถ๊ฐ ์์ ์ญ์ ํ๊ฑฐ๋
๋ง์ฐ์ค ํด๋ฆญ, ํค๋ณด๋ํ์ดํ ๋ฑ์ ์ด๋ฒคํธ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ ๋ฆฌํ ์ ์๋๋ก ์ ๊ณต๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์น๋ฌธ์์ ๋ํ ์ด๋ค ๋์์ ๊ตฌํํ๊ณ ๋๋ฉด DOM์ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์๋์ด ์น ๋ธ๋ผ์ฐ์ ํ๋ฉด์ด
๋ค์ ๋ ๋๋ง๋๋ ์ด๋ฐ ํ๋ฆ์ด๋ค.
Html ์ฝ๋๋ ์ ์ ์ธ ํ ์คํธ์ด๋ฏ๋ก ์น ํ๋ฉด์ด ์ฌ์ฉ์์ ๋์ ์ธ ์ํธ ์์ฉ์ ํ๊ธฐ ์ํด์๋ DOM์ด ๊ทธ ์ญํ ์ ํด์ค ์๊ฐ ์๋ ๊ฒ.
- DOM ์ nodes์ objects๋ก ๋ฌธ์๋ฅผ ํํํ๋ค.
- ์์ชฝ: ๋ถ๋ชจnode / ์๋์ชฝ: ์์node
- ์ฌ๊ธฐ์ ํ๋ํ๋์ ๊ฐ์ฒด๋ฅผ node๋ผ๊ณ ๋ถ๋ฅธ๋ค. (ex. element: <a>)
ํ์ด์ง ์ฝํ ์ธ (the page content)๋ DOM ์ ์ ์ฅ๋๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ ๊ทผํ๊ฑฐ๋ ์กฐ์ํ ์ ์๋ค.
#1 Node์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
console ์ฐฝ ์ด์ด์ ์คํํด๋ณด์.
document.documentElement // HTML์ ์ ๊ทผ ๊ฐ๋ฅ
document.body; //Body์ ์ ๊ทผ ๊ฐ๋ฅ
document.head; //Head์ ์ ๊ทผ ๊ฐ๋ฅ
๋ชจ๋ html ํ๊ทธ๋ ๊ฐ์ฒด์ด๋ค. ๊ฐ์ฒด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ๊ทผํ๊ณ ์ ์ดํ ์ ์๋ค.
document.body.style; // style์ ์ ๊ทผ์ด ๊ฐ๋ฅ
-์ด๋ ๊ฒ ์ฝ๋์์ฑํ๋ฉด ๋ง์ style์ ๊ฐ์ด ๋ฐ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์์ ํ๋ ๋ฐฉ๋ฒ์
-์์: backgroundColor๊ฐ์ "blue"๋ฅผ ์คฌ๋๋
๋ฐฐ๊ฒฝ์์ด ํ๋์์ผ๋ก ๋ณํ ๋ชจ์ต์ ํ์ธํ ์ ์๋ค.
์์ ๋ฐฉ๋ฒ์ styleํ๊ทธ์ ์ ๊ทผํ์ฌ ์ฐพ์์ ์์ ํ ๊ฒ์ด๊ณ , ์ง์ ์ ์ผ๋ก ์์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
document.body.style.opacity = '0.5'; //ํฌ๋ช
๋
document.body.style.padding = '100px'; //ํจ๋ฉ๊ฐ
opacity(ํฌ๋ช ๋)๊ฐ 0.5๋ฅผ ์ฃผ์๊ณ ,
๊ทธ ๋ฐ์ padding๊ฐ 100px์ ์ฃผ์๋ค.
getElementById() - NodeList
์ฌ๊ธฐ ๋ณด๋ฉด id๊ฐ first๋ก ๋์ด ์๋ค.
id๋ก ์ ๊ทผํ๋ ค๋ฉด getElementById๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
const el = document.getElementById('first'); // el์ ๋ด๊ฐ ์ง์ ํ const(๋งค๊ฐ๋ณ์)์ ์ด๋ฆ
el;
๊ทธ ๋ฐ์ el;์น๋ฉด ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
ํ๊ทธ๋ด์ฉ์ผ๋ก๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค. pํ๊ทธ๋ก ์ ๊ทผํ๋ ค๋ฉด
const pList = document.getElementsByTagname:('p') // pList๋ ๋ด๊ฐ ์ง์ ํ const์ ์ด๋ฆ
pList;์น๋ฉด ์ ๊ทผ๊ฐ๋ฅ
pList;
์ฌ๊ธฐ์ ์์ธํ ๋ณด๋ฉด ์ฒซ๋ฒ์งธ๋ element, ๋๋ฒ์งธ๋ elements๋ผ๊ณ ์ ํ์.
id๋ ๊ฐ ํ์ด์ง๋น ํ ๊ฐ๋ฐ์ ๋ชป ์ฐ๊ธฐ ๋๋ฌธ์ element
p๋ ์ฌ๋ฌ๋ฒ ์ธ ์ ์๊ธฐ๋๋ฌธ์ elements (s๋ฅผ ๋ถ์ธ๋ค) ์๋ ์ฝ๋ ์ฐธ๊ณ
getElementById('first');
const pList = document.getElementsByTagname:('p')
- pList๋ for of๋ฌธ์ผ๋ก ์ํํ ์ ์๋ค.
**JavaScript**
for(p of pList) {
p.style.fontSize = '30px';
}
< '30px'
> for(p of pList) {
p.style.opacity= String (Math.random());
} // string=๋ฌธ์์ด, ํฌ๋ช
๋๋ ๋๋คํ ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
< '0.19335992616464348'
-getElements๋ฅผ ์ด์ฉํ๋ฉด ClassName์ด๋ ByName์ผ๋ก node์ ์ ๊ทผํ ์ ์๋ค.
document.getElementsByClassName('link');
link๋ผ๋ ์์๊ฐ 3๊ฐ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- .link๋ผ๊ณ ํด๋ ๋๊ฐ์ ๊ฐ์ด ๋์จ๋ค.
querySelectorAll() - HTML collection
document.querySelectorAll('.link');
:3๊ฐ์ ์์๊ฐ์ด ๋ค ๋์ด.
- id์ ๊ฐ์ ๋ถ๋ฌ์ค๊ธฐ
:์์ # ๋ถ์ด๊ธฐ
* querySelectorAll(); ๋ชจ๋ node๋ฅผ ๊ฐ์ ธ์ด
* querySelector(); ์ ์ผ ์ฒ์์ node๋ง ๊ฐ์ ธ์ด
document.querySelector('.link');
document.querySelector('h3:nth-of-type(2)').style.color = 'red';
//2๋ฒ์งธ h3๋ฅผ ์ฐพ์์ ์ปฌ๋ฌ๋ฅผ '๋นจ๊ฐ'์ผ๋ก ๋ฐ๊ฟ ์๋์์
-p์ ํ๊ทธ ์ค ์ง์๋ฒ์งธ๋ง ์ฐพ์ ์์ฑ ๋ฐ๊พธ๊ธฐ
document.querySelectorAll('p:nth-of-type(2n)')
:for of()๋ฌธ์ ์ฌ์ฉํด์ ์ฐ์ธก์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
// console ์
๋ ฅ ๊ฐ
pList;
< NodeList()
-array(๋ฐฐ์ด)๊ฐ ์๋๊ธฐ ๋๋ฌธ์ for of ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ , index๋ฅผ ํตํด ๊ฐ node์ ์ ๊ทผ ํ ์ ์๋ค. length๋ฅผ ์ด์ฉํด ๊ฐ์๋ฅผ ์ ์๋ ์๋ค.
ํ์ง๋ง ๋ฐฐ์ด์ ๋ํ๋ด๋ push(), pop(), filter(), join()๊ฐ์ ๋ฉ์๋๋ ์ฌ์ฉX
getElementById์ querySelector์ ์ฐจ์ด์
element = document.getElementById(id);
- getElementById : id๋ฅผ ํตํด ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํํ๋ค. ๋ง์ฝ document์ ๊ตฌ์ฒด์ ์ธ ID์ ์๋ฆฌ๋จผํธ๊ฐ ์๋ค๋ฉด null์ ๋ฐํํ๋ค.
element = document.querySelector(selectors);
- querySelector: selector์ ๊ตฌ์ฒด์ ์ธ ๊ทธ๋ฃน๊ณผ ์ผ์นํ๋ document์ ์ฒซ๋ฒ์งธ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํํ๋ค. ์ผ์นํ๋๊ฒ ์์ผ๋ฉด null๋ฐํํ๋ค.
์์ 1)
<form id="userForm">
<input id="username" type="text" value="Guilherme" />
</form>
์์ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ฐ๋ฆฌ๋ username ์์๋ฅผ ์ป๊ณ ์ถ๊ณ ์ด๋ฅผ ๋ณ์์ ํ ๋นํ๊ณ ์ถ๋ค.
var username = document.getElementById("username");
var username = document.querySelector("#userForm #username");
์ฒซ๋ฒ์งธ๋ getElementById๋ฅผ ์ฌ์ฉํด๋ดค๊ณ , ๋ ๋ฒ์งธ๋ querySelector์ ์ฌ์ฉํ๋ค.
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, querySelector๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์๋ฆฌ๋จผํธ๋ฅผ ์ ํํ๋ ๊ฒ์ ๋ ๊ตฌ์ฒด์ ์ด๊ณ ํ์ ์ ์ด๋ค. ๊ทธ๋ฌ๋ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค! (๋ณดํต ํ์ ์ ์ผ๋ก ๋ง๋ค์ด์ผํ๋ ์์ด๋๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค)
์์ 2)
<form id="productForm">
<input id="productOne" class="product" type="text" value="Product 1" />
<input id="productTwo" class="product" type="text" value="Product 2" />
<input id="productThree" class="product" type="text" value="Product 3" />
</form>
์์ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ฐ๋ฆฌ๋ ๋ชจ๋ products ์๋ฆฌ๋จผํธ๋ฅผ ์ป๊ณ ์ถ๊ณ ์ด๋ฅผ ๋ณ์์ ํ ๋นํ๊ณ ์ถ๋ค.
getElementByClassName์ ํตํด ์ฌ์ฉํด๋ณด์.
var products = document.getElementsByClassName("product");
์ด๋ฒ์๋ querySelectorAll์ ํตํด ๊ฐ์ ์๋ฆฌ๋จผํธ๋ฅผ ์ป์ด๋ณด๊ณ ์ ํ๋ค.
var products = document.querySelectorAll("#productForm .product");
๊ฒฐ๊ณผ๋ ๊ฑฐ์ ๊ฐ๋ค.
๊ทธ๋ฌ๋ getElementsByClassName์ HTMLCollection์ ๋ฆฌํด์ด ๋๊ณ querySelectorAll์ NodeList์ ๋ฆฌํด์ด ๋๋ค.
๐ ๊ทธ๋ผ ์ฌ๊ธฐ์ HTMLcollection์ ๋ญ๊ณ NodeList๋ ๋ฌด์์ธ๊ฐ??
์ฐ์ , ๊ฐ๋จํ๊ฒ ์ค๋ช
ํด๋ณด๋ฉด ๋ ๋ค ๋ฐฐ์ด๊ณผ ๊ฐ์ด ๊ฐ ํญ๋ชฉ์ ์ ๊ทผํ๊ธฐ ์ํ ์ธ๋ฑ์ค๋ฅผ ์ ๊ณตํ๋ค๊ณ ํ๋ค. HTMLCollection์ ํญ๋ชฉ์ name, id ์์ฑ์ผ๋ก๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง, NodeList์ ํญ๋ชฉ์ ์ธ๋ฑ์ค ๋ฒํธ๋ก๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
๋ง์ง๋ง ๊ฒฐ๋ก
๋ง์ฝ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฆฌ๋จผํธ๋ฅผ ์ ํํ๊ณ ์ถ๋ค๋ฉด, querySelector๊ทธ๋ฆฌ๊ณ querySelectorAll์ ์ฌ์ฉํด๋ณด์!
๊ทธ๋ฌ๋ ์ ๋์ ๋นํด getElementByID๊ฐ ๋ ๋น ๋ฅด๊ณ ๋ ์ ์ง์์ด ๋๋ค๋ ๊ฒ์ ์์๋์. ์ฐธ๊ณ ํ 2๋ช
์ ๊ฐ๋ฐ์๋ค์ querySelector๋์ ์ getElementById๋ฅผ ๋๋ง์ด์ด๋ค๊ณ ๋งํ๊ณ ์๋ค.
์ฐธ๊ณ :
https://velog.io/@hovelopin/JS-DOM-%EC%A0%9C%EC%96%B4
'๐Development > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] DOM์ด๋? #3 ๋ ธ๋ ์์ฑ,์ถ๊ฐ,๋ณต์ ,์ญ์ (0) | 2023.03.26 |
---|---|
[JS] DOM์ด๋? #2 ๋ถ๋ชจ, ์์, ํ์ Node (0) | 2023.03.26 |
[JS] Arrow Function์ ๋ฌด์์ธ๊ฐ? ํจ์์ ์ ์ธ๊ณผ ํํ (0) | 2023.03.13 |
[JS] operator(์ฐ์ฐ์), if, switch, for loops ์ฝ๋ (0) | 2023.03.13 |
[JS] ๋ฐ์ดํฐํ์ , data types, ๋ณ์ ์ ์ธ let vs var, hoisting (1) | 2023.03.12 |