ÐодиÑÑкаÑÑÑ 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 елеменÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð²ÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÑкладаÑÑÑÑÑ Ð· ÑÑÑÐ¾Ñ ÐºÑокÑв:
// 1. СÑвоÑÑÑмо ÐµÐ»ÐµÐ¼ÐµÐ½Ñ <div>
let div = document.createElement('div');
// 2. ÐадаÑмо Ð¹Ð¾Ð¼Ñ ÐºÐ»Ð°Ñ "alert"
div.className = "alert";
// 3. ÐаповнÑÑмо його змÑÑÑом
div.innerHTML = "<strong>ÐÑÑм пÑивÑÑ!</strong> Ðи пÑоÑиÑали важливе повÑдомленнÑ.";
Ðи ÑÑвоÑили елеменÑ, але поки Ñо вÑн знаÑ
одиÑÑÑÑ Ð»Ð¸Ñе Ñ Ð·Ð¼ÑннÑй з Ð½Ð°Ð·Ð²Ð¾Ñ div, ÑÐ¾Ð¼Ñ Ð½Ðµ можемо баÑиÑи його на ÑÑоÑÑнÑÑ, оÑкÑлÑки вÑн не Ñ ÑаÑÑÐ¸Ð½Ð¾Ñ Ð´Ð¾ÐºÑменÑа.
ÐеÑоди вÑÑавки
Щоб div зâÑвивÑÑ Ð½Ð°Ð¼ поÑÑÑбно вÑÑавиÑи його деÑÑ Ð² document. ÐапÑиклад, в ÐµÐ»ÐµÐ¼ÐµÐ½Ñ <body> Ñкий можна оÑÑимаÑи звеÑнÑвÑиÑÑ Ð´Ð¾ 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>
ТÑÑ Ð¼Ð¸ викликали меÑод append на document.body, але Ñе можна зÑобиÑи на бÑдÑ-ÑÐºÐ¾Ð¼Ñ ÑнÑÐ¾Ð¼Ñ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑ, Ñоб вÑÑавиÑи ÑнÑий ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ð² нÑого. ÐапÑиклад, ми можемо додаÑи ÑоÑÑ Ð´Ð¾ <div> викликавÑи div.append(anotherElement).
ÐÑÑ Ð±ÑлÑÑе меÑодÑв вÑÑавки, вони вказÑÑÑÑ ÐºÑди Ñаме бÑде вÑÑавлено вмÑÑÑ:
node.append(...вÑзли або ÑÑдки)â Ð´Ð¾Ð´Ð°Ñ Ð²Ñзли або ÑÑдки в кÑнеÑÑnode,node.prepend(...вÑзли або ÑÑдки)â вÑÑавлÑÑ Ð²Ñзли або ÑÑдки на поÑаÑкÑnode,node.before(...вÑзли або ÑÑдки)â вÑÑавлÑÑ Ð²Ñзли або ÑÑдки попеÑедÑnode,node.after(...вÑзли або ÑÑдки)â вÑÑавлÑÑ Ð²Ñзли або ÑÑдки пÑÑлÑnode,node.replaceWith(...вÑзли або ÑÑдки)â замÑнÑÑnodeзаданими вÑзлами або ÑÑдками.
ÐÑгÑменÑами ÑÐ¸Ñ Ð¼ÐµÑодÑв Ñ Ð´Ð¾Ð²ÑлÑний ÑпиÑок DOM вÑзлÑв або ÑекÑÑÐ¾Ð²Ñ ÑÑдки(ÑÐºÑ Ð°Ð²ÑомаÑиÑно пеÑеÑвоÑÑÑÑÑÑÑ Ð½Ð° ÑекÑÑÐ¾Ð²Ñ Ð²Ñзли).
ÐодивимоÑÑ Ð½Ð° Ð½Ð¸Ñ Ð² дÑÑ.
ÐÑÑ Ð¿Ñиклад викоÑиÑÑÐ°Ð½Ð½Ñ ÑÐ¸Ñ Ð¼ÐµÑодÑв Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв до ÑпиÑÐºÑ Ñа ÑекÑÑÑ Ð´Ð¾/пÑÑÐ»Ñ Ð½Ñого:
<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», з вÑдповÑдними замÑнами ÑакиÑ
ÑимволÑв Ñк <, >.
Ð¢Ð¾Ð¼Ñ ÑÑналÑний 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(кÑди, ÑекÑÑ)â ÑинÑакÑÐ¸Ñ Ñой Ñамий, але ÑÑдок ÑекÑÑÑ Ð²ÑÑавлÑÑÑÑÑÑ Â«Ñк ÑекÑÑ» замÑÑÑÑ HTMLelem.insertAdjacentElement(кÑди, ÑекÑÑ)â ÑинÑакÑÐ¸Ñ Ñой Ñамий, але вÑÑавлÑÑÑÑÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ
ÐÐ°Ð²ÐµÐ´ÐµÐ½Ñ Ð¼ÐµÑоди ÑÑнÑÑÑÑ Ð´Ð»Ñ Ñого, Ñоб ÑинÑакÑÐ¸Ñ Ð·Ð°Ð»Ð¸ÑавÑÑ âодноÑÑднимâ. Ðа пÑакÑиÑÑ Ð½Ð°Ð¹ÑаÑÑÑÑе викоÑиÑÑовÑÑÑÑÑÑ 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 = 'Bye there!'; // змÑниÑи клона
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, Ñкий ми ÑозбеÑемо пÑзнÑÑе.
ÐаÑÑаÑÑÐ»Ñ Ð¼ÐµÑоди вÑÑавки/видаленнÑ
Також Ñ Ð·Ð°ÑÑаÑÑÐ»Ñ Ð¼ÐµÑоди Ð´Ð»Ñ Ð¼Ð°Ð½ÑпÑлÑÑÑÑ Ð· DOM, ÑÐºÑ ÑÑнÑÑÑÑ Ð»Ð¸Ñе з ÑÑÑоÑиÑÐ½Ð¸Ñ Ð¿ÑиÑин.
Ð¦Ñ Ð¼ÐµÑоди пÑийÑли з давнÑÑ
ÑаÑÑв. СÑÐ¾Ð³Ð¾Ð´Ð½Ñ Ð½ÐµÐ¼Ð°Ñ Ð¶Ð¾Ð´Ð½Ð¸Ñ
пÑиÑин ÑÑ
викоÑиÑÑовÑваÑи, оÑкÑлÑки ÑÑÑаÑÐ½Ñ Ð¼ÐµÑоди, ÑÐ°ÐºÑ Ñк 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â Ñе його доÑÑÑнÑй елеменÑ).Ð Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð½Ð¸Ð¶Ñе пÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð·
<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>ÐÑивÑÑ Ð²Ñд JS</b>');
</script>
<p>ÐÑнеÑÑ</p>
Ðиклик document.write(html) запиÑÑÑ html на ÑÑоÑÑÐ½ÐºÑ âпÑÑмо ÑÑÑ Ñ Ð·Ð°Ñазâ. Ð Ñдок html може бÑÑи згенеÑований динамÑÑно, Ñож меÑод доÑиÑÑ Ð³Ð½ÑÑкий. Ðа Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ JavaScript ми можемо ÑÑвоÑиÑи повноÑÑÐ½Ð½Ñ Ð²ÐµÐ±ÑÑоÑÑÐ½ÐºÑ Ñа запиÑаÑи ÑÑ Ð²Ð¼ÑÑÑ Ð² докÑменÑ.
ÐеÑод пÑийÑов з ÑÐ¸Ñ ÑаÑÑв коли не бÑло Ð½Ñ DOM, Ð½Ñ ÑÑандаÑÑÑв⦠СпÑÐ°Ð²Ð´Ñ Ð´Ð°Ð²Ð½Ñ ÑаÑи. ÐеÑод доÑÑ Ð¶Ð¸Ð²Ð¸Ð¹, ÑÐ¾Ð¼Ñ Ñо Ñ ÑкÑипÑи, в ÑÐºÐ¸Ñ Ð²Ñн викоÑиÑÑовÑÑÑÑÑÑ.
Ð ÑÑÑаÑÐ½Ð¸Ñ ÑкÑипÑÐ°Ñ Ð²Ñн ÑÑдко зÑÑÑÑÑÑаÑÑÑÑÑ ÑеÑез наÑÑÑÐ¿Ð½Ñ Ð²Ð°Ð¶Ð»Ð¸Ð²Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ:
Ðиклик document.write пÑаÑÑÑ Ð»Ð¸Ñе пÑд ÑÐ°Ñ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑÑоÑÑнки.
ЯкÑо ми виклиÑемо його пÑзнÑÑе, Ñо Ñинний вмÑÑÑ Ð´Ð¾ÐºÑменÑа бÑде видалений.
ÐапÑиклад:
<p>ЧеÑез Ð¾Ð´Ð½Ñ ÑекÑÐ½Ð´Ñ Ð²Ð¼ÑÑÑ ÑÑÑÑ ÑÑоÑÑнки бÑде замÑнено...</p>
<script>
// document.write ÑеÑез 1 ÑекÑндÑ
// виклик вÑдбÑвÑÑ Ð¿ÑÑÐ»Ñ Ñого Ñк ÑÑоÑÑнка заванÑажилаÑÑ, ÑÐ¾Ð¼Ñ Ð¼ÐµÑод ÑÑиÑÐ°Ñ Ð²Ð¼ÑÑÑ
setTimeout(() => document.write('<b>...By this.</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. -
ÐеÑод
elem.insertAdjacentHTML(where, html)вÑÑавлÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ð¹ 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â¦)