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

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

Жанры

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. Автоматическое создание оглавления документа

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

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

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

Эмиссар

Листратов Валерий
8. Ушедший Род
Фантастика:
боевая фантастика
аниме
попаданцы
7.50
рейтинг книги
Эмиссар

Газлайтер. Том 28

Володин Григорий Григорьевич
28. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 28

Сопротивление

Осадчук Алексей Витальевич
11. Последняя жизнь
Фантастика:
аниме
фэнтези
попаданцы
7.33
рейтинг книги
Сопротивление

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

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

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений

Сталин

Радзинский Эдвард Станиславович
3. Загадки жизни и смерти
Проза:
историческая проза
7.36
рейтинг книги
Сталин

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7

Изменяющий-Механик. Компиляция. Книги 1-18

Усманов Хайдарали
Собрание сочинений
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Изменяющий-Механик. Компиляция. Книги 1-18

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

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

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Дважды одаренный. Том VIII

Тарс Элиан
8. Дважды одаренный
Фантастика:
боевая фантастика
альтернативная история
аниме
попаданцы
5.00
рейтинг книги
Дважды одаренный. Том VIII