前端直接渲染Markdown

前端直接渲染Markdown,主要技术方案:

1. 使用JavaScript库(最常用)

marked

javascript 复制代码
// 安装:npm install marked
import { marked } from 'marked';
document.getElementById('content').innerHTML = marked.parse(markdownText);

showdown

javascript 复制代码
// 安装:npm install showdown
const converter = new showdown.Converter();
document.getElementById('content').innerHTML = converter.makeHtml(markdownText);

remark + rehype

javascript 复制代码
// 更现代的方案
import { unified } from 'unified';
import remarkParse from 'remark-parse';
import remarkRehype from 'remark-rehype';
import rehypeStringify from 'rehype-stringify';

const html = await unified()
  .use(remarkParse)
  .use(remarkRehype)
  .use(rehypeStringify)
  .process(markdownText);

2. 浏览器原生方案

使用textarea + 解析

html 复制代码
<textarea id="markdown-source" style="display:none">
# 标题
这是**粗体**文本
</textarea>
<div id="rendered-content"></div>

<script>
// 需要配合marked或其他库使用
</script>

3. 框架集成方案

React + react-markdown

jsx 复制代码
import ReactMarkdown from 'react-markdown';

function MarkdownRenderer({ content }) {
  return <ReactMarkdown>{content}</ReactMarkdown>;
}

Vue + markdown-it

vue 复制代码
<template>
  <div v-html="compiledMarkdown"></div>
</template>

<script>
import markdownIt from 'markdown-it';

export default {
  data() {
    return {
      markdown: '# Hello World'
    };
  },
  computed: {
    compiledMarkdown() {
      return markdownIt().render(this.markdown);
    }
  }
};
</script>

4. 完整示例

html 复制代码
<!DOCTYPE html>
<html>
<head>
  <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
</head>
<body>
  <textarea id="input" rows="10" cols="50">
# 标题
## 子标题
- 列表项1
- 列表项2
**粗体** *斜体*
  </textarea>
  <div id="output"></div>
  
  <script>
    const input = document.getElementById('input');
    const output = document.getElementById('output');
    
    function updateOutput() {
      output.innerHTML = marked.parse(input.value);
    }
    
    input.addEventListener('input', updateOutput);
    updateOutput(); // 初始渲染
  </script>
</body>
</html>

5. 安全考虑

使用DOMPurify防止XSS攻击:

javascript 复制代码
import DOMPurify from 'dompurify';
import { marked } from 'marked';

const cleanHtml = DOMPurify.sanitize(marked.parse(markdownText));
document.getElementById('content').innerHTML = cleanHtml;

推荐使用markedremark,它们性能好、功能完整,且有良好的社区支持。

相关推荐
life码农8 分钟前
HTML文本换行显示几种方法总结
前端·html
强子感冒了9 分钟前
CSS基础学习:CSS选择器与优先级规则
前端·css·学习
啟明起鸣16 分钟前
【Nginx 网关开发】上手 Nginx,简简单单启动一个静态 html 页面
运维·c语言·前端·nginx·html
vortex520 分钟前
深度字典攻击(实操笔记·红笔思考)
前端·chrome·笔记
我是伪码农21 分钟前
Vue 1.30
前端·javascript·vue.js
利刃大大30 分钟前
【Vue】默认插槽 && 具名插槽 && 作用域插槽
前端·javascript·vue.js
艳阳天_.33 分钟前
web 分录科目实现辅助账
开发语言·前端·javascript
小白64021 小时前
2025年终总结-迷途漫漫,终有一归
前端·程序人生
烟花落o1 小时前
贪吃蛇及相关知识点讲解
c语言·前端·游戏开发·贪吃蛇·编程学习
晚霞的不甘1 小时前
Flutter for OpenHarmony专注与习惯的完美融合: 打造你的高效生活助手
前端·数据库·经验分享·flutter·前端框架·生活