JavaScript. Подробное руководство, 6-е издание, стр. 215
<b> },</b><b> atStart: function(elt, html) {</b><b> elt.insertBefore(fragment(html), elt.firstChild);</b><b> },</b><b> atEnd: function(elt, html) { elt.appendChild(fragment(html)); }</b><b> };</b><b> // Реализация метода insertAdjacentHTML на основе функций выше </b><b> Element.prototype.insertAdjacentHTML = function(pos, html) {</b><b> switch(pos.toLowerCase()) {</b><b> case "beforebegin": return Insert.before(this, html);</b><b> case "afterend": return Insert.after(this, html);</b><b> case "afterbegin": return Insert.atStart(this, html);</b><b> case "beforeend": return Insert.atEnd(this, html);</b><b> }</b><b> };</b><b> return Insert; // Вернуть четыре функции вставки</b><b>}());</b>15.7. Пример: создание оглавления
Пример 15.7 показывает, как динамически создавать оглавление документа. Он демонстрирует многие концепции работы с документом, описанные в разделах выше: выбор элементов, навигация по документу, установка атрибутов элементов, установка свойства
<b>innerHTML</b>Пример 15.7. Автоматическое создание оглавления документа
<b>/**</b><b>* TOC.js: создает оглавление документа.</b><b>*</b><b>* Этот модуль регистрирует анонимную функцию, которая вызывается</b><b>* автоматически по окончании загрузки документа. Эта функция сначала</b><b>* отыскивает элемент документа с атрибутом id="TOC". Если такой элемент</b><b>* отсутствует, функция создает его, помещая в начало документа.</b><b>*</b><b>* Затем функция отыскивает все элементы с <h1> по <h6>, интерпретируя их как</b><b>* заголовки разделов и создает оглавление внутри элемента ТОС. Функция добавляет</b><b>* номера разделов в каждый заголовок и обертывает заголовки именованными</b><b>* якорными элементами, благодаря чему оглавление может ссылаться на них.</b><b>* Якорным элементам даются имена, начинающиеся с приставки "ТОС", поэтому вам следует</b><b>* избегать использовать эту приставку в своей разметке HTML.</b><b>*</b><b>* Оформление элементов оглавления можно реализовать с помощью CSS. Все элементы имеют</b><b>* класс "TOCEntry". Кроме того, каждый элемент оглавления имеет класс, соответствующий</b><b>* уровню заголовка раздела. Для заголовков, оформленных тегом <h1>, создаются элементы</b><b>* оглавления с классом "TOCLevell",для заголовков <h2> - с классом "T0CLevel2" и т. д.</b><b>* Номера разделов, вставляемые в заголовки, получают класс "TOCSectNum".</b><b>*</b><b>* Этот модуль можно использовать с каскадными таблицами стилей, такими как:</b><b>*</b><b>* #Т0С { border: solid black 1рх; margin: Юрх; padding: Юрх; }</b><b>* .TOCEntry { font-family: sans-serif; }</b><b>* .TOCEntry a { text-decoration: none; }</b><b>* .TOCLevell { font-size: 16pt; font-weight: bold; }</b><b>* .T0CLevel2 { font-size: 12pt; margin-left: .5in; }</b><b>* .TOCSectNum:after { content: "; }</b><b>*</b><b>* Последнее определение генерирует двоеточие и пробел после номера раздела.</b><b>* Чтобы скрыть номера разделов, можно использовать следующий стиль:</b><b>*</b><b>* .TOCSectNum { display: none }</b><b>*</b><b>* Этот модуль использует вспомогательную функцию onLoad().</b><b>**/</b><b>onLoad(function() { // Анонимная функция, определяющая локальн. обл. видимости </b><b>// Отыскать контейнерный элемент для оглавления.</b><b>// Если такой элемент отсутствует, создать его в начале документа,</b><b> var toc = document.getElementById("TOC");</b><b> if (!toc) {</b><b> toc = document.createElementC'div");</b><b> toc.id = "TOC";</b><b> document.body.insertBefore(toc, document.body.firstChild);</b><b> }</b>