ÐодиÑикаÑии 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. ТепеÑÑ Ð´Ð°Ð²Ð°Ð¹Ñе Ñоздадим Ñакой же div, иÑполÑзÑÑ JavaScript (пÑедполагаем, ÑÑо ÑÑили в HTML или во внеÑнем CSS-Ñайле).
Создание ÑлеменÑа
DOM-Ñзел можно ÑоздаÑÑ Ð´Ð²ÑÐ¼Ñ Ð¼ÐµÑодами:
document.createElement(tag)-
СоздаÑÑ Ð½Ð¾Ð²Ñй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм Ñегом:
let div = document.createElement('div'); document.createTextNode(text)-
СоздаÑÑ Ð½Ð¾Ð²Ñй ÑекÑÑовÑй Ñзел Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм ÑекÑÑом:
let textNode = document.createTextNode('Ð Ð²Ð¾Ñ Ð¸ Ñ');
ÐолÑÑÑÑ ÑаÑÑÑ Ð²Ñемени нам нÑжно ÑоздаваÑÑ ÑÐ·Ð»Ñ ÑлеменÑов, Ñакие как div Ð´Ð»Ñ ÑообÑениÑ.
Создание ÑообÑениÑ
РнаÑем ÑлÑÑае ÑообÑение â ÑÑо div Ñ ÐºÐ»Ð°ÑÑом alert и HTML в нÑм:
let div = document.createElement('div');
div.className = "alert";
div.innerHTML = "<strong>ÐÑем пÑивеÑ!</strong> ÐÑ Ð¿ÑоÑиÑали важное ÑообÑение.";
ÐÑ Ñоздали ÑлеменÑ, но пока он ÑолÑко в пеÑеменной. ÐÑ Ð½Ðµ можем видеÑÑ ÐµÐ³Ð¾ на ÑÑÑаниÑе, поÑколÑÐºÑ Ð¾Ð½ не ÑвлÑеÑÑÑ ÑаÑÑÑÑ Ð´Ð¾ÐºÑменÑа.
ÐеÑÐ¾Ð´Ñ Ð²ÑÑавки
ЧÑÐ¾Ð±Ñ Ð½Ð°Ñ div поÑвилÑÑ, нам нÑжно вÑÑавиÑÑ ÐµÐ³Ð¾ где-нибÑÐ´Ñ Ð² document. ÐапÑимеÑ, в document.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>
ÐÐ¾Ñ Ð¼ÐµÑÐ¾Ð´Ñ Ð´Ð»Ñ ÑазлиÑнÑÑ Ð²Ð°ÑианÑов вÑÑавки:
node.append(...nodes or strings)â добавлÑÐµÑ ÑÐ·Ð»Ñ Ð¸Ð»Ð¸ ÑÑÑоки в конеÑnode,node.prepend(...nodes or strings)â вÑÑавлÑÐµÑ ÑÐ·Ð»Ñ Ð¸Ð»Ð¸ ÑÑÑоки в наÑалоnode,node.before(...nodes or strings)â- вÑÑавлÑÐµÑ ÑÐ·Ð»Ñ Ð¸Ð»Ð¸ ÑÑÑоки доnode,node.after(...nodes or strings)â- вÑÑавлÑÐµÑ ÑÐ·Ð»Ñ Ð¸Ð»Ð¸ ÑÑÑоки поÑлеnode,node.replaceWith(...nodes or strings)â- заменÑеÑnodeзаданнÑми Ñзлами или ÑÑÑоками.
ÐÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑÐ¸Ñ Ð¼ÐµÑодов, ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð½Ð¾Ð²Ñе ÑлеменÑÑ Ð² ÑпиÑок и ÑекÑÑ Ð´Ð¾/поÑле него:
<ol id="ol">
<li>0</li>
<li>1</li>
<li>2</li>
</ol>
<script>
ol.before('before'); // вÑÑавиÑÑ ÑÑÑÐ¾ÐºÑ "before" пеÑед <ol>
ol.after('after'); // вÑÑавиÑÑ ÑÑÑÐ¾ÐºÑ "after" поÑле <ol>
let liFirst = document.createElement('li');
liFirst.innerHTML = 'prepend';
ol.prepend(liFirst); // вÑÑавиÑÑ liFirst в наÑало <ol>
let liLast = document.createElement('li');
liLast.innerHTML = 'append';
ol.append(liLast); // вÑÑавиÑÑ liLast в ÐºÐ¾Ð½ÐµÑ <ol>
</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 бÑдеÑ:
<p>ÐÑивеÑ</p>
<hr>
<div id="div"></div>
ÐÑÑгими Ñловами, ÑÑÑоки вÑÑавлÑÑÑÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑм ÑпоÑобом, как Ð´ÐµÐ»Ð°ÐµÑ ÑÑо elem.textContent.
ÐоÑÑÐ¾Ð¼Ñ ÑÑи меÑÐ¾Ð´Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко Ð´Ð»Ñ Ð²ÑÑавки DOM-Ñзлов или ÑекÑÑовÑÑ ÑÑагменÑов.
Ð ÑÑо, еÑли Ð¼Ñ Ñ
оÑим вÑÑавиÑÑ HTML именно «как html», Ñо вÑеми Ñегами и пÑоÑим, как Ð´ÐµÐ»Ð°ÐµÑ ÑÑо elem.innerHTML?
insertAdjacentHTML/Text/Element
С ÑÑим Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð´ÑÑгой, доволÑно ÑнивеÑÑалÑнÑй меÑод: elem.insertAdjacentHTML(where, html).
ÐеÑвÑй паÑамеÑÑ â ÑÑо ÑпеÑиалÑное Ñлово, ÑказÑваÑÑее, кÑда по оÑноÑÐµÐ½Ð¸Ñ Ðº elem пÑоизводиÑÑ Ð²ÑÑавкÑ. ÐнаÑение должно бÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из ÑледÑÑÑиÑ
:
"beforebegin"â вÑÑавиÑÑhtmlнепоÑÑедÑÑвенно пеÑедelem,"afterbegin"â вÑÑавиÑÑhtmlв наÑалоelem,"beforeend"â вÑÑавиÑÑhtmlв конеÑelem,"afterend"â вÑÑавиÑÑhtmlнепоÑÑедÑÑвенно поÑлеelem.
ÐÑоÑой паÑамеÑÑ â ÑÑо HTML-ÑÑÑока, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²ÑÑавлена именно «как HTML».
ÐапÑимеÑ:
<div id="div"></div>
<script>
div.insertAdjacentHTML('beforebegin', '<p>ÐÑивеÑ</p>');
div.insertAdjacentHTML('afterend', '<p>Ðока</p>');
</script>
â¦ÐÑиведÑÑ Ðº:
<p>ÐÑивеÑ</p>
<div id="div"></div>
<p>Ðока</p>
Так Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ добавлÑÑÑ Ð¿ÑоизволÑнÑй HTML на ÑÑÑаниÑÑ.
ÐаÑианÑÑ Ð²ÑÑавки:
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ легко замеÑиÑÑ ÑÑ Ð¾Ð´ÑÑво Ð¼ÐµÐ¶Ð´Ñ ÑÑой и пÑедÑдÑÑей каÑÑинкой. ТоÑки вÑÑавки ÑакÑиÑеÑки одинаковÑе, но ÑÑÐ¾Ñ Ð¼ÐµÑод вÑÑавлÑÐµÑ HTML.
У меÑода еÑÑÑ Ð´Ð²Ð° бÑаÑа:
elem.insertAdjacentText(where, text)â Ñакой же ÑинÑакÑиÑ, но ÑÑÑокаtextвÑÑавлÑеÑÑÑ Â«ÐºÐ°Ðº ÑекÑÑ», вмеÑÑо HTML,elem.insertAdjacentElement(where, elem)â Ñакой же ÑинÑакÑиÑ, но вÑÑавлÑÐµÑ ÑлеменÑelem.
Ðни ÑÑÑеÑÑвÑÑÑ, в оÑновном, ÑÑÐ¾Ð±Ñ ÑниÑиÑиÑоваÑÑ ÑинÑакÑиÑ. Ðа пÑакÑике ÑаÑÑо иÑполÑзÑеÑÑÑ ÑолÑко insertAdjacentHTML. ÐоÑÐ¾Ð¼Ñ ÑÑо Ð´Ð»Ñ ÑлеменÑов и ÑекÑÑа Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð¼ÐµÑÐ¾Ð´Ñ append/prepend/before/after â иÑ
бÑÑÑÑее напиÑаÑÑ, и они могÑÑ Ð²ÑÑавлÑÑÑ ÐºÐ°Ðº ÑзлÑ, Ñак и ÑекÑÑ.
Так ÑÑо, Ð²Ð¾Ñ Ð°Ð»ÑÑеÑнаÑивнÑй ваÑÐ¸Ð°Ð½Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° ÑообÑениÑ:
<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">ÐеÑвÑй</div>
<div id="second">ÐÑоÑой</div>
<script>
// Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи вÑзÑваÑÑ Ð¼ÐµÑод remove
second.after(first); // беÑÑÑ #second и поÑле него вÑÑавлÑÐµÑ #first
</script>
ÐлониÑование Ñзлов: cloneNode
Ðак вÑÑавиÑÑ ÐµÑÑ Ð¾Ð´Ð½Ð¾ подобное ÑообÑение?
ÐÑ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ ÑоздаÑÑ ÑÑнкÑÐ¸Ñ Ð¸ помеÑÑиÑÑ ÐºÐ¾Ð´ ÑÑда. ÐлÑÑеÑнаÑива â клониÑоваÑÑ ÑÑÑеÑÑвÑÑÑий div и измениÑÑ ÑекÑÑ Ð²Ð½ÑÑÑи него (пÑи необÑ
одимоÑÑи).
Ðногда, когда Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð±Ð¾Ð»ÑÑой ÑлеменÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±ÑÑÑÑее и пÑоÑе.
- ÐÑзов
elem.cloneNode(true)ÑоздаÑÑ Â«Ð³Ð»Ñбокий» клон ÑлеменÑа â Ñо вÑеми аÑÑибÑÑами и доÑеÑними ÑлеменÑами. ÐÑли Ð¼Ñ Ð²Ñзовемelem.cloneNode(false), Ñогда клон бÑÐ´ÐµÑ Ð±ÐµÐ· доÑеÑÐ½Ð¸Ñ ÑлеменÑов.
ÐÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑообÑениÑ:
<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); // показаÑÑ ÐºÐ»Ð¾Ð½Ð¸ÑованнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿Ð¾Ñле ÑÑÑеÑÑвÑÑÑего div
</script>
DocumentFragment
DocumentFragment ÑвлÑеÑÑÑ ÑпеÑиалÑнÑм DOM-Ñзлом, коÑоÑÑй ÑлÑÐ¶Ð¸Ñ Ð¾Ð±ÑÑÑкой Ð´Ð»Ñ Ð¿ÐµÑедаÑи ÑпиÑков Ñзлов.
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ добавиÑÑ Ðº Ð½ÐµÐ¼Ñ Ð´ÑÑгие ÑзлÑ, но когда Ð¼Ñ Ð²ÑÑавлÑем его кÑда-Ñо, он «иÑÑезаеÑ», вмеÑÑо него вÑÑавлÑеÑÑÑ ÐµÐ³Ð¾ ÑодеÑжимое.
ÐапÑимеÑ, getListContent ниже генеÑиÑÑÐµÑ ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ Ñ ÑлеменÑами <li>, коÑоÑÑе позже вÑÑавлÑÑÑÑÑ Ð² <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>
ÐбÑаÑиÑе внимание, ÑÑо на поÑледней ÑÑÑоке Ñ (*) Ð¼Ñ Ð´Ð¾Ð±Ð°Ð²Ð»Ñем DocumentFragment, но он «иÑÑезаеÑ», поÑÑÐ¾Ð¼Ñ ÑÑÑÑкÑÑÑа бÑдеÑ:
<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, коÑоÑÑй Ð¼Ñ ÑаÑÑмоÑÑим гоÑаздо позже.
УÑÑаÑевÑие меÑÐ¾Ð´Ñ Ð²ÑÑавки/ÑдалениÑ
ÐÑÑÑ Ð½ÐµÑколÑко дÑÑÐ³Ð¸Ñ , более ÑÑаÑÑÑ , меÑодов вÑÑавки и ÑдалениÑ, коÑоÑÑе ÑÑÑеÑÑвÑÑÑ Ð¿Ð¾ иÑÑоÑиÑеÑким пÑиÑинам.
СейÑÐ°Ñ Ñже Ð½ÐµÑ Ð¿ÑиÑин иÑ
иÑполÑзоваÑÑ, Ñак как ÑовÑеменнÑе меÑÐ¾Ð´Ñ append, prepend, before, after, remove, replaceWith более гибкие и ÑдобнÑе.
ÐÑ Ñпоминаем о Ð½Ð¸Ñ ÑолÑко поÑомÑ, ÑÑо Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ найÑи во Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑÑаÑÑÑ ÑкÑипÑÐ°Ñ :
parentElem.appendChild(node)-
ÐобавлÑеÑ
nodeв ÐºÐ¾Ð½ÐµÑ Ð´Ð¾ÑеÑÐ½Ð¸Ñ ÑлеменÑовparentElem.СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ Ð½Ð¾Ð²Ñй
<li>в конеÑ<ol>:<ol id="list"> <li>0</li> <li>1</li> <li>2</li> </ol> <script> let newLi = document.createElement('li'); newLi.innerHTML = 'ÐÑивеÑ, миÑ!'; list.appendChild(newLi); </script> parentElem.insertBefore(node, nextSibling)-
ÐÑÑавлÑеÑ
nodeпеÑедnextSiblingвparentElem.СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð²ÑÑавлÑÐµÑ Ð½Ð¾Ð²Ñй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿ÐµÑед вÑоÑÑм
<li>:<ol id="list"> <li>0</li> <li>1</li> <li>2</li> </ol> <script> let newLi = document.createElement('li'); newLi.innerHTML = 'ÐÑивеÑ, миÑ!'; list.insertBefore(newLi, list.children[1]); </script>ЧÑÐ¾Ð±Ñ Ð²ÑÑавиÑÑ
newLiв наÑало, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑделаÑÑ Ð²Ð¾Ñ Ñак:list.insertBefore(newLi, list.firstChild); parentElem.replaceChild(node, oldChild)-
ÐаменÑеÑ
oldChildнаnodeÑÑеди доÑеÑÐ½Ð¸Ñ ÑлеменÑовparentElem. parentElem.removeChild(node)-
УдалÑеÑ
nodeизparentElem(пÑедполагаеÑÑÑ, ÑÑо он ÑодиÑелÑnode).ÐÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ ÑÐ´Ð°Ð»Ð¸Ñ Ð¿ÐµÑвÑй
<li>из<ol>:<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>ÐÑÐ¸Ð²ÐµÑ Ð¸Ð· JS</b>');
</script>
<p>ÐонеÑ</p>
ÐÑзов document.write(html) запиÑÑÐ²Ð°ÐµÑ html на ÑÑÑаниÑÑ Â«Ð¿ÑÑмо здеÑÑ Ð¸ ÑейÑаÑ». СÑÑока html Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки ÑгенеÑиÑована, поÑÑÐ¾Ð¼Ñ Ð¼ÐµÑод доÑÑаÑоÑно гибкий. ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ JavaScript, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑеннÑÑ Ð²ÐµÐ±-ÑÑÑаниÑÑ Ð¸ запиÑаÑÑ ÐµÑ Ð² докÑменÑ.
ÐÑÐ¾Ñ Ð¼ÐµÑод пÑиÑÑл к нам Ñо вÑемÑн, когда еÑÑ Ð½Ðµ бÑло ни DOM, ни ÑÑандаÑÑов⦠ÐейÑÑвиÑелÑно ÑÑаÑÑе вÑемена. Ðн вÑÑ ÐµÑÑ Ð¶Ð¸Ð²ÑÑ, поÑÐ¾Ð¼Ñ ÑÑо еÑÑÑ ÑкÑипÑÑ, коÑоÑÑе иÑполÑзÑÑÑ ÐµÐ³Ð¾.
Ð ÑовÑеменнÑÑ ÑкÑипÑÐ°Ñ Ð¾Ð½ Ñедко вÑÑÑеÑаеÑÑÑ Ð¸Ð·-за ÑледÑÑÑего важного огÑаниÑениÑ:
ÐÑзов document.write ÑабоÑÐ°ÐµÑ ÑолÑко во вÑÐµÐ¼Ñ Ð·Ð°Ð³ÑÑзки ÑÑÑаниÑÑ.
ÐÑли вÑзваÑÑ ÐµÐ³Ð¾ позже, Ñо ÑÑÑеÑÑвÑÑÑее ÑодеÑжимое докÑменÑа заÑÑÑÑÑÑ.
ÐапÑимеÑ:
<p>ЧеÑез Ð¾Ð´Ð½Ñ ÑекÑÐ½Ð´Ñ ÑодеÑжимое ÑÑой ÑÑÑаниÑÑ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð¼ÐµÐ½ÐµÐ½Ð¾...</p>
<script>
// document.write ÑеÑез 1 ÑекÑндÑ
// вÑзов пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ñле Ñого, как ÑÑÑаниÑа загÑÑзиÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð¼ÐµÑод заÑиÑÐ°ÐµÑ ÑодеÑжимое
setTimeout(() => document.write('<b>...ÐÑим.</b>'), 1000);
</script>
Так ÑÑо поÑле Ñого, как ÑÑÑаниÑа загÑÑжена, он Ñже непÑигоден к иÑполÑзованиÑ, в оÑлиÑие Ð¾Ñ Ð´ÑÑÐ³Ð¸Ñ Ð¼ÐµÑодов DOM, коÑоÑÑе Ð¼Ñ ÑаÑÑмоÑÑели вÑÑе.
ÐÑо его недоÑÑаÑок.
ÐÑÑÑ Ð¸ пÑеимÑÑеÑÑво. ТеÑ
ниÑеÑки, когда document.write запÑÑкаеÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ ÑÑÐµÐ½Ð¸Ñ HTML бÑаÑзеÑом, и ÑÑо-Ñо пиÑÐµÑ Ð² докÑменÑ, Ñо бÑаÑÐ·ÐµÑ Ð²Ð¾ÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑо Ñак, как бÑдÑо ÑÑо изнаÑалÑно бÑло ÑаÑÑÑÑ Ð·Ð°Ð³ÑÑженного HTML-докÑменÑа.
ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð½ ÑабоÑÐ°ÐµÑ Ð½ÐµÐ²ÐµÑоÑÑно бÑÑÑÑо, Ð²ÐµÐ´Ñ Ð¿Ñи ÑÑом Ð½ÐµÑ Ð¼Ð¾Ð´Ð¸ÑикаÑии DOM. ÐеÑод пиÑÐµÑ Ð¿ÑÑмо в ÑекÑÑ ÑÑÑаниÑÑ, пока DOM еÑÑ Ð² пÑоÑеÑÑе ÑозданиÑ.
Так ÑÑо, еÑли нам нÑжно динамиÑеÑки добавиÑÑ Ð¼Ð½Ð¾Ð³Ð¾ ÑекÑÑа в HTML, и Ð¼Ñ Ð½Ð°Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð½Ð° ÑÑадии загÑÑзки, и Ð´Ð»Ñ Ð½Ð°Ñ Ð¾ÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð° ÑкоÑоÑÑÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ. Ðо на пÑакÑике ÑÑи ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ñедко ÑоÑеÑаÑÑÑÑ. РобÑÑно Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑвидеÑÑ ÑÑÐ¾Ñ Ð¼ÐµÑод в ÑкÑипÑÐ°Ñ Ð¿ÑоÑÑо поÑомÑ, ÑÑо они ÑÑаÑÑе.
ÐÑого
-
ÐеÑÐ¾Ð´Ñ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñзлов:
document.createElement(tag)â ÑоздаÑÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм Ñегом,document.createTextNode(value)â ÑоздаÑÑ ÑекÑÑовÑй Ñзел (Ñедко иÑполÑзÑеÑÑÑ),elem.cloneNode(deep)â клониÑÑÐµÑ ÑлеменÑ, еÑлиdeep==true, Ñо Ñо вÑеми доÑеÑними ÑлеменÑами.
-
ÐÑÑавка и Ñдаление:
node.append(...nodes or strings)â вÑÑавлÑÐµÑ Ð²nodeв конеÑ,node.prepend(...nodes or strings)â вÑÑавлÑÐµÑ Ð²nodeв наÑало,node.before(...nodes or strings)â вÑÑавлÑÐµÑ Ð¿ÑÑмо пеÑедnode,node.after(...nodes or strings)â вÑÑавлÑÐµÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñлеnode,node.replaceWith(...nodes or strings)â заменÑеÑnode.node.remove()â ÑдалÑеÑnode.
-
УÑÑаÑевÑие меÑодÑ:
parent.appendChild(node)parent.insertBefore(node, nextSibling)parent.removeChild(node)parent.replaceChild(newElem, node)
ÐÑе ÑÑи меÑÐ¾Ð´Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ
node. -
ÐÑли нÑжно вÑÑавиÑÑ ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ HTML, Ñо
elem.insertAdjacentHTML(where, html)вÑÑавлÑÐµÑ Ð² завиÑимоÑÑи оÑwhere:"beforebegin"â вÑÑавлÑеÑhtmlпÑÑмо пеÑедelem,"afterbegin"â вÑÑавлÑеÑhtmlвelemв наÑало,"beforeend"â вÑÑавлÑеÑhtmlвelemв конеÑ,"afterend"â вÑÑавлÑеÑhtmlÑÑÐ°Ð·Ñ Ð¿Ð¾Ñлеelem.
Также ÑÑÑеÑÑвÑÑÑ Ð¿Ð¾Ñ Ð¾Ð¶Ð¸Ðµ меÑодÑ
elem.insertAdjacentTextиelem.insertAdjacentElement, они вÑÑавлÑÑÑ ÑекÑÑовÑе ÑÑÑоки и ÑлеменÑÑ, но они Ñедко иÑполÑзÑÑÑÑÑ. -
ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ HTML на ÑÑÑаниÑÑ Ð´Ð¾ завеÑÑÐµÐ½Ð¸Ñ ÐµÑ Ð·Ð°Ð³ÑÑзки:
document.write(html)
ÐоÑле загÑÑзки ÑÑÑаниÑÑ Ñакой вÑзов заÑиÑÐ°ÐµÑ Ð´Ð¾ÐºÑменÑ. РоÑновном вÑÑÑеÑаеÑÑÑ Ð² ÑÑаÑÑÑ ÑкÑипÑÐ°Ñ .
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)