Markdown-it — это мощная библиотека для парсинга Markdown в JavaScript, поддерживающая расширяемую систему плагинов. Один из часто используемых плагинов — создание якорей для заголовков. Такой функционал позволяет автоматически генерировать идентификаторы для заголовков и использовать их для навигации по документу.
Для работы с плагином якорей обычно используют пакет
markdown-it-anchor. Установка выполняется через npm:
npm install markdown-it markdown-it-anchor
После установки подключение выглядит следующим образом:
const MarkdownIt = require('markdown-it');
const markdownItAnchor = require('markdown-it-anchor');
const md = new MarkdownIt();
md.use(markdownItAnchor, {
level: [1, 2, 3],
permalink: true,
permalinkSymbol: '¶',
permalinkBefore: true,
slugify: s => encodeURIComponent(String(s).trim().toLowerCase().replace(/\s+/g, '-'))
});
Разбор параметров конфигурации:
level — массив уровней заголовков, для которых будут
генерироваться якоря. Например, [1, 2, 3] означает
<h1>, <h2> и
<h3>.permalink — логическое значение, включающее или
отключающее отображение символа ссылки на заголовок.permalinkSymbol — символ, который будет отображаться
рядом с заголовком для создания ссылки на якорь.permalinkBefore — определяет, будет ли символ ссылки
отображаться перед текстом заголовка (true) или после
(false).slugify — функция, преобразующая текст заголовка в
идентификатор (якорь). В примере используется простое преобразование в
нижний регистр и замена пробелов на дефисы.Плагин анализирует AST (Abstract Syntax Tree), создаваемый
Markdown-it при парсинге Markdown. Для каждого заголовка выбранного
уровня создаётся уникальный id, который затем используется
для ссылки. Если включён permalink, плагин вставляет
HTML-элемент с ссылкой на этот id. В результате заголовок
становится кликабельным и его можно использовать для внутренней
навигации.
Пример Markdown:
# Основы JavaScript
## Переменные
### Типы данных
Рендер с включённым плагином создаст HTML:
<h1 id="osnovy-javascript">
<a class="header-anchor" href="#osnovy-javascript">¶</a>
Основы JavaScript
</h1>
<h2 id="peremennye">
<a class="header-anchor" href="#peremennye">¶</a>
Переменные
</h2>
<h3 id="tipy-dannyh">
<a class="header-anchor" href="#tipy-dannyh">¶</a>
Типы данных
</h3>
В больших документах важно избегать дублирующихся id.
Плагин автоматически добавляет числовой суффикс при повторении
идентификатора. Можно изменить этот механизм через кастомную функцию
slugify:
const usedIds = new Set();
md.use(markdownItAnchor, {
slugify: s => {
let slug = encodeURIComponent(s.trim().toLowerCase().replace(/\s+/g, '-'));
let originalSlug = slug;
let i = 1;
while (usedIds.has(slug)) {
slug = `${originalSlug}-${i++}`;
}
usedIds.add(slug);
return slug;
}
});
Иногда требуется не просто символ, а полноценная иконка или кнопка.
Плагин поддерживает параметр permalinkClass и
permalinkHref, а также возможность использовать функцию
renderPermalink для полной кастомизации:
md.use(markdownItAnchor, {
renderPermalink: (slug, opts, state, idx) => {
const link = `<a class="custom-anchor" href="#${slug}" title="Ссылка на заголовок">${opts.permalinkSymbol}</a>`;
state.tokens[idx + 1].children.unshift({
type: 'html_inline',
content: link
});
},
permalinkSymbol: '?'
});
Markdown-it поддерживает цепочку плагинов. Плагин якорей можно
использовать совместно с markdown-it-toc-done-right для
генерации оглавления:
const markdownItToc = require('markdown-it-toc-done-right');
md.use(markdownItAnchor);
md.use(markdownItToc, { level: [1, 2, 3] });
В этом случае оглавление автоматически ссылается на заголовки с якорями.
slugify в больших
документах.permalinkBefore: true для удобного копирования ссылки.renderPermalink, если требуется
интеграция с CSS-иконками или кнопками навигации.Плагин для якорей — ключевой инструмент для структурированных документов на Markdown, обеспечивающий удобство навигации и совместимость с автоматической генерацией оглавления.