Чтение онлайн

на главную - закладки

Жанры

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

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
и т. д.

Одна из особенностей объекта

DocumentFragment
состоит в том, что он позволяет манипулировать множеством узлов как единственным узлом: если объект
DocumentFragment
передать методу
appendChild, insertBefore
или
replaceChild,
в документ будут вставлены дочерние элементы фрагмента, а не сам фрагмент. (Дочерние элементы будут перемещены из фрагмента в документ, а сам фрагмент опустеет и будет готов для повторного использования.) Следующая функция использует объект
DocumentFragment
для перестановки в обратном порядке дочерних элементов узла:

// Выполняет перестановку дочерних элементов узла n в обратном порядке

function reverse(n) {

// Создать пустой объект DocumentFragment, который будет играть роль

// временного контейнера

var f = document.сreateDocumentFragment;

// Выполнить обход дочерних элементов в обратном порядке и переместить каждый

// из них в объект фрагмента. Последний дочерний элемент узла n станет первым

// дочерним элементом фрагмента f, и наоборот. Обратите внимание, что при добавлении

// дочернего элемента в фрагмент f он автоматически удаляется из узла n.

while(n.lastChild) f.appendChild(n.lastChild);

// В заключение переместить сразу все дочерние элементы

// из фрагмента f обратно в узел n.

n.appendChild(f);

}

В примере 15.6 представлена реализация метода

insertAdjacentHTML
(раздел 15.5.1) с применением свойства
innerHTML
и объекта
DocumentFragment
. В нем также определяются функции вставки разметки HTML с более логичными именами, чем неочевидное
insertAdjacentHTML
. Вложенная вспомогательная функция
fragment
является, пожалуй, наиболее интересной частью этого примера: она возвращает объект
DocumentFragment
, содержащий разобранное представление указанной ей строки с разметкой HTML.

Поделиться:
Популярные книги

Неучтенный элемент. Том 3

NikL
3. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 3

Старый, но крепкий 2

Крынов Макс
2. Культивация без насилия
Фантастика:
рпг
уся
эпическая фантастика
5.00
рейтинг книги
Старый, но крепкий 2

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Камень

Минин Станислав
1. Камень
Фантастика:
боевая фантастика
6.80
рейтинг книги
Камень

Последний Паладин. Том 3

Саваровский Роман
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 3

Цеховик. Книга 1. Отрицание

Ромов Дмитрий
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Цеховик. Книга 1. Отрицание

Я до сих пор князь. Книга XXII

Дрейк Сириус
22. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор князь. Книга XXII

Морской лорд. Том 1

Чернобровкин Александр Васильевич
2. Вечный капитан
Фантастика:
попаданцы
историческое фэнтези
8.12
рейтинг книги
Морской лорд. Том 1

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Архонт

Драйв Астарты

Розов Александр Александрович
5. Конфедерация Меганезия
Фантастика:
фэнтези
5.00
рейтинг книги
Драйв Астарты

Телохранитель Генсека. Том 1

Алмазный Петр
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Телохранитель Генсека. Том 1

Последний Паладин. Том 8

Саваровский Роман
8. Путь Паладина
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Последний Паладин. Том 8

Третий. Том 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
попаданцы
5.00
рейтинг книги
Третий. Том 6