概览:实现 Markdown 支持的核心步骤
无论选择哪种方法,核心逻辑都是一样的:
- 输入: 用户在文本框中输入 Markdown 格式的文本。
- 解析: 使用一个 JavaScript 库(如
marked)将 Markdown 字符串转换成 HTML 字符串。 - 渲染: 将生成的 HTML 字符串插入到网页的指定位置(通常是
<div>)进行显示。 - 实时预览 (可选): 在输入框旁边或下方创建一个预览区域,实时显示渲染后的效果。
最简单的方式 - 使用 CDN 和原生 JavaScript
这种方法非常适合快速原型、个人博客或静态网站,无需构建工具。
我们将使用 marked 这个流行、快速且功能强大的 Markdown 解析器。
步骤 1: 创建 HTML 结构
创建一个包含文本输入区和预览区的 index.html 文件。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">Markdown 编辑器</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
margin: 0;
padding: 20px;
background-color: #f4f4f9;
}
.container {
max-width: 1200px;
margin: 0 auto;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
textarea, #preview {
width: 100%;
height: 80vh;
padding: 15px;
border: 1px solid #ccc;
border-radius: 5px;
box-sizing: border-box; /* 确保 padding 不会影响总宽度 */
}
textarea {
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
resize: vertical;
}
#preview {
background-color: #fff;
overflow-y: auto;
}
h1 { text-align: center; }
</style>
</head>
<body>
<h1>Markdown 实时预览</h1>
<div class="container">
<textarea id="editor" placeholder="在这里输入 Markdown..."># 欢迎使用 Markdown 编辑器
这是一个 **粗体** 和 *斜体* 的例子。
## 列表示例
- 项目 1
- 项目 2
- 子项目 A
- 子子项目 B
- 项目 3
### 代码块
这是一个行内代码 `console.log('Hello, world!')`。
下面是一个代码块:
```javascript
function greet(name) {
return `你好, ${name}!`;
}
console.log(greet('Markdown'));
链接和图片

这是一个引用块。 可以有多行。
<!-- 1. 引入 marked.js 库 -->
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<!-- 2. 编写 JavaScript 代码 -->
<script>
// 获取 DOM 元素
const editor = document.getElementById('editor');
const preview = document.getElementById('preview');
// 定义一个更新预览的函数
function updatePreview() {
// 使用 marked 将 Markdown 文本转换为 HTML
const markdownText = editor.value;
const htmlContent = marked.parse(markdownText);
// 将生成的 HTML 设置到预览 div 的内容中
preview.innerHTML = htmlContent;
}
// 监听 textarea 的 'input' 事件,当内容改变时更新预览
editor.addEventListener('input', updatePreview);
// 页面加载时执行一次,初始化预览内容
updatePreview();
</script>