DOM(Document Object Model)์ Document ์ฆ, HTML์์๋ฅผ ๊ฐ์ฒด(Object)์ฒ๋ผ ์กฐ์ํ ์ ์๋ ๋ชจ๋ธ(Model)์ ๋๋ค. DOM์ด ์์ผ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ HTML๊ณผ ์์ธ์คํ ์ ์์ต๋๋ค. DOM์ ์ด์ฉํ๋ฉด HTML์ ๋ถ๋ถ๋ค์ ์ ๊ทผํ์ฌ ๋์ ์ผ๋ก ์์ง์ด๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
script
ํ๊ทธ๋ฅผ ์ด์ฉํด HTMLํ์ผ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ถ๋ฌ์ต๋๋ค. ์น ๋ธ๋ผ์ฐ์ ๊ฐ <script>
์์๋ฅผ ๋ง๋๋ฉด, HTML ํด์์ ์ ์ ๋ฉ์ถ๊ณ <script>
์์๋ฅผ ๋จผ์ ์คํํฉ๋๋ค. (script์์๋ ๋ฑ์ฅ๊ณผ ํจ๊ป ์คํ๋ฉ๋๋ค.) (HTMLํ์ฑ ๋ฌธ์ ์ฐธ๊ณ )
HTML ๋ฌธ์๋ฅผ ์ฝ์ด๋ค์ด๊ณ ์คํ์ผ์ ์
ํ๊ณ ํ์ด์ง๋ก ๋ง๋ค์ด ๋ทฐํฌํธ์ ํ์ํ๋ ๊ณผ์ ์ critical Rendering Path๋ผ๊ณ ํฉ๋๋ค.
document๊ฐ์ฒด์ ๊ตฌํ๋ฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์์ ์๋๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์๋ ์ด๋์์๋ ์กฐํํ ์ ์๋ค.
์๋ณธ HTML ๋ฌธ์์ ๊ฐ์ฒด ๊ธฐ๋ฐ ํํ ๋ฐฉ์์ ๋๋ค. ๋จ์ ํ ์คํธ๋ก ๊ตฌ์ฑ๋ HTML ๋ฌธ์์ ๋ด์ฉ๊ณผ ๊ตฌ์กฐ๊ฐ ๊ฐ์ฒด ๋ชจ๋ธ๋ก ๋ณํ๋์ด ๋ค์ํ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ DOM์ ๊ฐ์ฒด๊ตฌ์กฐ๋ ๋ ธ๋ํธ๋ฆฌ๋ก ํํ๋ฉ๋๋ค.
DOM ์ ํญ์ ์ ํจํ HTML ํ์์ด๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ๋ ์ ์๋ ๋์ ๋ชจ๋ธ์ด์ด์ผ ํฉ๋๋ค.
๐ DOM์ด ์๋ ๊ฒ
- HTML : HTML ๋ฌธ์๋ก๋ถํฐ ์์ฑ๋์ง๋ง ํญ์ ๋์ผํ์ง ์์ต๋๋ค.
- ์์ฑ๋ HTML๋ฌธ์๊ฐ ์ ํจํ์ง ์์ ๋ DOM์ ์์ฑํ๋ ๋์ ๋ธ๋ผ์ฐ์ ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๊ต์ ํฉ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํด DOM์ด ์์ ๋ ์ ์์ต๋๋ค. DOM์ ์ ๋ฐ์ดํธ ํ์ง๋ง HTML ๋ฌธ์์ ๋ด์ฉ์ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
- DOM์ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ด๋ ๊ฒ์ด ์๋๋๋ค.
- ๋ธ๋ผ์ฐ์ ๋ทฐ ํฌํธ์ ๋ณด์ด๋ ๊ฒ์ ๋ ๋ํธ๋ฆฌ๋ก DOM + CSSOM์ ์กฐํฉ์ ๋๋ค. ๋ ๋ํธ๋ฆฌ๋ ์ค์ง ์คํฌ๋ฆฐ์ ๊ทธ๋ ค์ง๋ ๊ฒ์ผ๋ก DOM๊ณผ ๋ค๋ฆ ๋๋ค. ์ฆ, ๋ ๋๋ง ์์๋ง ๊ด๋ จ์์ผ๋ฏ๋ก ์๊ฐ์ ์ผ๋ก ๋ณด์ด์ง ์๋ ์์๋ ์ ์ธ๋ฉ๋๋ค.
- DOM์ ๊ฐ๋ฐ๋๊ตฌ์์ ๋ณด์ด์ง ์์ต๋๋ค.
- ๊ฐ๋ฐ๋๊ตฌ์ ์์๊ฒ์ฌ๊ธฐ๋ DOM๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ทผ์ฌ์น๋ฅผ ์ ๊ณตํ์ง๋ง, DOM์ ์๋ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค. ์์ปจ๋ CSS์
::before
๊ณผ::after
์ ํ์๋ฅผ ์ฌ์ฉํด ์์ฑ๋ ๊ฐ์ ์์๋ CSSOM๊ณผ ๋ ๋ํธ๋ฆฌ์ ์ผ๋ถ๋ฅผ ๊ตฌ์ฑํ์ง๋ง ๊ธฐ์ ์ ์ผ๋ก DOM์ ์์๋ ์๋๋๋ค. DOM์ ์ค์ง ์๋ณธ HTML ๋ฌธ์๋ก ๋น๋๋๊ณ , ์์์ ์ ์ฉ๋๋ ์คํ์ผ์ ํฌํจํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.- DOM ์ HTML ๋ฌธ์์ ๋ํ ์ธํฐํ์ด์ค๋ก, ๋ทฐ ํฌํธ์ ๋ฌด์์ ๋ ๋๋งํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๊ณ , ํ์ด์ง์ ์ฝํ ์ธ ๋ฐ ๊ตฌ์กฐ, ์คํ์ผ์ด ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ ์ํด ์์ ๋๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
API : Web of XML Page -> DOM + JavaScript
console.dir
์ ์ฌ์ฉํด DOM๊ตฌ์กฐ๋ฅผ ์กฐํํฉ๋๋ค. DOM์ ๊ฐ์ฒด์ ๋ชจ์ต์ผ๋ก ์ถ๋ ฅํฉ๋๋ค. ์กฐํ์ HTML ์๋ฆฌ๋จผํธ์ ์ง์ ํ ์ ์์๋ ๋ค์ํ ์์ฑ์ด ์ด๋ฏธ ๊ฐ์ฒด ๋ด์ ์กด์ฌํ์ฌ ๋ง์ ์์ฑ์ด ๋ํ๋ฉ๋๋ค.
์์์์๋ฅผ ๋ฐ๋ก ์กฐํํ๋ ค๋ฉด document.body.chidren
์ผ๋ก ์กฐํํ ์ ์์ต๋๋ค.
๋ถ๋ชจ์์๋ฅผ ์กฐํํ๋ ค๋ฉด console.dir(์์์์.parentElement)
๋ก ์กฐํํ ์ ์์ต๋๋ค.
Element.closest()
๊ธฐ์ค ์์๋ถํฐ closest() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ถ๋ชจ์์ ๋จ์๋ก ์ถ๋ฐํด ๊ฐ ์์๊ฐ ์ง์ ํ ์ ํ์์ ๋ง์กฑํ ๋๊น์ง ํ์ํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ๊ฐ๊น๊ฒ ์กฐ๊ฑด์ ๋ง์กฑํ ๋ถ๋ชจ์์๊ฐ ๋ฐํ๋๋ฉฐ, ์กฐ๊ฑด์ ๋ง์กฑํ ์์๊ฐ ์์ผ๋ฉดnull
๊ฐ์ ๋ฐํํฉ๋๋ค.
document.createElement('div') // <div></div> ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
//์๋ฐ์คํฌ๋ฆฝํธ๋ก DOM์ ์กฐ์ํ๊ธฐ ์ํด, ๋ณ์์ ํ ๋นํฉ๋๋ค.
const ๋ณ์๋ช
= document.cerateElement('div')
//์์ฑํ ๋ณ์๋ฅผ ํธ๋ฆฌ๊ตฌ์กฐ์ ์ฐ๊ฒฐํฉ๋๋ค. ๋ง์ง๋ง ์์ ๋ค์ ์ฝ์
ํฉ๋๋ค.
document.body.append(๋ณ์๋ช
)
const ๋ณ์๋ช
= document.querySelector(์
๋ ํฐ)
//์
๋ ํฐ ๋ด์ ํด๋์ค๋ ์์ด๋๋ฅผ ๋ฃ์ด HTML์์๋ฅผ ์กฐํํฉ๋๋ค.
const ๋ณ์๋ช
= document.querySelectorAll(์
๋ ํฐ)
//์ฌ๋ฌ๊ฐ์ ์์๋ฅผ ํ๋ฒ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด์ ์ฌ์ฉํฉ๋๋ค.
const ๋ณ์๋ช
= document.createElement('div') // div์์๋ฅผ ์์ฑํฉ๋๋ค.
๋ณ์๋ช
.textContent = '๋ฌธ์' // <div>๋ฌธ์</div>
๋ณ์๋ช
.classList.add('CSS class๋ช
') //CSS์ ์ ์ฉํฉ๋๋ค.
const ๋ถ๋ชจ์์๋ช
= document.querySelector('๋ถ๋ชจ์์ ์
๋ ํฐ') //์์์์๋ก ์ถ๊ฐํด์ฃผ๊ธฐ ์ํด ๋จผ์ ๋ถ๋ชจ์์๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
๋ถ๋ชจ์์๋ช
.append(๋ณ์๋ช
) // ๋ถ๋ชจ์์ ๋ฐ์ ์์์์๋ก ์ถ๊ฐํด์ค๋๋ค.
โ
setAttribute(name, value)
์ง์ ๋ ์์์ ์์ฑ ๊ฐ์ ์ค์ ํฉ๋๋ค. ์์ฑ์ด ์ด๋ฏธ ์์ผ๋ฉด ๊ฐ์ด ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ง์ ๋ ์ด๋ฆ๊ณผ ๊ฐ์ผ๋ก ์ ์์ฑ์ด ์ถ๊ฐ๋ฉ๋๋ค.
์์ฑ์ ํ์ฌ๊ฐ์ ์ป์ผ๋ ค๋ฉดgetAttribute()
, ์ ๊ฑฐํ๋ ค๋ฉดremoveAttribute()
๋ฅผ ํธ์ถํฉ๋๋ค.
(์์)๋ณ์๋ช
.remove()
innerHTML
์ ์ด์ฉํฉ๋๋ค. ๊ฐํธํ๊ณ ํธ๋ฆฌํ์ง๋ง ์ฌ์ดํธ์ ๊ณต๊ฒฉ๋ฒกํฐ๊ฐ ๋์ด ์ ์ฌ์ ์ธ ๋ณด์ ์ํ์ ์ด๋ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.document.querySelector('๋ถ๋ชจ์์๋ช
').innerHTML = '' ; //๋ถ๋ชจ์์ ์๋ ๋ชจ๋ ์์์์๋ฅผ ์ง์๋๋ค.
while(๋ถ๋ชจ์์๋ช
.firstChild) {
๋ถ๋ชจ์์๋ช
.removeChild(๋ถ๋ชจ์์๋ช
.firstChild);
} // ๋ถ๋ชจ์์ ์์ ์ฒซ๋ฒ์จฐ ์์์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
while(๋ถ๋ชจ์์๋ช
.children.length > 1) {
๋ถ๋ชจ์์๋ช
. removeChild(๋ถ๋ชจ์์๋ช
.lastChild);
} // ๋ถ๋ชจ์์ ์์ ์์์์๊ฐ ํ๊ฐ๋ง ๋จ์ ๋๊น์ง ๋ง์ง๋ง ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
const ๋ณ์๋ช
= document.querySelectorAll ('.ํด๋์ค๋ช
') //'ํด๋์ค๋ช
'์ ๊ฐ์ง ๋ชจ๋ ์์๋ค์ ๋ถ๋ฌ์ต๋๋ค.
๋ณ์๋ช
.forEach(function(ํด๋์ค๋ช
) {
ํด๋์ค๋ช
.remove();
})
// OR
for(let ํด๋์ค๋ช
of ๋ณ์๋ช
) {
ํด๋์ค๋ช
.remove()
}