Document Object Model
xml, html์ ์ธํฐํ์ด์ค๋ก ๊ตฌ์กฐํ๋ ํํ์ ์ ๊ณตํ์ฌ ์ฐ๋ฆฌ๋ DOM์ ํตํด ์นํ์ด์ง์ ์ปจํ
์ธ , ๊ตฌ์กฐ, ์คํ์ผ์ ์ฝ๊ณ ์กฐ์ํ ์ ์๋ค. nodes์ objects๋ก ๋ฌธ์๋ฅผ ํํํ๊ณ ์น ํ์ด์ง๋ฅผ ์คํฌ๋ฆฝํธ ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์์ ์ฌ์ฉ๋ ์ ์๊ฒ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ญ์ ํ๋ค. ๋ฐ๋ผ์ DOM์ ๊ฐ์ฒด ๊ตฌ์กฐ๋ '๋
ธ๋ ํธ๋ฆฌ' ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค. HTML๋ก ๊ตฌ์ฑ๋ ์น ํ์ด์ง๋ฅผ ๋์ , ์ ์ ์ผ๋ก ๊ตฌ๋ ๊ฐ๋ฅํ๋ค.
HTML ์์(๋ฐฐ์ด์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ(๋ฐฐ์ด ์๋ ๋ฐฐ์ด, ์ ์ฌ๋ฐฐ์ด, ๋ฐฐ์ดํ ๊ฐ์ฒด = Array-like Object))
<script>
: ๋ฑ์ฅ๊ณผ ํจ๊ป ์คํ
document.querySelector(selectors)
document.querySelectorAll(selectors)
document.getElementById(id)
document.getElementByTagName(name)
document.createElement(name)
node.append(node)
node.appendChild(node)
node.remove(node)
node.removeChild(node)
element.innerHTML
node.textContent
element.setAttribute(name, value)
element.getAttribute(name)
element.addEventListener(type, listener)
innerText | innerHTML | textContent |
---|---|---|
'element' ์์ ๋ณด์ฌ์ง๋ text ๊ฐ | 'element' ์์ HTML์ด๋ XML | 'node'๊ฐ ๊ฐ์ง๊ณ ์๋ text ๊ฐ |
<div id="helloWorld">
hello World
<span style="display:none">์จ๊ฒจ์ง ํ
์คํธ</span>
</div>
<input type='button'
value='innerHTML'
onclick='getInnerHTML()'/>
<input type='button'
value='innerText'
onclick='getInnerText()'/>
<input type='button'
value='textContent'
onclick='getTextContent()'/>
const element = document.querySelector('helloWorld');
function getInnerHTML(){console.log(element.innerHTML);}
//hello World
//<span style="display:none">์จ๊ฒจ์ง ํ
์คํธ</span>
function getInnerText(){console.log(element.innerText);}
//hello World
function getTextContent(){console.log(element.textContent);}
//hello World
//์จ๊ฒจ์ง ํ
์คํธ
JavaSciprt ์์ด ๋
๋ฆฝ์ ์ผ๋ก DOM ์ธํฐํ์ด์ค ๊ตฌํ๋ง์ผ๋ก๋ DOM์ ์กฐ์ํ ์ ์๋ค.
API = DOM + JavaScript
DOM๊ณผ JavaScript ์ฐจ์ด ์์๋ณด๊ธฐ
DOM์ node์ ๊ณ์ธต ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ ๋
ธ๋๋ ๋ถ๋ชจ์ children์ ๊ฐ์ง ์ ์๋ค.HTML์ ์๋ tag (<html>
, <p>
์ ๊ฐ์...)๋ค์ node๋ฅผ ํํํ๊ฒ ๋๋ค. ์ฌ๊ธฐ์ ๊ทธ์ tag, text, ์ฃผ์์ด๋๋ผ๋ node๊ฐ ๋๋ค๋ ์ ์ด๋ค.
๋ฐ๋ฉด element ๋ node ์ ํ ์ข
๋ฅ๋ก text, ์ฃผ์์ ์ ์ธํ tag ๋ก ํํ๋ ๋
ธ๋๋ฅผ ๋งํ๋ค.
childNodes ๋ ์ฃผ์ด์ง ์์์ ์์ ๋
ธ๋ ๋ชจ์( collection )์ ๋ฐํํ์ฌ ๊ณต๋ฐฑ, ์ฃผ์, tag, text ๋ฅผ ํฌํจํ๋ค.
childresn ์ ์ฃผ์ด์ง ์์์ ์์ html ์๋ฆฌ๋จผํธ ๋ชจ์๋ง ( collection )์ ๋ฐํํ๋ค.
//์ค๋ฐ๊ฟ ํ์ง ์์ ๊ฒฝ์ฐ
<div class="test"><!-- Hello!! --><p>Hello World</p> This is text</div>
//์ค๋ฐ๊ฟ ํ ๊ฒฝ์ฐ
<div class="test">
<!-- Hello!! -->
<p>Hello World</p>
This is text
</div>
const test = document.querySelector(".test");
console.log(test.childNodes);
console.log(text.children);
//childNods >
//์ค๋ฐ๊ฟ ํ์ง ์์ ๊ฒฝ์ฐ
//NodeList(3) = [comment(์ฃผ์), p, text]
//์ค๋ฐ๊ฟ ํ ๊ฒฝ์ฐ
//NodeList(5) = [text(๊ณต๋ฐฑ),comment,text(๊ณต๋ฐฑ), p, text]
//children >
//HTMLCollection [p]
remove๋ ๋ ธ๋๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ํ๊ณ ์ข ๋ฃํ์ฌ ์ ๊ฑฐ๋ ์๋ฆฌ๋จผํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ GC(Garbage Collection)์ ์ํด ๊ณง ๋ฉ๋ชจ๋ฆฌ์์ ์ง์์ง๋ค.
removeChild๋ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด ์๋๋ผ, ๋ฉ๋ชจ๋ฆฌ์ ํด๋น ๋ ธ๋๋ ๊ทธ๋๋ก ์กด์ฌํ๋ฉฐ, ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๋์ด DOM ํธ๋ฆฌ์์ ํด์ ํ๋ ๊ฒ์ด๋ค. ์ต์ข ์ ์ผ๋ก ๊ด๊ณ๋ฅผ ๋์ ํด๋น ๋ ธ๋์ ์ฐธ์กฐ๋ฅผ ๋ฐํํ๋ค. ๋ฐํ๊ฐ์ ์ฌ์ฌ์ฉ ์ฌ๋ถ์ ๋ฐ๋ผ์ GC์ ์ํด ์ ์ ํ ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ๋๊ฑฐ๋ ๋ฐํ๋ ๋ ธ๋ ์ฐธ์กฐ๋ฅผ ๋ณ์์ ๋ด์ ๋ค๋ฅธ DOM ์์น์ ๋ถ์ผ ์๋ ์๋ค.
// 1. ๋ฐํ ๊ฐ์ ๋ณ์์ ์ ์ฅํ์ง ์์ DOM์์ ์ ๊ฑฐ๋๊ณ ๋ฉ๋ชจ๋ฆฌ์์๋ ๊ณง ์ง์์ง๋ค.
node.removeChild(child);
// 2. ๋ฐํ ๊ฐ์ ๋ณ์์ ์ ์ฅํ์ฌ DOM์์ ์ ๊ฑฐ๋์ง๋ง ๋ค์ ๋ถ๋ฌ์ฌ ์ ์๋ค.
let removed = node.removeChild(child);
// document.body.prepend(removed);์ ํํ๋ก ๋ค์ DOM์ ๋ถ์ผ ์ ์๋ค.
document.body.prepend(removed);
append ๋ ์์์ ๋ ธ๋ ๊ฐ์ฒด ๋๋ DOM๋ฌธ์์ด์ ์์ ์์๋ก ์ถ๊ฐํ ์ ์์ง๋ง, appendChild ๋ ๋ ธ๋ ๊ฐ์ฒด๋ง์ ์ถ๊ฐํ ์ ์๊ณ , ์ถ๊ฐํ ์์ ๋ ธ๋๋ฅผ ๋ฐํ๊ฐ์ผ๋ก ๊ฐ์ง๋ค.
append ๋ ์ปจํ
์ธ ๋ฅผ ์ ํ๋ ์์ ๋ด๋ถ์ ๋ ๋ถ๋ถ์์ ์ฝ์
prepend ๋ ์ฝํ
์ธ ๋ฅผ ์ ํํ ์์ ๋ด๋ถ์ ์์ ๋ถ๋ถ์์ ์ฝ์
after ๋ ์ ํํ ์์ ๋ค์ ์ปจํ
์ธ ์ฝ์
before ๋ ์ ํ๋ ์์ ์์ ์ปจํ
์ธ ์ฝ์
// <p> ์๋ณธ </p>
// p.append('์๋ณธ ๋ค'); // <p> ์๋ณธ ์๋ณธ ๋ค </p>
// p.prepend('์๋ณธ ์'); // <p> ์๋ณธ ์ ์๋ณธ </p>
// p.after('๋ค'); // <p> ์๋ณธ </p> ๋ค
// p.before('์'); // ์ <p> ์๋ณธ </p>