DOM ë ¸ëì ëí´ ì¢ ë ììë´ ìë¤.
ì´ë² ì±í°ìì DOM ë ¸ëë 무ìì¸ì§, DOM ë ¸ëì 주ì íë¡í¼í°ë 무ìì´ ìëì§ íìµíê² ìµëë¤.
DOM ë ¸ë í´ëì¤
DOM ë
¸ëë ì¢
ë¥ì ë°ë¼ ê°ê° ë¤ë¥¸ íë¡í¼í°ë¥¼ ì§ìí©ëë¤. íê·¸ <a>ì ëìíë ìì ë
¸ëì ë§í¬ ê´ë ¨ë íë¡í¼í°ë¥¼, <input>ì ëìíë ìì ë
¸ëì ì
ë ¥ ê´ë ¨íë¡í¼í°ë¥¼ ì ê³µíì£ . í
ì¤í¸ ë
¸ëë ìì ë
¸ëì ë¤ë¥¸ íë¡í¼í°ë¥¼ ì§ìíë ê²ì ë§í íìë ììµëë¤. ê·¸ë°ë° 모ë DOM ë
¸ëë ê³µíµ ì¡°ìì¼ë¡ë¶í° ë§ë¤ì´ì§ê¸° ë문ì ë
¸ë ì¢
ë¥ë ë¤ë¥´ì§ë§, 모ë DOM ë
¸ëë ê³µíµë íë¡í¼í°ì ë©ìë를 ì§ìí©ëë¤.
DOM ë ¸ëë ì¢ ë¥ì ë°ë¼ ëìíë ë´ì¥ í´ëì¤ê° ë¤ë¦ ëë¤.
ê³ì¸µ 구조 ê¼ë기ì EventTargetì´ ìëë°, Nodeë EventTargetì, ë¤ë¥¸ DOM ë ¸ëë¤ì Node í´ëì¤ë¥¼ ììë°ìµëë¤.
ì´ë° ê´ê³ë¥¼ 그림ì¼ë¡ ëíë´ë©´ ë¤ìê³¼ ê°ìµëë¤.
ê° í´ëì¤ë ë¤ìê³¼ ê°ì í¹ì§ì ì§ëëë¤.
- EventTarget â 루í¸ì ìë âì¶ì(abstract)â í´ëì¤ë¡, ì´ í´ëì¤ì ëìíë ê°ì²´ë ì¤ì ë¡ ë§ë¤ì´ì§ì§ ììµëë¤. EventTargetê° ëª¨ë DOM ë ¸ëì ë² ì´ì¤ì ì기ë문ì DOM ë ¸ëìì 'ì´ë²¤í¸â를 ì¬ì©í ì ììµëë¤. ìì¸í ë´ì©ì ê³§ ë¤ë£° ìì ì ëë¤.
- Node â ìì âì¶ìâ í´ëì¤ë¡, DOM ë
¸ëì ë² ì´ì¤ ìí ì í©ëë¤. getter ìí ì íë
parentNode,nextSibling,childNodesë±ì 주ì í¸ë¦¬ íì 기ë¥ì ì ê³µí©ëë¤.Nodeí´ëì¤ì ê°ì²´ë ì ë ìì±ëì§ ììµëë¤. íì§ë§ ì´ í´ëì¤ë¥¼ ììë°ë í´ëì¤ë ì¬ë¿ ììµëë¤. í ì¤í¸ ë ¸ë를 ìíTextí´ëì¤ì ìì ë ¸ë를 ìíElementí´ëì¤, 주ì ë ¸ë를 ìíCommentí´ëì¤ëNodeí´ëì¤ë¥¼ ììë°ìµëë¤. - Element â DOM ìì를 ìí ë² ì´ì¤ í´ëì¤ì
ëë¤.
nextElementSibling,childrenì´ëgetElementsByTagName,querySelectorê°ì´ ìì ì ì© íìì ëì주ë íë¡í¼í°ë ë©ìëê° ì´ë¥¼ 기ë°ì¼ë¡ í©ëë¤. ë¸ë¼ì°ì ë HTMLë¿ë§ ìëë¼ XML, SVGë ì§ìíëë°Elementí´ëì¤ë ì´ì ê´ë ¨ëSVGElement,XMLElement,HTMLElementí´ëì¤ì ë² ì´ì¤ ìí ì í©ëë¤. - HTMLElement â HTML ìì ë
¸ëì ë² ì´ì¤ ìí ì íë í´ëì¤ì
ëë¤. ìë ëì´í í´ëì¤ë¤ì ì¤ì HTML ììì ëìíê³
HTMLElement를 ììë°ìµëë¤.- HTMLInputElement â
<input>ììì ëìíë í´ëì¤ - HTMLBodyElement â
<body>ììì ëìíë í´ëì¤ - HTMLAnchorElement â
<a>ììì ëìíë í´ëì¤ - ì´ì¸ìë ë¤ë¥¸ í´ëì¤ê° ë§ìë°, ê° íê·¸ì í´ë¹íë í´ëì¤ë ê³ ì í íë¡í¼í°ì ë©ìë를 ì§ìí©ëë¤.
- HTMLInputElement â
ì´ë ê² í¹ì ë ¸ëìì ì¬ì©í ì ìë íë¡í¼í°ì ë©ìëë ììì 기ë°ì¼ë¡ ê²°ì ë©ëë¤.
<input> ììì ëìíë DOM ê°ì²´ë¥¼ ìë¡ ë¤ì´ë´
ìë¤. ì´ ê°ì²´ë HTMLInputElement í´ëì¤ë¥¼ 기ë°ì¼ë¡ ë§ë¤ì´ì§ëë¤.
ê°ì²´ì ìëì ëì´í í´ëì¤ìì ììë°ì íë¡í¼í°ì ë©ìëê° ìì ê²ëë¤.
HTMLInputElementâ ì ë ¥ ê´ë ¨ íë¡í¼í°ë¥¼ ì ê³µíë í´ëì¤HTMLElementâ HTML ìì ë©ìëì getter, setter를 ì ê³µíë í´ëì¤Elementâ ìì ë ¸ë ë©ìë를 ì ê³µíë í´ëì¤Nodeâ ê³µíµ DOM ë ¸ë íë¡í¼í°ë¥¼ ì ê³µíë í´ëì¤EventTargetâ ì´ë²¤í¸ ê´ë ¨ 기ë¥ì ì ê³µíë í´ëì¤ObjectâhasOwnPropertyê°ì´ âì¼ë° ê°ì²´â ë©ìë를 ì ê³µíë í´ëì¤
ì°ë¦¬ë ìì ê°ì²´ë constructor íë¡í¼í°ë¥¼ ê°ì§ë¤ë 걸 ë°°ì´ ë° ììµëë¤. ì´ë° í¹ì§ì ì´ì©íë©´ DOM ë
¸ë í´ëì¤ ì´ë¦ì íì¸í ì ììµëë¤. constructor íë¡í¼í°ë í´ëì¤ ìì±ì를 참조íê³ ì´ë¦ì constructor.nameì ì ì¥ëì´ìë¤ë ì ì ì´ì©íë©´ ëì£ .
alert( document.body.constructor.name ); // HTMLBodyElement
toStringì ì¬ì©í´ë ë©ëë¤.
alert( document.body ); // [object HTMLBodyElement]
ìì ì¬ë¶ë instanceof를 ì¬ì©í´ íì¸í ì ììµëë¤.
alert( document.body instanceof HTMLBodyElement ); // true
alert( document.body instanceof HTMLElement ); // true
alert( document.body instanceof Element ); // true
alert( document.body instanceof Node ); // true
alert( document.body instanceof EventTarget ); // true
ì§ê¸ê¹ì§ ì´í´ë³¸ ë°ì ê°ì´ DOM ë ¸ëë íë¡í íì ì 기ë°ì¼ë¡ ìì ê´ê³ë¥¼ ê°ë ì¼ë° ìë°ì¤í¬ë¦½í¸ ê°ì²´ì ëë¤.
ë¸ë¼ì°ì ì½ìì console.dir(elem)를 ì
ë ¥íë©´ ì´ë° ê´ê³ë¥¼ ì½ê² íì¸í ì ììµëë¤. HTMLElement.prototype, Element.prototypeë±ì´ ì½ìì ì¶ë ¥ë ê²ëë¤.
console.dir(elem)ê³¼ console.log(elem)ì ì°¨ì´ë¸ë¼ì°ì ê°ë°ì ë구 ëë¶ë¶ì console.logì console.dir ëª
ë ¹ì´ë¥¼ ì§ìí©ëë¤. ì´ ëª
ë ¹ì´ë¤ì ì½ìì ì¸ì를 ì¶ë ¥í´ì¤ëë¤. ì¸ìê° ìë°ì¤í¬ë¦½í¸ ê°ì²´ë¼ë©´ ë ëª
ë ¹ì´ë ëê° ê°ì 결과를 ë³´ì¬ì¤ëë¤.
íì§ë§ ì¸ìê° DOM ììì¼ ëë ê²°ê³¼ê° ë¤ë¦ ëë¤.
console.log(elem)ë ììì DOM í¸ë¦¬ë¥¼ ì¶ë ¥í©ëë¤.console.dir(elem)ë ìì를 DOM ê°ì²´ì²ë¼ ì·¨ê¸íì¬ ì¶ë ¥í©ëë¤. ë°ë¼ì íë¡í¼í°ë¥¼ íì¸í기 ì½ë¤ë ì¥ì ì´ ììµëë¤.
document.body를 ì¸ìë¡ ë겨ì ê·¸ ì°¨ì´ë¥¼ ì§ì íì¸í´ë³´ì¸ì.
ëª ì¸ììì DOM í´ëì¤ë¥¼ ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©í´ ì¤ëª íì§ ììµëë¤. ëì Interface Description Language(IDL)를 ì´ì©í´ ì¤ëª í©ëë¤.
IDLìì 모ë íë¡í¼í° ìì íì
ì ë¶ì
ëë¤. DOMStringê³¼ boolean ê°ì íì
ì´ íë¡í¼í° ìì ë¶ì£ .
ëª ì¸ì ì¼ë¶ì 주ìì ë¬ìëìì¼ë í¨ê» ì´í´ë´ ìë¤.
// HTMLInputElement ì ì ìì
// ì½ë¡ (:)ì HTMLInputElementê° HTMLElementë¡ ë¶í° ììëìë¤ë ê²ì ì미í©ëë¤.
interface HTMLInputElement: HTMLElement {
// <input> ììì ê´ë ¨ë íë¡í¼í°ì ë©ìëê° ëì´ë기 ììí©ëë¤.
// 'DOMString'ì íë¡í¼í° ê°ì´ 문ìì´ì´ë¼ë ê²ì ì미í©ëë¤.
attribute DOMString accept;
attribute DOMString alt;
attribute DOMString autocomplete;
attribute DOMString value;
// ë¶ë¦° ê°(true/false)ì ê°ì§ë íë¡í¼í°
attribute boolean autofocus;
...
// 'void'ë ë©ìëì 리í´ê°ì´ ììì ì미í©ëë¤.
void select();
...
}
ânodeTypeâ íë¡í¼í°
nodeType íë¡í¼í°ë DOM ë
¸ëì 'íì
âì ììë´ê³ ì í ë ì°ì´ë 구ì íë¡í¼í°ì
ëë¤.
ê° ë ¸ë íì ì ìì«ê°ì ê°ì§ëë¤.
elem.nodeType == 1â ìì ë ¸ëelem.nodeType == 3â í ì¤í¸ ë ¸ëelem.nodeType == 9â 문ì ê°ì²´- 기í ë ¸ë íì ì ëí ê°ì ëª ì¸ììì íì¸í ì ììµëë¤.
ìì:
<body>
<script>
let elem = document.body;
// íì
ì ììë´
ìë¤.
alert(elem.nodeType); // 1 => ìì ë
¸ë
// 첫 ë²ì§¸ ìì ë
¸ë
alert(elem.firstChild.nodeType); // 3 => í
ì¤í¸ ë
¸ë
// 문ì ê°ì²´ì íì
íì¸
alert( document.nodeType ); // 9 => 문ì ê°ì²´
</script>
</body>
모ë ìë°ì¤í¬ë¦½í¸ìì ë
¸ëì íì
ì instanceofë í´ëì¤ ê¸°ë°ì í
ì¤í¸ë¥¼ ì´ì©í´ íì¸íëë°, ê°ëì nodeType를 ì°ë ê² ê°ë¨í ëë ììµëë¤. nodeTypeì íì
íì¸ íë ë°ë§ ì¸ ì ìê³ ë°ê¾¸ì§ë 못í©ëë¤.
nodeNameê³¼ tagNameì¼ë¡ íê·¸ ì´ë¦ íì¸í기
nodeNameì´ë tagName íë¡í¼í°ë¥¼ ì¬ì©íë©´ DOM ë
¸ëì íê·¸ ì´ë¦ì ììë¼ ì ììµëë¤.
ìì:
alert( document.body.nodeName ); // BODY
alert( document.body.tagName ); // BODY
ê·¸ë¼ tagNameê³¼ nodeNameì ì°¨ì´ë ìë 걸ê¹ì?
ë¬¼ë¡ ììµëë¤. 미ë¬íì§ë§ ì´ë¦ìì ê·¸ ì°¨ì´ë¥¼ ì ì¶í ì ìì£ .
tagNameíë¡í¼í°ëììë ¸ëìë§ ì¡´ì¬í©ëë¤.nodeNameì 모ëNodeì ììµëë¤.- ìì ë
¸ë를 ëìì¼ë¡ í¸ì¶íë©´
tagNameê³¼ ê°ì ìí ì í©ëë¤. - í ì¤í¸ ë ¸ë, 주ì ë ¸ë ë±ìì ë ¸ë íì ì ëíë´ë 문ìì´ì ë°íí©ëë¤.
- ìì ë
¸ë를 ëìì¼ë¡ í¸ì¶íë©´
nodeNameì 모ë ë
¸ëìì ì§ìëì§ë§, tagNameì Element í´ëì¤ë¡ë¶í° ì ëëì기 ë문ì ìì ë
¸ëììë§ ì§ìë©ëë¤.
documentì 주ì ë
¸ë를 ì¬ì©í´ tagNameê³¼ nodeNameì ì°¨ì´ì ì íì¸í´ ë´
ìë¤.
<body><!-- 주ì -->
<script>
// 주ì ë
¸ë를 ëìì¼ë¡ ë íë¡í¼í° ë¹êµ
alert( document.body.firstChild.tagName ); // undefined (ììê° ìë)
alert( document.body.firstChild.nodeName ); // #comment
// 문ì ë
¸ë를 ëìì¼ë¡ ë íë¡í¼í° ë¹êµ
alert( document.tagName ); // undefined (ììê° ìë)
alert( document.nodeName ); // #document
</script>
</body>
ìì ë
¸ëë§ ë¤ë£¨ê³ ìë¤ë©´ tagNameê³¼ nodeNameìë ì°¨ì´ê° ìì¼ë¯ë¡ ë ë¤ ì¬ì©í ì ììµëë¤.
ë¸ë¼ì°ì ìì HTMLê³¼ XMLì ì²ë¦¬íë 모ëë ë¤ë¦
ëë¤. ì¹íì´ì§ë ëê° HTML 모ëë¡ ì²ë¦¬ë©ëë¤. í¤ëê° Content-Type: application/xml+xhtmlì¸ XML 문ì를 ë°ì¼ë©´ XML 모ëë¡ ë¬¸ì를 ì²ë¦¬í©ëë¤.
HTML 모ëìì tagNameê³¼ nodeNameì´ ëª¨ë ë문ìë¡ ë³ê²½ë©ëë¤. <body> ì´ë <BoDy>ì´ë BODYê° ëì£ .
XML 모ëìì ì¼ì´ì¤ê° âê·¸ëë¡â ì ì§ë©ëë¤. XML 모ëë ìì¦ì ê±°ì ì¬ì©ëì§ ììµëë¤.
innerHTMLë¡ ë´ì© ì¡°ìí기
innerHTML íë¡í¼í°ë¥¼ ì¬ì©íë©´ ìì ìì HTMLì 문ìì´ ííë¡ ë°ìì¬ ì ììµëë¤.
ìì ì HTMLì ìì íë ê²ë ê°ë¥í©ëë¤. innerHTMLì íì´ì§ë¥¼ ìì íë ë° ì°ì´ë ê°ë ¥í ë°©ë²ì íëì ëë¤.
document.body ìì ë´ì©ì ì¶ë ¥íê³ ìì í ë°ê¾¸ë ìì를 ì´í´ë´
ìë¤.
<body>
<p>p íê·¸</p>
<div>div íê·¸</div>
<script>
alert( document.body.innerHTML ); // ë´ì© ì½ê¸°
document.body.innerHTML = 'ìë¡ì´ BODY!'; // êµì²´
</script>
</body>
문ë²ì´ í린 HTMLì ë£ì¼ë©´ ë¸ë¼ì°ì ê° ìëì¼ë¡ ê³ ì³ ì¤ëë¤.
<body>
<script>
document.body.innerHTML = '<b>test'; // ë«ë í그를 ìì
alert( document.body.innerHTML ); // <b>test</b> (ìëì¼ë¡ ìì ë¨)
</script>
</body>
innerHTMLì ì¬ì©í´ 문ìì <script> í그를 ì½ì
íë©´ í´ë¹ íê·¸ë HTMLì ì¼ë¶ê° ë긴 íì§ë§ ì¤íì ëì§ ììµëë¤.
âinnerHTML+=â ì¬ì© ì 주ìì
elem.innerHTML+="ì¶ê° html"ì ì¬ì©íë©´ ììì HTMLì ì¶ê°í ì ììµëë¤.
ìëì ê°ì´ ë§ì´ì£ .
chatDiv.innerHTML += "<div>ìë
íì¸ì<img src='smile.gif'/> !</div>";
chatDiv.innerHTML += "ì ì§ë´ì£ ?";
ê·¸ë°ë° 'innerHTML+='ì ì¶ê°ê° ìëë¼ ë´ì©ì ë®ì´ì°ê¸° ë문ì 주ìí´ì ì¬ì©í´ì¼ í©ëë¤.
기ì ì ì¼ë¡ ìë ë ì¤ì ì½ëë ëì¼í ìí ì í©ëë¤.
elem.innerHTML += "...";
// ì ì½ëë ìë ì½ëì ì¶ì½ ë²ì ì
ëë¤.
elem.innerHTML = elem.innerHTML + "..."
ì¦, innerHTML+=ë ìëì ê°ì ì¼ì í©ëë¤.
- 기존 ë´ì© ìì
- 기존 ë´ì©ê³¼ ìë¡ì´ ë´ì©ì í©ì¹ ìë¡ì´ ë´ì©ì ì
기존 ë´ì©ì´ 'ìì í ìì âë í ë°ë°ë¥ë¶í° ë¤ì ë´ì©ì´ ì°ì¬ì§ê¸° ë문ì ì´ë¯¸ì§ ë±ì 리ìì¤ ì ë¶ê° ë¤ì ë¡ë©ë©ëë¤.
chatDiv ììì chatDiv.innerHTML+="ì ì§ë´ì£ ?" ìì¤ì HTML ë´ì©ì´ ì¬ìì±ëê³ smile.gif ìì ë¤ì ë¡ë©ëë ê²ì´ì£ . ì´ëê°ì ì´ë° 리ìì¤ë¤ì ìºì±í´ ëìë¤ë©´ ì¢ìì ê±°ë¼ë ìê°ì´ ëë ìê°ì´ë¤ì. chatDivì í
ì¤í¸ì ì´ë¯¸ì§ê° ë§ì´ ììë¤ë©´ ë´ì©ì ë¤ì ë¶ë¬ì¬ ë ë²ë²
ìì´ ì기ë걸 ëì¼ë¡ íì¸íì¤ ì ìì ê²ëë¤.
ì´ ì¸ìë innerHTML+=ì ì¬ë¬ ë¶ìì©ì´ ììµëë¤. 기존ì ìë í
ì¤í¸ë¥¼ ë§ì°ì¤ë¡ ëëê·¸í ìí©ì´ë¼ë©´ ë´ì©ì ë¤ì ì¨ì¼ í기 ë문ì ëëê·¸ê° í´ì ë ê²ëë¤. <input> íê·¸ìì ì¬ì©ìê° ì
ë ¥í ê°ì´ ì¬ë¼ì§ê¸°ë íì£ . ë¶ìì© ì¬ë¡ë ë¤ìí©ëë¤.
innerHTML ë§ê³ HTMLì ì¶ê°íë ë°©ë²ì ì¬ì©íë©´ ì´ë° ë¶ìì© ìì´ ìíë HTMLì ì¶ê°í ì ìëë°, ì´ ë°©ë²ì ê³§ ë°°ì°ëë¡ íê² ìµëë¤.
outerHTMLë¡ ììì ì ì²´ HTML 보기
outerHTML íë¡í¼í°ì ìì ì ì²´ HTMLì´ ë´ê²¨ììµëë¤. outerHTMLì innerHTMLì ìì ì체를 ëí ê²ì´ë¼ê³ ìê°íìë©´ ë©ëë¤.
ìì를 ì´í´ë´ ìë¤.
<div id="elem">Hello <b>World</b></div>
<script>
alert(elem.outerHTML); // <div id="elem">Hello <b>World</b></div>
</script>
innerHTMLê³¼ ë¬ë¦¬ outerHTMLì ì¬ì©í´ì HTMLì ì¸ë ìì ìì²´ê° ë°ëì§ ììµëë¤. ëì outerHTMLì DOM ìì ìì를 êµì²´í©ëë¤.
ë¤, ëê° ì´ìíê² ë¤ë¦¬ì¤ ê²ëë¤. ì¤ì ë¡ë ì´ìíê³ ì. ê·¸ë´ ê²ì ììíê³ êµ¬ì²´ì ì¸ ìì를 ì¤ë¹í´ ëììµëë¤.
ì½ë를 ë³´ë©° ì´í´í´ ë´ ìë¤.
<div>Hello, world!</div>
<script>
let div = document.querySelector('div');
// div.outerHTML를 ì¬ì©í´ <p>...</p>ë¡ êµì²´
div.outerHTML = '<p>ìë¡ì´ ìì</p>'; // (*)
// ì´! divê° ê·¸ëë¡ë¤ì!
alert(div.outerHTML); // <div>Hello, world!</div> (**)
</script>
ëê° ì´ìí©ëë¤.
(*)ë¡ íìí ì¤ìì div를 <p>ìë¡ì´ ìì</p>ë¡ êµì²´í기 ë문ì ìì를 ì¤ííë©´ ìëí ëë¡ ë¬¸ì(DOM)ì <div>ê° ìë ìë¡ì´ ë´ì©ì´ ë³´ì
ëë¤. ê·¸ë°ë° (**)ìì 기존ì div를 ì¶ë ¥íë¤ì!
ì´ë° ê²°ê³¼ê° ëíë ì´ì ë outerHTMLì íë í ë¹ ì°ì°ì´ DOM ìì(outerHTML ì°ì°ì ëìì¼ë¡, ì ìììì ë³ì div)를 ìì íì§ ì기 ë문ì
ëë¤. í ë¹ ì°ì°ì ìì를 DOMìì ì ê±°íê³ ìë¡ì´ HTML ì¡°ê°ì ë£ìµëë¤.
ì¦, div.outerHTML=...ë ìëì ê°ì ì¼ì í©ëë¤.
- '문ìâìì
div를 ìì - ìë¡ì´ HTML ì¡°ê°ì¸
<p>A new element</p>ì ìì í ì긴 ê³µê°ì ì½ì divì ì¬ì í 기존 ê°ì´ ì ì¥ëì´ ìê³ ìë¡ì´ HTML ì¡°ê°ì ì´ëìë ì ì¥ëì´ìì§ ìì
outerHTMLì ì´ë° ëì ë°©ì ë문ì outerHTMLì ì¬ì©í ë ì¤ì í ì¬ì§ê° ë§ìµëë¤. div.outerHTMLì ìì í í divì ìë¡ì´ ë´ì©ì´ ë¤ì´ê°ë¤ê³ ì°©ê°íë©° ìì
íë ê²½ì°ê° ë§ì£ . ì 리íìë©´ ì´ë ìµëë¤. innerHTMLì div를 ìì íì§ë§ outerHTMLì div를 ìì íì§ ììµëë¤.
ê·¸ë 기 ë문ì elem.outerHTMLì 무ì¸ê°ë¥¼ ì¸ ëë elemì´ ìì ëì§ ìëë¤ë ì ì ê¼ ëª
ì¬íê³ ìì´ì¼ í©ëë¤. í ë¹ë°ì HTMLì elemì´ ìë ê³µê°ì ë¤ì´ê°ëë¤. ìë¡ê² ë§ë¤ì´ì§ ìì를 참조íë ¤ë©´ DOM 쿼리 ë©ìë를 ì¬ì©í©ìë¤.
nodeValue/dataë¡ í ì¤í¸ ë ¸ë ë´ì© ì¡°ìí기
innerHTML íë¡í¼í°ë ìì ë
¸ëìë§ ì¬ì©í ì ììµëë¤.
í
ì¤í¸ ë
¸ë ê°ì ë¤ë¥¸ íì
ì ë
¸ëìë innerHTMLê³¼ ì ì¬í ìí ì í´ì£¼ë íë¡í¼í°ì¸ nodeValueì data를 ì¬ì©í´ì¼ í©ëë¤. ì´ ë íë¡í¼í°ë ì주 ì ì¬íê³ , ì¤ë¬´ììë êµ¬ë¶ ìì´ ì°ê¸´ íì§ë§ ëª
ì¸ììì ìì ì°¨ì´ê° ì긴 í©ëë¤ë§ dataê° ì¢ ë 짧기 ë문ì ì¬ê¸°ì data를 ì¬ì©íê² ìµëë¤.
í ì¤í¸ ë ¸ëì 주ì ë ¸ëì ë´ì©ì ì½ë ìì를 ì¤íí´ ë´ ìë¤.
<body>
ìë
íì¸ì.
<!-- 주ì -->
<script>
let text = document.body.firstChild;
alert(text.data); // ìë
íì¸ì.
let comment = text.nextSibling;
alert(comment.data); // 주ì
</script>
</body>
ê·¸ë°ë° ì´ì¯¤ëë©´ ì´ë° ìë¬¸ì´ ë¤ ì ììµëë¤. í ì¤í¸ ë ¸ëì ë´ì©ì ì½ê±°ë ìì íë ì¼ì ì¼ì´ë ë² íë° ì£¼ì ë ¸ëë ì ì´ë° 기ë¥ì´ íìíê±´ì§ ë¼ë ì문ì´ì£ .
ê°ë°ìë¤ì ì¢ ì¢ ìëì ê°ì ë°©ìì¼ë¡ ì ë³´ë ì§ìì¬íì HTMLì ì½ì í©ëë¤.
<!-- if isAdmin -->
<div>ê´ë¦¬ìë¡ ë¡ê·¸ì¸íììµëë¤!</div>
<!-- /if -->
ì´ë´ ë data íë¡í¼í° 기ë¥ì ì¬ì©í´ 주ì ë
¸ëì ë´ì©ì ì½ê³ ì½ì
ë ì§ìì¬íì ì²ë¦¬íë©´ ì ì©í©ëë¤.
textContentë¡ ììí í ì¤í¸ë§
textContent를 ì¬ì©íë©´ ìì ë´ì í
ì¤í¸ì ì ê·¼í ì ììµëë¤. <íê·¸>ë ì ì¸íê³ ì¤ë¡ì§ í
ì¤í¸ë§ ì¶ì¶í ì ìì£ .
ìì:
<div id="news">
<h1>주ì ë´ì¤!</h1>
<p>íì±ì¸ì´ ì§êµ¬ë¥¼ 침공íììµëë¤!</p>
</div>
<script>
// 주ì ë´ì¤! íì±ì¸ì´ ì§êµ¬ë¥¼ 침공íììµëë¤!
alert(news.textContent);
</script>
ìì를 ì¤ííë©´ ìëë¶í° <íê·¸>ê° ììë ê²ì²ë¼ í
ì¤í¸ë§ ë°íëë ê²ì íì¸í ì ììµëë¤.
ê·¸ë°ë° ì¤ë¬´ìì í ì¤í¸ ì½ê¸°ë¥¼ ë¨ë ì¼ë¡ ì°ë ê²½ì°ë íì¹ ììµëë¤.
textContent를 ì¬ì©íë©´ í
ì¤í¸ë¥¼ 'ìì í ë°©ë²âì¼ë¡ ì¸ ì ì기 ë문ì ì¤ë¬´ìì textContent를 ì°ê¸° ì©ì¼ë¡ ì ì©íê² ì¬ì©í©ëë¤.
ì¬ì©ìê° ì ë ¥í ììì 문ìì´ì ë¤ì ì¶ë ¥í´ì£¼ë ê²½ì°ë¥¼ ìê°í´ ë´ ìë¤.
innerHTMLì ì¬ì©íë©´ ì¬ì©ìê° ì ë ¥í 문ìì´ì´ âHTML ííë¡â íê·¸ì í¨ê» ì ì¥ë©ëë¤.textContent를 ì¬ì©íë©´ ì¬ì©ìê° ì ë ¥í 문ìì´ì´ âìì í ì¤í¸ ííë¡â ì ì¥ë기 ë문ì í그를 구ì±íë í¹ì문ìë¤ì´ 문ìì´ë¡ ì²ë¦¬ë©ëë¤.
ë íë¡í¼í°ë¥¼ ë¹êµí´ë´ ìë¤.
<div id="elem1"></div>
<div id="elem2"></div>
<script>
let name = prompt("ì´ë¦ì ìë ¤ì£¼ì¸ì.", "<b>ì´ë³´ë¼</b>");
elem1.innerHTML = name;
elem2.textContent = name;
</script>
- 첫 ë²ì§¸
<div>ì ì´ë¦ì´ 'HTML ííâë¡ ì ì¥ë©ëë¤. ì ë ¥í íê·¸ë íê·¸ë¡ í´ìëì´ êµµì ê¸ì¨ê° ì¶ë ¥ëë¤ì. - ë ë²ì§¸
<div>ì ì´ë¦ì´ 'í ì¤í¸ ííâë¡ ì ì¥ë©ëë¤. ë°ë¼ì ì ë ¥í ê° ê·¸ëë¡<b>ì´ë³´ë¼</b>ê° ì¶ë ¥ëë ê²ì íì¸í ì ììµëë¤.
ê°ë°ì íë¤ë³´ë©´ ì¬ì©ìì ì
ë ¥ê°ì ë°ì ì²ë¦¬í´ì¼ íë ê²½ì°ê° ë§ìµëë¤. ì´ë ì¬ì©ìê° ì
ë ¥í ê°ì í
ì¤í¸ë¡ ì²ë¦¬ëì´ì¼ í©ëë¤. ììì¹ ëª»í HTMLì´ ì¬ì´í¸ì 침í¬íë ê²ì ë§ì¼ë ¤ë©´ textContent를 ì¬ì©í©ìë¤.
hidden íë¡í¼í°
hidden ìì±ê³¼ hidden íë¡í¼í°ë ìì를 ë³´ì¬ì¤ì§ ë§ì§ ì§ì í ë ì¬ì©í ì ììµëë¤.
hiddenì HTML ììì ì¸ ìë ìê³ ìë°ì¤í¬ë¦½í¸ììë ì¸ ì ììµëë¤.
<div>ìë ë div를 ì¨ê²¨ë´
ìë¤.</div>
<div hidden>HTMLì hidden ìì± ì¬ì©í기</div>
<div id="elem">ìë°ì¤í¬ë¦½í¸ì hidden íë¡í¼í° ì¬ì©í기</div>
<script>
elem.hidden = true;
</script>
hiddenì 기ì ì ì¼ë¡ style="display:none"ì ëì¼í©ëë¤. ì§§ë¤ë ì ë§ ë¤ë¥´ì£ .
hiddenì ì¬ì©í´ ìì를 ê¹ë¹¡ì´ê² í´ë´
ìë¤.
<div id="elem">ê¹ë¹¡ì´ë ìì</div>
<script>
setInterval(() => elem.hidden = !elem.hidden, 1000);
</script>
기í íë¡í¼í°
ì§ê¸ê¹ì§ ìê°í íë¡í¼í° ì¸ìë DOM ììì ë¤ìí íë¡í¼í°ê° ìëë°, í´ëì¤ë§ë¤ í¹ì§ì ì¸ íë¡í¼í° ëª ê°ì§ë¥¼ ìê°í´ëë¦¬ê² ìµëë¤.
valueâ<input>ê³¼<select>,<textarea>ì ê°ì´ ì ì¥ë©ëë¤. ëìíë í´ëì¤ëHTMLInputElement,HTMLSelectElementë±ì ëë¤.hrefâ<a href="...">ì href ìì± ê°ì´ ì ì¥ë©ëë¤. ëìíë í´ëì¤ëHTMLAnchorElementì ëë¤.idâ id ìì± ê°ì´ ì ì¥ë©ëë¤. 모ë ìì ë ¸ëìì ì¬ì©í ì ìì¼ë©°, ëìíë í´ëì¤ëHTMLElementì ëë¤.- 기í ë±ë±
ìì:
<input type="text" id="elem" value="value">
<script>
alert(elem.type); // "text"
alert(elem.id); // "elem"
alert(elem.value); // value
</script>
ëë¶ë¶ì íì¤ HTML ìì±ì ê·¸ì ëìíë DOM íë¡í¼í°ë¥¼ ê°ì§ê³ ìëë°, ì ììì ê°ì ë°©ìì¼ë¡ íë¡í¼í°ì ì ê·¼í ì ììµëë¤.
í¹ì í´ëì¤ìì ì§ìíë íë¡í¼í° ì 체를 ë³´ê³ ì¶ë¤ë©´ ëª
ì¸ì를 ì½ì´ë³´ë©´ ë©ëë¤. ì를 ë¤ì´ HTMLInputElementìì ì§ìíë íë¡í¼í° 목ë¡ì https://html.spec.whatwg.org/#htmlinputelementìì ì°¾ìë³¼ ì ììµëë¤.
ëª
ì¸ì를 ì½ì§ ìê³ ë ê°ë°ì ë구ì ì½ì ì°½ì console.dir(elem)를 ì
ë ¥íë©´ í´ë¹ ìììì ì§ìíë íë¡í¼í° 목ë¡ì ë¹ ë¥´ê² íì¸í ì ììµëë¤. ê°ë°ì ë구ì Elements í¨ëì íì í¨ë ì¤ 'Propertiesâ를 ì íí´ë ëì¼í 목ë¡ì íì¸í ì ììµëë¤.
ìì½
ê° DOM ë ¸ëë ê³ ì í í´ëì¤ì ìí©ëë¤. í´ëì¤ë¤ì ê³ì¸µ 구조를 íì±í©ëë¤. DOM ë ¸ëìì ì§ìíë íë¡í¼í°ì ë©ìëë ê³ì¸µ 구조ìì ì´ë¤ í´ëì¤ë¥¼ ììë°ëëì ë°ë¼ ê²°ì ë©ëë¤.
주ì DOM ë ¸ë íë¡í¼í°ë ë¤ìê³¼ ê°ìµëë¤.
nodeType- ìì íì
ì ìê³ ì¶ì ë ì¬ì©í©ëë¤. ìì ë
¸ëë¼ë©´
1ì, í ì¤í¸ ë ¸ëë¼ë©´3ì ë°íí©ëë¤. ë íì ì¸ìë ê° ë ¸ë íì ì ëìíë ìì«ê°ì´ ììµëë¤. ì½ê¸° ì ì©ì ëë¤. nodeName/tagName- ìì ë
¸ëì íê·¸ ì´ë¦ì ììë¼ ë ì¬ì©í©ëë¤. XML 모ëì¼ ë를 ì ì¸íê³ íê·¸ ì´ë¦ì íì ë문ìë¡ ë³íë©ëë¤. ìì ë
¸ëê° ìë ë
¸ëìë
nodeNameì ì¬ì©íë©´ ë©ëë¤. ì½ê¸° ì ì©ì ëë¤. innerHTML- ìì ìì HTMLì ììë¼ ì ììµëë¤. ì´ íë¡í¼í°ë¥¼ ì¬ì©íë©´ ìì ìì HTMLì ìì í ìë ììµëë¤.
outerHTML- ììì ì ì²´ HTMLì ììë¼ ì ììµëë¤.
elem.outerHTMLì 무ì¸ê°ë¥¼ í ë¹í´ëelemìì²´ë ë°ëì§ ììµëë¤. ëì ìë¡ì´ HTMLì´ ì¸ë¶ 컨í ì¤í¸ìì ë§ë¤ì´ì§ê³ ,elemì´ ìì ë ì리를 ì±ìëë¤. nodeValue/data- ììê° ìë ë
¸ë(í
ì¤í¸, 주ì ë
¸ë ë±)ì ë´ì©ì ì½ì ë ì°ì
ëë¤. ë íë¡í¼í°ë ê±°ì ëì¼íê² ëìí©ëë¤. 주ë¡
data를 ë§ì´ ì¬ì©íë í¸ì´ë©° ë´ì©ì ìì í ëë ì´ íë¡í¼í°ë¥¼ ì¸ ì ììµëë¤. textContent- HTMLìì 모ë
<íê·¸>를 ì ì¸í í ì¤í¸ë§ ì½ì ë ì¬ì©í©ëë¤. í ë¹ ì°ì°ì íµí´ 무ì¸ê°ë¥¼ ì¸ ìë ìëë° ì´ë í그를 í¬í¨í 모ë í¹ì문ìë 문ìì´ë¡ ì²ë¦¬ë©ëë¤. ì¬ì©ìê° ì ë ¥í 문ì를 ìì í ë°©ë²ì¼ë¡ ì²ë¦¬í기 ë문ì ìì¹ ìë HTMLì´ ì¬ì´í¸ì ì½ì ëë ê²ì ìë°©í ì ììµëë¤. hiddentrueë¡ ì¤ì íë©´ CSSììdisplay:noneì ì¤ì í ê²ê³¼ ëì¼íê² ëìí©ëë¤.
DOM ë
¸ëë í´ëì¤ì ë°ë¼ ì´ ì¸ìë ë¤ë¥¸ íë¡í¼í°ë¥¼ ê°ì§ëë¤. <input> ìì(HTMLInputElement)ë value, type íë¡í¼í°ë¥¼, <a> ìì(HTMLAnchorElement)ë href íë¡í¼í°ë¥¼ ì§ìíë ê² ê°ì´ ë§ì´ì£ . ëë¶ë¶ì íì¤ HTML ìì±ì ëìíë DOM íë¡í¼í°ë¥¼ ê°ì§ëë¤.
ê·¸ë°ë° HTML ììì DOM íë¡í¼í°ê° íì ê°ì ê²ì ìëëë¤. ê´ë ¨ ë´ì©ì ë¤ì ì±í°ìì ì´í´ë³´ëë¡ íê² ìµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.