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

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

Жанры

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

Пример 15.6. Реализация метода

insertAdjacentHTML
с использованием свойства
innerHTML

// Этот модуль определяет метод Element.insertAdjacentHTML для броузеров,

// не поддерживающих его, а также определяет переносимые функции вставки HTML,

// имеющие более логичные имена, чем имя insertAdjacentHTML:

// Insert.before, Insert.after, Insert.atStart, Insert.atEnd

var Insert = (function {

// Если элементы имеют собственный метод insertAdjacentHTML, использовать

// его в четырех функциях вставки HTML, имеющих более понятные имена,

if (document.createElement("div").insertAdjacentHTML) {

return {

before: function(e,h) {e.insertAdjacentHTML("beforebegin",h);},

after: function(e,h) {e.insertAdjacentHTML("afterend",h);},

atStart: function(e,h) {e.insertAdjacentHTML("afterbegin",h);},

atEnd: function(e,h) {e.insertAdjacentHTMLC'beforeend",h);}

};

}

// Иначе, в случае отсутствия стандартного метода insertAdjacentHTML,

// реализовать те же самые четыре функции вставки и затем использовать их

// в определении метода insertAdjacentHTML.

// Сначала необходимо определить вспомогательный метод, который принимает

// строку с разметкой HTML и возвращает объект DocumentFragment,

// содержащий разобранное представление этой разметки

function fragment(html) {

var elt = document.createElement("div"); // Пустой элемент

var frag = document.createDocumentFragment; // Пустой фрагмент

elt.innerHTML = html; // Содержимое элемента

while(elt.firstChild) // Переместить все узлы

frag.appendChild(elt.firstChild); // из elt в frag

return frag; // И вернуть frag

}

var Insert = {

before: function(elt, html) {

elt.parentNode.insertBefore(fragment(html), elt):

},

after: function(elt, html) {

elt.parentNode.insertBefore(fragment(html),elt.nextSibling);

},

atStart: function(elt, html) {

elt.insertBefore(fragment(html), elt.firstChild);

},

atEnd: function(elt, html) { elt.appendChild(fragment(html)); }

};

// Реализация метода insertAdjacentHTML на основе функций выше

Element.prototype.insertAdjacentHTML = function(pos, html) {

switch(pos.toLowerCase) {

case "beforebegin": return Insert.before(this, html);

case "afterend": return Insert.after(this, html);

case "afterbegin": return Insert.atStart(this, html);

case "beforeend": return Insert.atEnd(this, html);

}

};

return Insert; // Вернуть четыре функции вставки

});

15.7. Пример: создание оглавления

Пример 15.7 показывает, как динамически создавать оглавление документа. Он демонстрирует многие концепции работы с документом, описанные в разделах выше: выбор элементов, навигация по документу, установка атрибутов элементов, установка свойства

innerHTML
и создание новых узлов и вставку их в документ. Пример снабжен большим количеством комментариев, которые призваны облегчить понимание программного кода.

Пример 15.7. Автоматическое создание оглавления документа

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

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Хроники Тириса. Книга 3

Маханенко Василий Михайлович
3. Хроники Тириса
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
5.00
рейтинг книги
Хроники Тириса. Книга 3

Афганский рубеж 2

Дорин Михаил
2. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Афганский рубеж 2

Новые горизонты

Лисина Александра
5. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Новые горизонты

Лекарь Империи 4

Карелин Сергей Витальевич
4. Лекарь Империи
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 4

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

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

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Некромант

Щепетнов Евгений Владимирович
4. Петр Синельников
Фантастика:
боевая фантастика
6.20
рейтинг книги
Некромант

История западной философии

Рассел Бертран Артур Уильям
Пути философии
Научно-образовательная:
история
философия
культурология
5.00
рейтинг книги
История западной философии

Двойник короля 20

Скабер Артемий
20. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 20

Первый среди равных

Бор Жорж
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных

Кодекс Охотника

Винокуров Юрий
1. Кодекс Охотника
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
боевая фантастика
5.00
рейтинг книги
Кодекс Охотника

Эпоха Опустошителя. Том IV

Павлов Вел
4. Вечное Ристалище
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эпоха Опустошителя. Том IV

Звездная Кровь. Экзарх III

Рокотов Алексей
3. Экзарх
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Экзарх III