JavaScript. Подробное руководство, 6-е издание, стр. 214
Одна из особенностей объекта
<b>DocumentFragment</b><b>DocumentFragment</b><b>appendChild(), insertBefore()</b><b>replaceChild(),</b><b>DocumentFragment</b><b>// Выполняет перестановку дочерних элементов узла n в обратном порядке </b><b>function reverse(n) {</b><b> // Создать пустой объект DocumentFragment, который будет играть роль</b><b> // временного контейнера</b><b> var f = document.сreateDocumentFragment();</b><b> // Выполнить обход дочерних элементов в обратном порядке и переместить каждый</b><b> // из них в объект фрагмента. Последний дочерний элемент узла n станет первым</b><b> // дочерним элементом фрагмента f, и наоборот. Обратите внимание, что при добавлении</b><b> // дочернего элемента в фрагмент f он автоматически удаляется из узла n. </b><b> while(n.lastChild) f.appendChild(n.lastChild);</b><b> // В заключение переместить сразу все дочерние элементы </b><b> // из фрагмента f обратно в узел n. </b><b> n.appendChild(f);</b><b>}</b>В примере 15.6 представлена реализация метода
<b>insertAdjacentHTML()</b><b>innerHTML</b><b>DocumentFragment</b><b>insertAdjacentHTML()</b><b>fragment()</b><b>DocumentFragment</b>Пример 15.6. Реализация метода с использованием свойства <b>insertAdjacentHTML()</b><b>innerHTML</b>
<b>// Этот модуль определяет метод Element.insertAdjacentHTML для броузеров,</b><b>// не поддерживающих его, а также определяет переносимые функции вставки HTML,</b><b>// имеющие более логичные имена, чем имя insertAdjacentHTML:</b><b>// Insert.before(), Insert.after(), Insert.atStart(), Insert.atEnd() </b><b>var Insert = (function() {</b><b> // Если элементы имеют собственный метод insertAdjacentHTML, использовать </b><b> // его в четырех функциях вставки HTML, имеющих более понятные имена, </b><b> if (document.createElement("div").insertAdjacentHTML) {</b><b> return {</b><b> before: function(e,h) {e.insertAdjacentHTML("beforebegin",h);},</b><b> after: function(e,h) {e.insertAdjacentHTML("afterend",h);},</b><b> atStart: function(e,h) {e.insertAdjacentHTML("afterbegin",h);},</b><b> atEnd: function(e,h) {e.insertAdjacentHTMLC'beforeend",h);}</b><b> };</b><b> }</b><b> // Иначе, в случае отсутствия стандартного метода insertAdjacentHTML,</b><b> // реализовать те же самые четыре функции вставки и затем использовать их </b><b> // в определении метода insertAdjacentHTML.</b><b> // Сначала необходимо определить вспомогательный метод, который принимает</b><b> // строку с разметкой HTML и возвращает объект DocumentFragment,</b><b> // содержащий разобранное представление этой разметки</b><b> function fragment(html) {</b><b> var elt = document.createElement("div"); // Пустой элемент </b><b> var frag = document.createDocumentFragment(); // Пустой фрагмент </b><b> elt.innerHTML = html; // Содержимое элемента</b><b> while(elt.firstChild) // Переместить все узлы</b><b> frag.appendChild(elt.firstChild); // из elt в frag</b><b> return frag; // И вернуть frag</b><b> }</b><b> var Insert = {</b><b> before: function(elt, html) {</b><b> elt.parentNode.insertBefore(fragment(html), elt):</b><b> },</b><b> after: function(elt, html) {</b><b> elt.parentNode.insertBefore(fragment(html),elt.nextSibling);</b>