Для использования Markdown-it в браузерной среде
необходимо подключить библиотеку через <script> тег.
Наиболее простой способ — использование CDN:
<script src="https://cdn.jsdelivr.net/npm/markdown-it@13.0.1/dist/markdown-it.min.js"></script>
После подключения создается объект Markdown-it, который отвечает за парсинг Markdown в HTML:
const md = window.markdownit();
Метод md.render() преобразует текст в Markdown в
HTML-строку:
const result = md.render('# Заголовок\n\nТекст **жирным**.');
console.log(result);
Результатом будет:
<h1>Заголовок</h1>
<p>Текст <strong>жирным</strong>.</p>
Markdown-it поддерживает множество опций для управления поведением парсера. Основные из них:
html — разрешает использование HTML в Markdown.linkify — автоматически преобразует URL в кликабельные
ссылки.typographer — включает типографские замены (например,
кавычки и тире).Пример инициализации с опциями:
const md = window.markdownit({
html: true,
linkify: true,
typographer: true
});
Markdown-it обладает гибкой системой плагинов. Плагины добавляют новые синтаксические возможности или изменяют поведение парсера.
Пример подключения плагина для подсветки кода с помощью highlight.js:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@11.8.0/styles/github.min.css">
<script src="https://cdn.jsdelivr.net/npm/highlight.js@11.8.0/lib/common.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/markdown-it@13.0.1/dist/markdown-it.min.js"></script>
<script>
const md = window.markdownit({
highlight: function (str, lang) {
if (lang && hljs.getLanguage(lang)) {
try {
return hljs.highlight(str, { language: lang }).value;
} catch (__) {}
}
return '';
}
});
const html = md.render('```js\nconsole.log("Hello");\n```');
document.body.innerHTML = html;
</script>
Markdown-it часто используется для рендеринга Markdown в реальном времени. Основная схема:
<textarea>).<div>).input к рендерингу
Markdown.Пример:
<textarea id="markdown-input" rows="10" cols="50"></textarea>
<div id="html-output"></div>
<script>
const md = window.markdownit({ html: true });
const input = document.getElementById('markdown-input');
const output = document.getElementById('html-output');
input.addEventListener('input', () => {
output.innerHTML = md.render(input.value);
});
</script>
Markdown-it использует систему токенов, которая позволяет вмешиваться в процесс рендеринга на уровне отдельных элементов.
Пример изменения рендера ссылок:
const md = window.markdownit();
const defaultRender = md.renderer.rules.link_open || function(tokens, idx, options, env, self) {
return self.renderToken(tokens, idx, options);
};
md.renderer.rules.link_open = function(tokens, idx, options, env, self) {
tokens[idx].attrPush(['target', '_blank']);
return defaultRender(tokens, idx, options, env, self);
};
const html = md.render('[Пример](https://example.com)');
console.log(html);
В результате все ссылки будут открываться в новом окне.
Хотя Markdown-it сам по себе синхронен, его можно интегрировать с асинхронными функциями, например, для подгрузки дополнительных данных перед рендерингом:
async function renderMarkdownAsync(mdText) {
const externalData = await fetch('data.json').then(res => res.json());
return md.render(mdText + '\n\n' + externalData.content);
}
renderMarkdownAsync('# Заголовок').then(html => {
document.getElementById('html-output').innerHTML = html;
});
md.render() для преобразования
текста.Эти подходы позволяют создавать гибкие Markdown-редакторы прямо в браузере с минимальными затратами на настройку и при этом с полной поддержкой расширений и кастомизации.