Шрифт:
// Если свойство outerHTML уже имеется - просто вернуть управление
if (document.createElement("div").outerHTML) return;
// Возвращает окружающую разметку с содержимым элемента,
// на который указывает ссылка this
function outerHTMLGetter {
var container = document.createElement("div");
// Фиктивный элемент
container.appendChild(this.cloneNode(true)); // Копировать this
// в фиктивный элемент
return container.innerHTML; // Вернуть содержимое
// фиктивного элемента
}
// Замещает указанным значением value содержимое элемента, на который
// указывает ссылка this, вместе с окружающей разметкой HTML
function outerHTMLSetter(value) {
// Создать фиктивный элемент и сохранить в нем указанное значение
var container = document.createElement("div");
container.innerHTML = value;
// Переместить все узлы из фиктивного элемента в документ
while(container.firstChild) // Продолжать, пока в контейнере
// не останется дочерних элементов
this.parentNode.insertBefore(container.firstChild, this);
// И удалить замещаемый узел
this.parentNode.removeChild(this);
}
// Использовать эти две функции в качестве методов чтения и записи свойства outerHTML
// всех объектов Element. Использовать метод Object.defineProperty, если имеется,
// в противном случае использовать __defineGetter__ и __defineSetter__.
if (Object.defineProperty) {
Object.defineProperty(Element.prototype,
"outerHTML",
{ get: outerHTMLGetter,
set: outerHTMLSetter,
enumerable: false,
configurable: true
}):
}
else {
Element.prototype.__defineGetter__("outerHTML", outerHTMLGetter);
Element.prototype.__defineSetter__("outerHTML", outerHTMLSetter);
}
});
15.6.4. Использование объектов DocumentFragment
Объекты
DocumentFragment
– это особая разновидность объектов Node
; они служат временным контейнером для других узлов. Создаются объекты DocumentFragment
следующим образом:
var frag = document.createDocumentFragment;
Как и узел
Document
, объекты DocumentFragment
являются самостоятельными и не входят в состав какого-либо другого документа. Его свойство parentNode
всегда возвращает значение null. Однако, как и узлы Element
, объекты DocumentFragment
могут иметь любое количество дочерних элементов, которыми можно управлять с помощью методов appendChild, insertBefore
и т. д.