DOM (Document Object Model)
DOM์ XML์ด๋ HTML ๋ฌธ์์ ์ ๊ทผํ๊ธฐ ์ํ ์ผ์ข
์ ์ธํฐํ์ด์ค๋ค.
๋ฌธ์์ ๊ตฌ์กฐํ๋ ํํ์ ์ ๊ณตํด์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ DOM ๊ตฌ์กฐ์ ์ ๊ทผํด ๋ฌธ์์ ์ปจํ
์ธ ๋ฐ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ ์คํ์ผ์ ์ฝ๊ณ ์กฐ์ํ ์ ์๋๋ก API๋ฅผ ์ ๊ณตํ๋ค.
์ฆ, ์ด๋ฅผ ํตํด ์นํ์ด์ง๋ฅผ ์คํฌ๋ฆฝํธ ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์์ ์ฌ์ฉ๋ ์ ์๊ฒ ์ฐ๊ฒฐ ์์ผ์ฃผ๋ ์ญํ ์ด๋ค.
์น ํ์ด์ง ๋ง๋๋ ๊ณผ์
โข
๋ธ๋ผ์ฐ์ ๊ฐ HTML ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ ์ต์ข
์ ์ผ๋ก ์ด๋ค ๋ด์ฉ์ ํ์ด์ง์ ๋ ๋๋งํ ์ง ๊ฒฐ์ โ ๋ ํฐ ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค.
โฆ
๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด DOM ์ด ํ์ํ๋ค
โข
๋ ๋ ํธ๋ฆฌ๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง ์ํ
ํ์ฑ์ด๋? ํ
์คํธ ๋ฌธ์์ ๋ฌธ์์ด์ ํ ํฐ์ผ๋ก ๋ถํดํ๊ณ , ๋ฌธ๋ฒ์ ์๋ฏธ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํด์ Parse Tree๋ฅผ ์์ฑํ๋ ๊ณผ์
ํ ํฐ์ด๋? ๋ฌธ๋ฒ์ ์ผ๋ก ์๋ฏธ๊ฐ ์๋ ์ต์ ๋จ์
๋ ๋๋ง์ด๋? HTML , CSS ๋ก ์์ฑ๋ ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์๊ฐ์ ์ผ๋ก ์ถ๋ ฅํ๋ ๊ฒ
DOM์ ๊ตฌ์กฐ
โข
DOM์ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ๋จ์ ํ
์คํธ๋ก ๊ตฌ์ฑ๋ HTML ๋ฌธ์์ ๋ด์ฉ๊ณผ ๊ตฌ์กฐ๊ฐ ๊ฐ์ฒด ๋ชจ๋ธ๋ก ๋ณํ๋์ด ๋ค์ํ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
โข
DOM์ ๊ฐ์ฒด ๊ตฌ์กฐ๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ก ํํ๋๋ค,
โข
<HTML> ์ ๋ฃจํธ, ๊ทธ ์์ Tag ๋ค์ผ ์์, ํ๊ทธ ์์ ์ปจํ
์ธ ๋ ์์ ํด๋นํ๋ค.
โข
์ด๋ฅผ ํตํด, ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ์ธ์ด๋ฅผ ์ด์ฉํด์ DOM์ ์ ๊ทผํด ์์ ํ ์ ์๋ค.
DOM์ ๊ตฌ์ฑ์์
โข
document node (๋ฌธ์ ๋
ธ๋)
โฆ
DOM ํธ๋ฆฌ์์ ์ต์์ ๋ฃจํธ ๋
ธ๋์ด๊ณ , document ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
โฆ
window.document , document ๋ก ์ฐธ์กฐํด ์ฌ์ฉ ๊ฐ๋ฅ
โฆ
HTML ๋ฌธ์์ 1๊ฐ๋ง ์กด์ฌ
โข
element node (์์ ๋
ธ๋)
โฆ
๋ชจ๋ ํ๊ทธ๋ค์ด ์์ ๋
ธ๋์ด๋ค.
โฆ
์์ฑ ๋
ธ๋๋ฅผ ๊ฐ์ง ์ ์๋ ์ ์ผ ๋
ธ๋
โข
attribute node (์์ฑ ๋
ธ๋)
โฆ
element node์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
โฆ
๋ถ๋ชจ ๋
ธ๋๊ฐ ์๋ ํด๋น ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ค.
โข
text node (ํ
์คํธ ๋
ธ๋)
โฆ
์ ๋ณด๋ฅผ ๋ํ๋ด๋ ๋
ธ๋ (๋ฆฌํ๋
ธ๋๋ผ๊ณ ๋ ํ๋ค)
DOM๊ณผ HTML์ด ๊ฐ์๊น?
Nope!
์ฐจ์ด์
โข
ํญ์ ์ ํจํ HTML ํ์์ด๋ค.
โข
javascript ๋ก ์์ ๋ ์ ์๋ ๋์ ๋ชจ๋ธ์ด๋ค.
โข
๊ฐ์ ์์๋ฅผ ํฌํจํ์ง ์๋๋ค
โข
๋ณด์ด์ง ์๋ ์์๋ฅผ ํฌํจํ๋ค
*๊ฐ์ ์์๋ ์ ํํ ์์์ ์ผ๋ถ์๋ง ์คํ์ผ์ ์ ์ฉํ๋ ๊ฒ ::before, ::after ์ ๋งํ๋ค.
*display: none ์์ฑ์ ์์๋ DOM์ ํฌํจ๋์ง ์๊ณ , visibility: hidden ์์ฑ์ ์์๋ ๋ณด์ด์ง ์์ง๋ง DOM์๋ ํฌํจ๋๋ค.
DOM์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
โข
๋จ์ ๊ฐ์ฒด ์ ๊ทผ : getElementByxx(), querySelector() ์ฌ์ฉ
โข
๋ณต์ ๊ฐ์ฒด ์ ๊ทผ : getElements(), querySelectorAll() ์ฌ์ฉ
1๊ฐ์ DOM ์์๋ Tagname, ID, Classname, CSSSelector ๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ค.
// TagName์ผ๋ก ์ฐพ๊ธฐ
document.getElementsByTagName('input')
// ID๋ก ์ฐพ๊ธฐ
document.getElementsById('search')
// ClassName์ผ๋ก ์ฐพ๊ธฐ
document.getElementsByClassName('search-input-style')
// CSSSeletor๋ก ์ฐพ๊ธฐ
document.querySelector('.search-input-style')
JavaScript
๋ณต์ฌ
์ฃผ์ DataTypes
document | member*๊ฐ document type์ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ ๋, ์ด ๊ฐ์ฒด๋ root document object ์์ฒด์ด๋ค. ์๋ฅผ ๋ค์ด `document.getElementById("myP").ownerDocument` ๋ ํด๋น ํ๋กํผํฐ*๊ฐ ์ํด ์๋ document๋ฅผ ๋ฆฌํดํ๋ค. |
element | element๋ DOM API์ member์ ์ํด ๋ฆฌํด๋ element ๋๋ element type์ node๋ฅผ ์๋ฏธํ๋ค. ์ฆ, `document.createElement()` ๋ฉ์๋*๊ฐ DOM์์์ ์์ฑ๋๋ element๋ฅผ ๋ฆฌํดํ๋ค๊ณ ํ ์ ์๋ค. |
nodeList | nodeList๋ element์ ๋ฐฐ์ด์ด๋ค. `document.getElementsByTagName()`์ ๋ฆฌํด๊ฐ๋ nodeList ํํ์ด๋ค. nodeList์ item์ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅํ๋ค. |
attribute | attribute๊ฐ member์ ์ํด ๋ฆฌํด๋๋ ๊ฒ์ attribute์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ๋
ธ์ถํ๋ Object reference์ด๋ค. ์ฝ๊ฒ ๋งํ๋ฉด attribute๋ element์ ๊ฐ์ ๋
ธ๋์ด๋ค. `createAttribute()`๋ฅผ ์ฌ์ฉํด ์์ฑ |
namedNodeMap | nameNodeMap์ ๋ฐฐ์ด๊ณผ ์ ์ฌํ์ง๋ง ๊ฐ item์ name์ด๋ ์ธ๋ฑ์ค์ ์ํด ์ ๊ทผํ ์ ์๋ค. nameNodeMap์ item() ๋ฉ์๋๊ฐ ์๊ณ , item์ ์ถ๊ฐ/์ญ์ ํ ์ ์๋ค. |
*๋ฉค๋ฒ(member)๋ ํ๋กํผํฐ ํน์ ๋ฉ์๋๋ฅผ ๋งํ๋ค.
*ํ๋กํผํฐ(property)๋ DOM ๊ฐ์ฒด์ ๋ฉค๋ฒ ๋ณ์์ด๊ณ , HTML ํ๊ทธ์ ์์ฑ์ ๋ฐ์ํ๋ค.
*๋ฉ์๋๋ DOM ๊ฐ์ฒด๊ฐ ๊ฐ๋ ๋ฉค๋ฒ ํจ์๋ก, HTML ํ๊ทธ๋ฅผ ์ ์ดํ๋ค.
window.document ์ node.ownerDocument ๋ ์ผ๋ฐ์ ์ธ ์ํฉ์์๋ ๋์ผํ document ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ ๊ฒ์ด๋ค. ํ์ง๋ง ์์ธ์ ์ธ ์ํฉ๋ ์กด์ฌํ๋ค.
๋ํ์ ์ผ๋ก iframe(inline frame) ์ ์ด์ฉํด ๋ค๋ฅธ URL ๋ฑ์ ์ธ๋ถ HTML ๋ด์ฉ์ ๋ณด์ฌ์ค ์ ์๋ค. ์ด๋ iframe ๋ด๋ถ์์ window.document๋ iframe์ ๊ฐ์ง๊ณ ์๋ ๋ถ๋ชจ document๋ฅผ, node.ownerDocument๋ iframe์ด ํ์ํ๋ ๋ด๋ถ document๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
DOM ์ฌ์ฉ์์(JS)
<script type="text/javascirpt">
window.onload = function() {
var header = document.createElement('p');
var textNode = document.createTextNode('์ด๊ฒ์ด DOM์ด๋ค.');
header.appendChild(textNode);
document.body.appendChild(header);
};
</script>
HTML
๋ณต์ฌ
1.
document ๊ฐ์ฒด์ ์ ๊ทผํด์ p ํ๊ทธ๋ฅผ ์์ฑ
2.
document ๊ฐ์ฒด์ ๋ค์ ์ ๊ทผํด์ TextNode๋ฅผ ์์ฑ ํ, String์ ์ฝ์
3.
appendChild ๋ฉ์๋๋ก textNode๋ฅผ ์์๋
ธ๋๋ก ์ถ๊ฐ
4.
document ๊ฐ์ฒด์ ์๋ body ํ๊ทธ์ header๋ฅผ ์์๋
ธ๋๋ก ์ถ๊ฐ
์๋ฐ์คํฌ๋ฆฝํธ์ DOM์ ์๋ฐํ ๋ค๋ฅธ ๊ฐ๋
์ด๋ค. ๋ค๋ฅธ ์ธ์ด๋ก๋ DOM์ ๋ค๋ฃฐ ์ ์๋ค.
์น ๋ธ๋ผ์ฐ์ ์์์ DOM์ ์กฐ์ํ๋ ์ธ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฟ์ด๋ฏ๋ก ์ฃผ์ ์ฌ์ฉ๋๋ ๊ฒ์ด๋ค.
์ธํฐํ์ด์ค์ ๊ฐ์ฒด ํํ
DOM์ ๋ง์ ๊ฐ์ฒด๋ค์ ์ฌ๋ฌ๊ฐ์ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ค๊ณผ ์ฐ๊ด๋์ด ์๋ค.
์๋ฅผ ๋ค์ด, table ๊ฐ์ฒด๋ ์ฌ๋ฌ ๋ฉ์๋๋ค์ด ํฌํจ๋ HTMLTableElement ๋ฅผ ๊ตฌํํจ๊ณผ ๋์์ HTML Element ์ด๊ธฐ๋ ํ๊ธฐ ๋๋ฌธ์, Element ์ธํฐํ์ด์ค๋ ๊ตฌํํ๋ค.
DOM์ ํต์ฌ ์ธํฐํ์ด์ค
โข
document.getElementById(id)
โข
document.getElementByTagName(name)
โข
document.createElement(name)
โข
parentNode.appendChild(node)
โข
element.innerHTML
โข
element.setAttribute
โข
element.getAttribute