âìëê° ìëâ ì¹íì´ì§ë¥¼ ë§ë¤ê¸° ìí íµì¬ì DOM ì¡°ìì ììµëë¤.
ì´ë² ì±í°ìì ì ìì ìì를 ìë¡ê² ìì±íë ë°©ë²ê³¼ íì´ì§ì ìë 기존 ì½í ì¸ ë¥¼ ì´ë»ê² ìì í ì ìëì§ ììë³´ê² ìµëë¤.
ìì : ë©ìì§ ë³´ì¬ì£¼ê¸°
alert ì°½ë³´ë¤ ë³´ê¸° ì¢ì ë©ìì§ ì°½ì ì¶ë ¥í´ì£¼ë ìì를 ì´í´ë³´ê² ìµëë¤.
ìì:
<style>
.alert {
padding: 15px;
border: 1px solid #d6e9c6;
border-radius: 4px;
color: #3c763d;
background-color: #dff0d8;
}
</style>
<div class="alert">
<strong>ìë
íì¸ì!</strong> ì¤ì ë©ìì§ë¥¼ íì¸íì
¨ìµëë¤.
</div>
ì ìììì HTMLì ì¬ì©í´ ë©ìì§ ì°½ì ë§ë¤ììµëë¤. ì´ë²ì ê°ì ì°½ì ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©í´ ë§ë¤ì´ë´ ìë¤. ì¤íì¼ì HTMLì´ë ì¸ë¶ CSS íì¼ì ì ì¥ëì´ ìë¤ê³ ê°ì íê² ìµëë¤.
ìì ìì±í기
DOM ë ¸ë를 ë§ë¤ë ì¬ì©íë ë©ìëë ë ê°ì§ì ëë¤.
document.createElement(tag)-
íê·¸ ì´ë¦(
tag)ì ì¬ì©í´ ìë¡ì´ ìì ë ¸ë를 ë§ë¦let div = document.createElement('div'); document.createTextNode(text)-
주ì´ì§ í ì¤í¸(
text)를 ì¬ì©í´ ìë¡ì´ í ì¤í¸ ë ¸ë를 ë§ë¦let textNode = document.createTextNode('ìë íì¸ì.');
ê°ë°ì í ë ì ìì(ë©ìì§ê° ë¤ì´ê°ë div)ì²ë¼ ì£¼ë¡ ìì ë
¸ë를 ë§ë¤ê² ë©ëë¤.
ë©ìì§ ìì±í기
ë©ìì§ê° ë¤ì´ê° divë ì¸ ë¨ê³ë¡ ë§ë¤ ì ììµëë¤.
// 1. <div> ìì ë§ë¤ê¸°
let div = document.createElement('div');
// 2. ë§ë ììì í´ëì¤ë¥¼ 'alert'ë¡ ì¤ì
div.className = "alert";
// 3. ë´ì© ì±ìë£ê¸°
div.innerHTML = "<strong>ìë
íì¸ì!</strong> ì¤ì ë©ìì§ë¥¼ íì¸íì
¨ìµëë¤.";
ì´ë ê² ì¸ ë¨ê³ë¥¼ ê±°ì¹ë©´ ììê° ë§ë¤ì´ì§ëë¤. ê·¸ë°ë° ìì를 ë§ë¤ê¸´ íì§ë§, ìì§ ì´ ììë divë¼ë ì´ë¦ì ê°ì§ ë³ìì ë¶ê³¼í기 ë문ì íì´ì§ì ëíëì§ ììµëë¤.
ì½ì ë©ìë
divê° íì´ì§ì ëíëê² íë ¤ë©´ document ë´ ì´ëê°ì div를 ë£ì´ì¤ì¼ í©ëë¤. document.bodyë¡ ì°¸ì¡°í ì ìë <body>ì ê°ì ê³³ì ë§ì´ì£ .
ìì ì½ì
ë©ìë append를 ì¬ì©í ì½ë document.body.append(div)를 ì¬ì©í´ ì§ì ìë¡ê² ë§ë ìì ë
¸ë를 íì´ì§ì ëíëëë¡ í´ë´
ìë¤.
ì ì²´ ì½ëë ë¤ìê³¼ ê°ìµëë¤.
<style>
.alert {
padding: 15px;
border: 1px solid #d6e9c6;
border-radius: 4px;
color: #3c763d;
background-color: #dff0d8;
}
</style>
<script>
let div = document.createElement('div');
div.className = "alert";
div.innerHTML = "<strong>ìë
íì¸ì!</strong> ì¤ì ë©ìì§ë¥¼ íì¸íì
¨ìµëë¤.";
document.body.append(div);
</script>
ì¬ê¸°ìë document.bodyìì append를 í¸ì¶íì§ë§ ë¤ë¥¸ ìììë append ë©ìë를 í¸ì¶í´ ìì를 ë£ì ì ììµëë¤. div.append(anotherElement)를 í¸ì¶í´ <div>ì 무ì¸ê°ë¥¼ ì¶ê°íë ê²ì²ë¼ ë§ì´ì£ .
ìë°ì¤í¬ë¦½í¸ìì ì§ìíë ë ¸ë ì½ì ë©ìëë ë¤ìê³¼ ê°ìµëë¤. ì ì í ë©ìë를 ì ííë©´ ì§ì ì½ì ìì¹ë¥¼ ì§ì í ì ììµëë¤.
node.append(ë ¸ëë 문ìì´)â ë ¸ëë 문ìì´ìnodeëì ì½ì í©ëë¤.node.prepend(ë ¸ëë 문ìì´)â ë ¸ëë 문ìì´ìnode맨 ìì ì½ì í©ëë¤.node.before(ë ¸ëë 문ìì´)â- ë ¸ëë 문ìì´ìnodeì´ì ì ì½ì í©ëë¤.node.after(ë ¸ëë 문ìì´)â- ë ¸ëë 문ìì´ìnodeë¤ìì ì½ì í©ëë¤.node.replaceWith(ë ¸ëë 문ìì´)â-node를 ìë¡ì´ ë ¸ëë 문ìì´ë¡ ëì²´í©ëë¤.
ì½ì ë©ìëì ììì ë ¸ë 목ë¡ì´ë 문ìì´ì ëê²¨ì¤ ì ììµëë¤. 문ìì´ì ë겨주면 ìëì¼ë¡ í ì¤í¸ ë ¸ëê° ë§ë¤ì´ì§ëë¤.
ìì를 ì´í´ë´ ìë¤.
ì¤í¬ë¦½í¸ê° ì¤íëë©´ 0, 1, 2ì ëíì¬ ìë¡ì´ ê¸ìë¤ì´ íë©´ì ì¶ê°ë©ëë¤.
<ol id="ol">
<li>0</li>
<li>1</li>
<li>2</li>
</ol>
<script>
ol.before('before'); // <ol> ìì 문ìì´ 'before'를 ì½ì
í¨
ol.after('after'); // <ol> ë¤ì 문ìì´ 'after를 ì½ì
í¨
let liFirst = document.createElement('li');
liFirst.innerHTML = 'prepend';
ol.prepend(liFirst); // <ol>ì 첫 í목ì¼ë¡ liFirst를 ì½ì
í¨
let liLast = document.createElement('li');
liLast.innerHTML = 'append';
ol.append(liLast); // <ol>ì ë§ì§ë§ í목ì¼ë¡ liLast를 ì½ì
í¨
</script>
ì ìììì ì¬ì©ë ê° ë©ìëë¤ì ìí ì 그림ì¼ë¡ íííë©´ ë¤ìê³¼ ê°ìµëë¤.
ìµì¢ ê²°ê³¼ë ë¤ìê³¼ ê°ìì§ ê²ëë¤.
before
<ol id="ol">
<li>prepend</li>
<li>0</li>
<li>1</li>
<li>2</li>
<li>append</li>
</ol>
after
ìì ì¸ê¸í긴 íì§ë§, ì´ ë©ìëë¤ì ì¬ì©íë©´ 'ë³µìâì ë ¸ëì 문ìì´ì í ë²ì ë£ì ìë ììµëë¤.
문ìì´ê³¼ ìì를 í ë²ì ì½ì íë ìì를 ì´í´ë´ ìë¤.
<div id="div"></div>
<script>
div.before('<p>ìë
íì¸ì</p>', document.createElement('hr'));
</script>
ì½ì
ë©ìëì 문ìì´ì ë겨 í
ì¤í¸ ë
¸ë를 ë§ë¤ ë ì¸ìë¡ ë긴 문ìì´ì´ 'HTMLâì´ ìë â문ìì´â ê·¸ ííë¡ ì½ì
ëë¤ë ì ì 주ìí´ì¼ í©ëë¤. <ë >ê°ì í¹ì문ìë ì´ì¤ì¼ì´í ì²ë¦¬ë©ëë¤.
ë°ë¼ì ìµì¢ HTMLì ë¤ìê³¼ ê°ìµëë¤.
<p>ìë
íì¸ì</p>
<hr>
<div id="div"></div>
ì½ì
ë©ìë를 ì¬ì©íë©´ 문ìì´ì elem.textContent를 ì¬ì©í ê²ì²ë¼ ìì í ë°©ë²ì¼ë¡ ì½ì
ëë ê²ì´ì£ .
ë°ë¼ì ë ¸ë ì½ì ë©ìëë DOM ë ¸ëë 문ìì´ì ì½ì í ëë§ ì¬ì©í ì ììµëë¤.
ê·¸ë°ë° ë§ì½ elem.innerHTMLì ì¬ì©í ê²ì²ë¼ íê·¸ê° ì ìì ì¼ë¡ ëìí ì ìê² ë¬¸ìì´ ííì 'HTML ê·¸ ìì²´â를 ì½ì
íê³ ì¶ë¤ë©´ ì´ë»ê² í´ì¼ í ê¹ì?
insertAdjacentHTML/Text/Element
ë ë¤ë¥¸ ë¤ì¬ë¤ë¥í ë©ìë elem.insertAdjacentHTML(where, html)를 ì¬ì©íë©´ ê°ë¥í©ëë¤.
elem.insertAdjacentHTML(where, html)ìì 첫 ë²ì§¸ 매ê°ë³ìë elemì 기ì¤ì¼ë¡ íë ìë ìì¹ë¡, ë¤ì ê° ì¤ íëì¬ì¼ í©ëë¤.
'beforebegin'âelemë°ë¡ ììhtmlì ì½ì í©ëë¤.'afterbegin'âelemì 첫 ë²ì§¸ ìì ìì ë°ë¡ ììhtmlì ì½ì í©ëë¤.'beforeend'âelemì ë§ì§ë§ ìì ìì ë°ë¡ ë¤ììhtmlì ì½ì í©ëë¤.'afterend'âelemë°ë¡ ë¤ììhtmlì ì½ì í©ëë¤.
ë ë²ì§¸ 매ê°ë³ìë HTML 문ìì´ë¡, ì´ HTMLì ì´ì¤ì¼ì´í ì²ë¦¬ëì§ ìê³ âê·¸ëë¡â ì½ì ë©ëë¤.
ìì:
<div id="div"></div>
<script>
div.insertAdjacentHTML('beforebegin', '<p>ìë
íì¸ì.</p>');
div.insertAdjacentHTML('afterend', '<p>ìë
í ê°ì¸ì.</p>');
</script>
ìµì¢ HTMLì ë¤ìê³¼ ê°ìµëë¤.
<p>ìë
íì¸ì.</p>
<div id="div"></div>
<p>ìë
í ê°ì¸ì.</p>
ììì HTMLì íì´ì§ì ì½ì í ë ì´ ë°©ë²ì ì¬ì©íë©´ ë©ëë¤.
ìëë 매ê°ë³ìì ë°ë¼ ì½ì ìì¹ê° ì´ë»ê² ë³íëì§ë¥¼ ííí 그림ì ëë¤.
ì´ ê·¸ë¦¼ê³¼ ì쪽 ê·¸ë¦¼ì´ ê½¤ ì ì¬íê² ìê²¼ë¤ì. HTMLì ì½ì íë¤ë ì ë§ ë¤ë¥´ê³ , ì½ì ì§ì ì ì íí ê°ë¤ë ê²ì ê´ì°°í ì ììµëë¤.
elem.insertAdjacentHTML(where, html)ì ë ê°ì§ íì ë©ìëê° ììµëë¤.
elem.insertAdjacentText(where, text)âinsertAdjacentHTMLê³¼ 문ë²ì ê°ìë°, HTML ëìtext를 â문ì ê·¸ëë¡â ì½ì íë¤ë ì ì´ ë¤ë¦ ëë¤.elem.insertAdjacentElement(where, elem)â ìì ê°ì 문ë²ì¸ë°, ìì를 ì½ì íë¤ë ì ì´ ë¤ë¦ ëë¤.
insertAdjacentTextê³¼ insertAdjacentElementë ë©ìë 구ìì ê°ì¶ë ¤ë 목ì ì¼ë¡ ë§ë¤ì´ì¡ìµëë¤. ììë 문ì ë
¸ë를 ì½ì
í ë append/prepend/before/afterë©ìë를 ì¬ì©íë©´ ëë¯ë¡ ì¤ë¬´ìì ëë¶ë¶ insertAdjacentHTMLì ì¬ì©í©ëë¤. ìì ì½ì
ë©ìë를 ì¬ì©íë©´ ì½ë 길ì´ê° ì¤ì´ë¤ê³ , ë
¸ëë í
ì¤í¸ ì¡°ê°ì ì½ê² ì½ì
í ì ììµëë¤.
ìë¡ê² ë°°ì´ ë©ìë insertAdjacentHTML를 ì¬ì©í´ ë©ìì§ ì°½ ìì를 ë¤ì ìì±íë©´ ë¤ìê³¼ ê°ìµëë¤.
<style>
.alert {
padding: 15px;
border: 1px solid #d6e9c6;
border-radius: 4px;
color: #3c763d;
background-color: #dff0d8;
}
</style>
<script>
document.body.insertAdjacentHTML("afterbegin", `<div class="alert">
<strong>ìë
íì¸ì!</strong> ì¤ì ë©ìì§ë¥¼ íì¸íì
¨ìµëë¤.
</div>`);
</script>
ë ¸ë ìì í기
node.remove() ì¬ì©íë©´ ë
¸ë를 ìì í ì ììµëë¤.
ì¼ ì´ í ë©ìì§ê° ì¬ë¼ì§ê² í´ë´ ìë¤.
<style>
.alert {
padding: 15px;
border: 1px solid #d6e9c6;
border-radius: 4px;
color: #3c763d;
background-color: #dff0d8;
}
</style>
<script>
let div = document.createElement('div');
div.className = "alert";
div.innerHTML = "<strong>ìë
íì¸ì!</strong> ì¤ì ë©ìì§ë¥¼ íì¸íì
¨ìµëë¤.";
document.body.append(div);
setTimeout(() => div.remove(), 1000);
</script>
ì°¸ê³ ë¡, ìì ë ¸ë를 ë¤ë¥¸ ê³³ì¼ë¡ ì®ê¸¸ ë 기존ì ìë ë ¸ë를 ì§ì¸ íìê° ììµëë¤.
모ë ë ¸ë ì½ì ë©ìëë ìëì¼ë¡ 기존ì ìë ë ¸ë를 ìì íê³ ìë¡ì´ ê³³ì¼ë¡ ë ¸ë를 ì®ê¸°ê¸° ë문ì ëë¤.
ìì ìì¹ë¥¼ ë°ê¾¸ë ìì를 ì´í´ë´ ìë¤.
<div id="first">First</div>
<div id="second">Second</div>
<script>
// remove ë©ìë를 í¸ì¶í íìê° ììµëë¤.
second.after(first); // idê° secondì¸ ë
¸ë를 ê°ì ¸ì¤ê³ , í´ë¹ ë
¸ëì ë¤ì idê° firstì¸ ë
¸ë를 ì½ì
</script>
cloneNodeë¡ ë ¸ë ë³µì í기
ì ìììì 기존 ë©ìì§ ì°½ê³¼ ì ì¬í ë©ìì§ ì°½ì íë ë ëìë¬ë¼ë ì구ì¬íì´ ì¶ê°ëìë¤ê³ ê°ì í´ë´ ìë¤.
'ë©ìì§ ì°½ì ë§ë¤ì´ì£¼ë í¨ì를 íë ë§ë¤ë©´ ëì§ ììê¹?'ë¼ë ìê°ì´ ë ì¤ë¥¼ ê²ëë¤. ê·¸ë°ë° ì´ ë°©ë² ë§ê³ ë 기존ì ë§ë¤ì´ ë¨ë div를 ë³µì íê³ (íìíë¤ë©´) ìì ìë í
ì¤í¸ë¥¼ ìì íë ë°©ë²ë ê°ë¥í©ëë¤.
ë³µì íë ¤ë ììê° í´ ëë í¨ì를 ë§ëë ëì ë³µì 를 ì¬ì©íë ë°©ë²ì´ ë¹ ë¥´ê³ ê°ë¨í ì ììµëë¤.
elem.cloneNode(true)ì í¸ì¶íë©´elemì âê¹ìâ ë³µì ë³¸ì´ ë§ë¤ì´ì§ëë¤. ìì± ì ë¶ì ìì ìì ì ë¶ê° ë³µì¬ë©ëë¤.elem.cloneNode(false)ì í¸ì¶íë©´ íì ë ¸ë ë³µì¬ ìì´elemë§ ë³µì ë©ëë¤.
cloneNode를 ì´ì©í´ ë©ìì§ ì°½ì íë ë ëìë´
ìë¤.
<style>
.alert {
padding: 15px;
border: 1px solid #d6e9c6;
border-radius: 4px;
color: #3c763d;
background-color: #dff0d8;
}
</style>
<div class="alert" id="div">
<strong>ìë
íì¸ì!</strong> ì¤ì ë©ìì§ë¥¼ íì¸íì
¨ìµëë¤.
</div>
<script>
let div2 = div.cloneNode(true); // ë©ìì§ ì°½ ë³µì
div2.querySelector('strong').innerHTML = 'ìë
í ê°ì¸ì!'; // ë³µì í ë©ìì§ ì°½ ë´ì© ìì
div.after(div2); // ë³µì í ë©ìì§ ì°½ì 기존 ë©ìì§ ì°½ ë¤ìì ë³´ì¬ì¤
</script>
DocumentFragment
DocumentFragmentë í¹ë³í DOM ë
¸ë íì
ì¼ë¡, ì¬ë¬ ë
¸ëë¡ êµ¬ì±ë 그룹ì ê°ì¸ ë¤ë¥¸ ê³³ì¼ë¡ ì ë¬íê² í´ì£¼ë ëí¼(wrapper)ì²ë¼ ëìí©ëë¤.
문ìì ìë ë¤ë¥¸ ë
¸ë를 DocumentFragmentì ì¶ê°í ì ìëë°, DocumentFragment를 문ì ì´ëê°ì ì½ì
íë©´ DocumentFragmentë ì¬ë¼ì§ê³ DocumentFragmentì ì¶ê°í ë
¸ëë§ ë¨ìµëë¤.
ìì를 ì´í´ë´
ìë¤. ìë í¨ì getListContentë <li> ë
¸ëë¡ êµ¬ì±ë fragment를 ë§ë¤ì´ ì¤ëë¤. ì´ fragment를 <ul>ì ì¶ê°í´ ë³´ê² ìµëë¤.
<ul id="ul"></ul>
<script>
function getListContent() {
let fragment = new DocumentFragment();
for(let i=1; i<=3; i++) {
let li = document.createElement('li');
li.append(i);
fragment.append(li);
}
return fragment;
}
ul.append(getListContent()); // (*)
</script>
(*)ë¡ íìí ì¤ìì <ul>ì DocumentFragment를 ì¶ê°íìµëë¤. ì¶ê°í fragmentë 문ìì âë
¹ìë¤ì기â ë문ì ìµì¢
결과물ì ìëì ê°ìì§ëë¤.
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
DocumentFragment를 ì§ì ì¬ì©í ì¼ì íì§ ììµëë¤. ìë ììì²ë¼ ë
¸ëê° ë´ê¸´ ë°°ì´ì ì§ì ë§ë¤ì´ ë°íí ì ì기 ë문ì
ëë¤.
<ul id="ul"></ul>
<script>
function getListContent() {
let result = [];
for(let i=1; i<=3; i++) {
let li = document.createElement('li');
li.append(i);
result.push(li);
}
return result;
}
ul.append(...getListContent()); // append ë©ìëì ...(ì ê° êµ¬ë¬¸)ì ê¶í©ì´ ì ë§ìµëë¤.
</script>
ì¬ê¸°ì DocumentFragment를 ì¸ê¸í ì´ì ë template ììê°ì´ DocumentFragment를 기ë°ì¼ë¡íë 문ë²ì´ ì기 ë문ì
ëë¤. template ììë ì¶í ë¤ë£¨ëë¡ íê² ìµëë¤.
구ì ì½ì ·ìì ë©ìë
íì í¸íì±ì ì ì§í기 ìí´ ë¨ììë â구ì(old school)â DOM ì¡°ì ë©ìëë ììµëë¤.
ì주 ì¤ëì ì ë§ë¤ì´ì§ ì´ ë©ìëë¤ì ìì¦ìë ì ì¬ì©íì§ ììµëë¤. ìì ë°°ì´ ëª¨ëí ë©ìë append, prepend, before, after, remove, replaceWith를 ì¬ì©íë ê²ì´ ì¢ ë ì ì°í기 ë문ì
ëë¤.
ê·¸ë¼ìë ë¶êµ¬íê³ êµ¬ì ë©ìë를 ìê°í´ë리ë ì´ì ë ìì±ë ì§ ì¤ëë ì¤í¬ë¦½í¸ìì ì´ë° ë©ìëë¤ì ë°ê²¬í ì ì기 ë문ì ëë¤.
parentElem.appendChild(node)-
parentElemì ë§ì§ë§ ììì¼ë¡node를 ì¶ê°í¨ìë ìì를 ì¤ííë©´ ìë¡ì´
<li>ê°<ol>ë§ì§ë§ì ì¶ê°ë©ëë¤.<ol id="list"> <li>0</li> <li>1</li> <li>2</li> </ol> <script> let newLi = document.createElement('li'); newLi.innerHTML = 'Hello, world!'; list.appendChild(newLi); </script> parentElem.insertBefore(node, nextSibling)-
node를parentElemììnextSiblingìì ì¶ê°í¨ìë ìì를 ì¤ííë©´ ìë¡ì´
<li>ê° ë ë²ì§¸<li>ìì ì¶ê°ë©ëë¤.<ol id="list"> <li>0</li> <li>1</li> <li>2</li> </ol> <script> let newLi = document.createElement('li'); newLi.innerHTML = 'Hello, world!'; list.insertBefore(newLi, list.children[1]); </script>newLi를 첫 ë²ì§¸ í목ì¼ë¡ ì¶ê°íê³ ì¶ë¤ë©´ ìëì ê°ì´firstChild를 ì¬ì©íë©´ ë©ëë¤.list.insertBefore(newLi, list.firstChild); parentElem.replaceChild(node, oldChild)-
parentElemì ìì ë ¸ë ì¤oldChild를nodeë¡ êµì²´í¨ parentElem.removeChild(node)-
nodeê°parentElemì ìì ë ¸ëë¼ë ê°ì íìparentElemììnode를 ìì í¨ìë ìì를 ì¤ííë©´
<ol>ìì 첫 ë²ì§¸<li>ê° ì¬ë¼ì§ëë¤.<ol id="list"> <li>0</li> <li>1</li> <li>2</li> </ol> <script> let li = list.firstElementChild; list.removeChild(li); </script>
ì´ ë©ìëë¤ì 모ë ì½ì
íê±°ë ìì í ë
¸ë를 ë°íí©ëë¤. parentElem.appendChild(node)ë node를 ë°ííì£ . ê·¸ë°ë° ë°íë ê°ì ì¬ì©í ì¼ì´ ê±°ì ì기 ë문ì ë©ìë를 ê·¸ë¥ ì¤íë§ íë í¸ì
ëë¤.
'document.writeâì ëí 첨ì¸
document.writeë ì¹íì´ì§ì ëê°ë¥¼ ëí ë ì°ë ì주 ì¤ëë ë©ìëì
ëë¤.
ì¬ì©ë²ì ë¤ìê³¼ ê°ìµëë¤.
<p>íì´ì§ ì´ëê°...</p>
<script>
document.write('<b>ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©í´ Hello ì
ë ¥</b>');
</script>
<p>ë</p>
document.write(html)를 í¸ì¶íë©´ htmlì´ íì´ì§ âê·¸ ì리ì ì¦ìâ ì¶ê°ë©ëë¤. html íìì 문ìì´ì ëì ì¼ë¡ ë§ë¤ì´ ì¬ì©í ì ì기 ë문ì document.write(html)ë 꽤ë ì ì°í©ëë¤. ë ê°ë¥¼ ë¨ ìì²ë¼ ëì ì¸ ì¹íì´ì§ë¥¼ ë§ëëë° ì´ ë©ìë를 ì¬ì©í ì ìì£ .
document.writeë DOMë ìê³ ê·¸ ì´ë¤ íì¤ë ì¡´ì¬íì§ ììë 과거ì ë§ë¤ì´ì¡ìµëë¤. íì¤ì ì ìë ë©ìëë ìëì§ë§ ìì§ ë¤ìí ê³³ìì ì°ì´ê³ ìì´ì ì´ìë¨ì ê²ì´ì£ .
ê·¼ëì ìì±ë ì¤í¬ë¦½í¸ìì ì´ ë©ìë를 찾기 íëëë¤.
ìëíë©´ document.writeë íì´ì§ë¥¼ ë¶ë¬ì¤ë ëì¤ìë§ ìëí기 ë문ì
ëë¤.
íì´ì§ê° ë¤ ë¡ëëê³ ëì document.write를 í¸ì¶íë©´ 기존ì ìë 문ì ë´ì©ì´ ì¬ë¼ì§ëë¤.
ìì를 ì´í´ë´ ìë¤.
<p>ì¼ ì´ í, ì´ íì´ì§ì ë´ì©ì ì ë¶ êµì²´ë©ëë¤.</p>
<script>
// ì¼ì´ í document.write í¸ì¶
// íì´ì§ ë¡ëê° ëë íì´ë¯ë¡ 기존 ë´ì©ì´ ì¬ë¼ì§ëë¤.
setTimeout(() => document.write('<b>...ì¬ë¼ì¡ìµëë¤.</b>'), 1000);
</script>
ì´ë° ì´ì ë문ì document.writeë ì§ê¸ê¹ì§ ë°°ì´ DOM ë©ìëìë ë¬ë¦¬ 'íì´ì§ ë¡ëê° ë¤ ëë íâì ì¬ì©í ì ììµëë¤.
ì주 í° ë¨ì ì´ì£ .
ì¥ì ë ììµëë¤. ë¸ë¼ì°ì ë HTMLì âì½ë(íì±íë)â ëì¤ì document.write(HTML)를 ë§ëë©´ í
ì¤í¸ íìì HTMLì ë§ì¹ ìë íì´ì§ì ììë ê² ë§ë¥ í´ìí©ëë¤.
ì¤ê°ì DOM ì¡°ìì íì§ ì기 ë문ì ìëê° ì주 빨ë¼ì§ì£ . DOM êµ¬ì¡°ê° ìì±ë기 ì ì íì´ì§ì ë´ì©ì´ ì½ì ë기 ë문ì ëë¤.
ìì²ëê² ë§ì ê¸ì를 HTMLì ëì ì¼ë¡ ì¶ê°í´ì¼ íëë° ìì§ íì´ì§ë¥¼ ë¶ë¬ì¤ë ì¤ì´ê³ , ìëê° ì¤ìí ìí©ì´ë¼ë©´ document.writeê° ì ì©í ì ììµëë¤. íì§ë§ ì¤ì ì´ë° ì구 ì¬íë¤ì´ í ë²ì 충족ëì´ì¼ íë ìí©ì íì¹ ììµëë¤. document.writeê° ëì ëë¤ë©´ 그건 ê·¸ë¥ ì¤ëë ì¤í¬ë¦½í¸ë¼ì ê·¸ë´ íë¥ ì´ ëìµëë¤.
ìì½
-
ë ¸ë ìì± ë©ìë:
document.createElement(tag)â íê·¸ ì´ë¦ì ì¬ì©í´ ìë¡ì´ ìì를 ë§ë¦document.createTextNode(value)â í ì¤í¸ ë ¸ë를 ë§ë¦(ì ì°ì´ì§ ìì)elem.cloneNode(deep)â ìì를 ë³µì í¨.deep==trueì¼ ê²½ì° ëª¨ë ìì ììë ë³µì ë¨
-
ë ¸ë ì½ì , ìì ë©ìë:
node.append(ë ¸ëë 문ìì´)ânodeëì ë ¸ë를 ì½ìnode.prepend(ë ¸ëë 문ìì´)ânode맨 ìì ë ¸ë를 ì½ìnode.before(ë ¸ëë 문ìì´)â-nodeì´ì ì ë ¸ë를 ì½ìnode.after(ë ¸ëë 문ìì´)â-nodeë¤ìì ë ¸ë를 ì½ìnode.replaceWith(ë ¸ëë 문ìì´)â-node를 ëì²´node.remove()â-node를 ì ê±°
문ìì´ì ì½ì , ìì í ë 문ìì´ì âê·¸ëë¡â ë£ì¼ë©´ ë©ëë¤.
-
â구ìâ ë©ìë:
parent.appendChild(node)parent.insertBefore(node, nextSibling)parent.removeChild(node)parent.replaceChild(newElem, node)
ì´ ë©ìëë¤ì ì ë¶
node를 ë°íí©ëë¤. -
htmlì HTMLì ë£ì¼ë©´ ë©ìëelem.insertAdjacentHTML(where, html)ìwhereê°ì ë°ë¼ í¹ì ìì¹ì HTMLì ì½ì í¨"beforebegin"âelemë°ë¡ ììhtmlì ì½ì"afterbegin"âelemì 첫 ë²ì§¸ ìì ìì ë°ë¡ ììhtmlì ì½ì"beforeend"âelemì ë§ì§ë§ ìì ìì ë°ë¡ ë¤ììhtmlì ì½ì"afterend"âelemë°ë¡ ë¤ììhtmlì ì½ì
문ìì´ì´ë ìì ì½ì ì ì°ì´ë ì ì¬ ë©ìë
elem.insertAdjacentTextìelem.insertAdjacentElementë ìëë°, ì ì°ì´ì§ë ìì -
íì´ì§ ë¡ë©ì´ ëë기 ì ì HTMLì ì½ì í´ì£¼ë ë©ìë:
document.write(html)
문ì ë¡ë©ì´ ëë ìíìì ì´ ë©ìë를 í¸ì¶íë©´ 문ì ë´ì©ì´ ì§ìì§. ì¤ëë ì¤í¬ë¦½í¸ìì ë³¼ ì ìì
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.