JavaScript. Подробное руководство, 6-е издание, стр. 213

<b>  b.appendChild(n); // Сделать n дочерним элементом элемента &lt;b&gt;</b>

<b>}</b>

В разделе 15.5.1 было представлено свойство

<b>outerHTML</b>
элементов и говорилось, что оно не реализовано в текущей версии Firefox. Пример 15.5 демонстрирует, как можно реализовать это свойство в Firefox (и в любом другом броузере, поддерживающем свойство
<b>innerHTML</b>
, позволяющем расширять объект-прототип
<b>Element.prototype</b>
и имеющем методы определения методов доступа к свойствам). Здесь также демонстрируется практическое применение методов
<b>removeChild()</b>
и
<b>cloneNode().</b>

Пример 15.5. Реализация свойства outerHTML с помощью свойства innerHTML

<b>И Реализация свойства outerHTML для броузеров, не поддерживающих его.</b>

<b>// Предполагается, что броузер поддерживает свойство innerHTML, возможность </b>

<b>// расширения Element.prototype и позволяет определять методы доступа к свойствам. </b>

<b>(function() {</b>

<b>  // Если свойство outerHTML уже имеется - просто вернуть управление </b>

<b>  if (document.createElement(&quot;div&quot;).outerHTML) return;</b>

<b>  // Возвращает окружающую разметку с содержимым элемента,</b>

<b>  // на который указывает ссылка this </b>

<b>  function outerHTMLGetter() {</b>

<b>    var container = document.createElement(&quot;div&quot;); </b>
<b>   // Фиктивный элемент </b>

<b>    container.appendChild(this.cloneNode(true));      // Копировать this</b>

<b>                                                      // в фиктивный элемент</b>

<b>    return container.innerHTML;                   // Вернуть содержимое</b>

<b>                                                  // фиктивного элемента</b>

<b>  }</b>

<b>  // Замещает указанным значением value содержимое элемента, на который </b>

<b>  // указывает ссылка this, вместе с окружающей разметкой HTML </b>

<b>  function outerHTMLSetter(value) {</b>

<b>    // Создать фиктивный элемент и сохранить в нем указанное значение </b>

<b>    var container = document.createElement(&quot;div&quot;); </b>

<b>    container.innerHTML = value;</b>

<b>    // Переместить все узлы из фиктивного элемента в документ </b>

<b>    while(container.firstChild) // Продолжать, пока в контейнере</b>

<b>                                // не останется дочерних элементов</b>

<b>      this.parentNode.insertBefore(container.firstChild, this);</b>

<b>    // И удалить замещаемый узел </b>

<b>    this.parentNode.removeChild(this);</b>

<b>  }</b>

<b>  // Использовать эти две функции в качестве методов чтения и записи свойства outerHTML </b>

<b>  // всех объектов Element. Использовать метод Object.defineProperty, если имеется,</b>

<b>  // в противном случае использовать __defineGetter__ и __defineSetter__.</b>

<b>  if (Object.defineProperty) {</b>

<b>    Object.defineProperty(Element.prototype,</b>

<b>                    &quot;outerHTML&quot;, </b>

<b>                    { get: outerHTMLGetter,</b>

<b>                      set: outerHTMLSetter, </b>

<b>                      enumerable: false, </b>

<b>                      configurable: true</b>

<b>                    }):</b>

<b>  }</b>

<b>  else {</b>

<b>    Element.prototype.__defineGetter__(&quot;outerHTML&quot;, outerHTMLGetter); </b>

<b>    Element.prototype.__defineSetter__(&quot;outerHTML&quot;, outerHTMLSetter);</b>

<b>  }</b>

<b>}());</b>

15.6.4. Использование объектов DocumentFragment

Объекты

<b>DocumentFragment</b>
- это особая разновидность объектов
<b>Node</b>
; они служат временным контейнером для других узлов. Создаются объекты
<b>DocumentFragment</b>
следующим образом:

<b>var frag = document.createDocumentFragment();</b>

Как и узел

<b>Document</b>
, объекты
<b>DocumentFragment</b>
являются самостоятельными и не входят в состав какого-либо другого документа. Его свойство
<b>parentNode</b>
всегда возвращает значение null. Однако, как и узлы
<b>Element</b>
, объекты
<b>DocumentFragment</b>
могут иметь любое количество дочерних элементов, которыми можно управлять с помощью методов
<b>appendChild(), insertBefore()</b>
и т. д.