AI生成的基于html+marked.js实现的Markdown转html工具,离线使用,可实时预览 [

有一个markdown格式的文档,手头只有notepad++的MarkdownPanel插件可以预览,但是只能预览,不能直接转换为html文件下载,直接复制预览的内效果又不太好,度娘也能找到很多工具,但是都需要在线使用。所以考虑用AI自己生成一个。
要求:可以离线使用,轻量,可以实时预览。
了解到marked.js是一个使用JavaScript实现的markdown解析库,功能比较完善,所以考虑使用html+js来实现markdown文档转换为html功能。
生成结果截图:

以下为生成步骤及最终源码:

1.在deepseek中输入要求:
使用html+marked.js实现Markdown转html功能,要求页面为左右布局,左侧输入markdown文本后右侧可以实时预览,预览效果应与下载的html页面打开后的展示内容一致

2.检查deepseek生成的代码,发现deepseek生成的源码中有两部分不是以源码的形式输出的,输出的是渲染后的结果

发现把示例代码中的引用快'''全部调整成了\'\'\',源码复制出来时候稍后手动修正

4.新增上传功能,以及调整按钮布局

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Markdown实时预览工具</title><script src="marked.min.js"></script><style>* {box-sizing: border-box;margin: 0;padding: 0;}body {font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;line-height: 1.6;color: #333;background-color: #f5f5f5;height: 100vh;display: flex;flex-direction: column;}.header {background-color: #2c3e50;color: white;padding: 15px 20px;text-align: center;}.container {display: flex;flex: 1;overflow: hidden;}.editor-pane, .preview-pane {flex: 1;padding: 20px;overflow-y: auto;height: 100%;}.editor-pane {background-color: #f8f9fa;border-right: 1px solid #ddd;}.preview-pane {background-color: white;}textarea {width: 100%;height: 100%;min-height: 300px;padding: 10px;border: 1px solid #ddd;border-radius: 4px;resize: none;font-family: monospace;font-size: 14px;line-height: 1.5;}.preview-content {height: 100%;overflow-y: auto;padding: 10px;}.toolbar {padding: 10px 20px;background-color: #ecf0f1;border-bottom: 1px solid #ddd;display: flex;justify-content: space-between;}.left-toolbar, .right-toolbar {display: flex;gap: 10px;}button {padding: 8px 15px;background-color: #3498db;color: white;border: none;border-radius: 4px;cursor: pointer;font-size: 14px;}button:hover {background-color: #2980b9;}#file-input {display: none;}/* Markdown样式,确保预览和导出一致 */.markdown-body {font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;line-height: 1.6;color: #333;}.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 {margin-top: 24px;margin-bottom: 16px;font-weight: 600;line-height: 1.25;}.markdown-body h1 {padding-bottom: 0.3em;font-size: 2em;border-bottom: 1px solid #eaecef;}.markdown-body h2 {padding-bottom: 0.3em;font-size: 1.5em;border-bottom: 1px solid #eaecef;}.markdown-body p {margin-top: 0;margin-bottom: 16px;}.markdown-body a {color: #0366d6;text-decoration: none;}.markdown-body a:hover {text-decoration: underline;}.markdown-body code {font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;padding: 0.2em 0.4em;margin: 0;font-size: 85%;background-color: rgba(27, 31, 35, 0.05);border-radius: 3px;}.markdown-body pre {background-color: #f6f8fa;border-radius: 3px;padding: 16px;overflow: auto;line-height: 1.45;}.markdown-body pre code {padding: 0;margin: 0;background-color: transparent;border-radius: 0;}.markdown-body blockquote {padding: 0 1em;color: #6a737d;border-left: 0.25em solid #dfe2e5;margin: 0 0 16px 0;}.markdown-body table {border-collapse: collapse;margin: 16px 0;width: 100%;}.markdown-body table th, .markdown-body table td {padding: 6px 13px;border: 1px solid #dfe2e5;}.markdown-body table tr {background-color: #fff;border-top: 1px solid #c6cbd1;}.markdown-body table tr:nth-child(2n) {background-color: #f6f8fa;}.markdown-body img {max-width: 100%;}</style>
</head>
<body><div class="header"><h1>Markdown实时预览工具</h1></div><div class="toolbar"><div class="left-toolbar"><button id="upload-btn">上传Markdown文件</button><input type="file" id="file-input" accept=".md,.markdown"></div><div class="right-toolbar"><button id="download-btn">下载HTML</button></div></div><div class="container"><div class="editor-pane"><textarea id="markdown-input" placeholder="在此输入Markdown文本..."># Markdown 实时预览工具这是一个使用 **marked.js** 实现的Markdown实时预览工具。## 功能特点- 左右分栏布局
- 左侧编辑,右侧实时预览
- 预览效果与导出的HTML一致
- 支持常见的Markdown语法### 代码示例```javascript
function hello() {console.log("Hello, Markdown!");
}
```### 表格示例```
| 语法 | 描述 |
|------|------|
| 标题 | 使用 `#` |
| 列表 | 使用 `-` 或 `*` |
| 链接 | `[text](url)` |
```> 提示:尝试在左侧编辑内容,右侧会实时更新预览效果。</textarea></div><div class="preview-pane"><div id="preview-content" class="preview-content markdown-body"></div></div></div><script>// 获取DOM元素const markdownInput = document.getElementById('markdown-input');const previewContent = document.getElementById('preview-content');const downloadBtn = document.getElementById('download-btn');const uploadBtn = document.getElementById('upload-btn');const fileInput = document.getElementById('file-input');// 配置marked.jsmarked.setOptions({breaks: true,gfm: true,highlight: function(code, lang) {// 这里可以添加代码高亮逻辑,如果需要可以使用highlight.jsreturn code;}});// 初始渲染updatePreview();// 监听输入变化markdownInput.addEventListener('input', updatePreview);// 更新预览函数function updatePreview() {const markdownText = markdownInput.value;previewContent.innerHTML = marked.parse(markdownText);}// 上传文件处理uploadBtn.addEventListener('click', function() {fileInput.click();});fileInput.addEventListener('change', function(e) {const file = e.target.files[0];if (!file) return;const reader = new FileReader();reader.onload = function(e) {markdownInput.value = e.target.result;updatePreview();};reader.readAsText(file);});// 下载HTML文件downloadBtn.addEventListener('click', function() {const markdownText = markdownInput.value;const htmlContent = marked.parse(markdownText);const htmlTemplate = `<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Markdown导出</title><style>body {font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;line-height: 1.6;color: #333;max-width: 800px;margin: 0 auto;padding: 20px;}h1, h2, h3, h4, h5, h6 {margin-top: 24px;margin-bottom: 16px;font-weight: 600;line-height: 1.25;}h1 {padding-bottom: 0.3em;font-size: 2em;border-bottom: 1px solid #eaecef;}h2 {padding-bottom: 0.3em;font-size: 1.5em;border-bottom: 1px solid #eaecef;}p {margin-top: 0;margin-bottom: 16px;}a {color: #0366d6;text-decoration: none;}a:hover {text-decoration: underline;}code {font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;padding: 0.2em 0.4em;margin: 0;font-size: 85%;background-color: rgba(27, 31, 35, 0.05);border-radius: 3px;}pre {background-color: #f6f8fa;border-radius: 3px;padding: 16px;overflow: auto;line-height: 1.45;}pre code {padding: 0;margin: 0;background-color: transparent;border-radius: 0;}blockquote {padding: 0 1em;color: #6a737d;border-left: 0.25em solid #dfe2e5;margin: 0 0 16px 0;}table {border-collapse: collapse;margin: 16px 0;width: 100%;}table th, table td {padding: 6px 13px;border: 1px solid #dfe2e5;}table tr {background-color: #fff;border-top: 1px solid #c6cbd1;}table tr:nth-child(2n) {background-color: #f6f8fa;}img {max-width: 100%;}</style>
</head>
<body>
${htmlContent}
</body>
</html>`;const blob = new Blob([htmlTemplate], { type: 'text/html' });const url = URL.createObjectURL(blob);const a = document.createElement('a');a.href = url;a.download = 'markdown-export.html';document.body.appendChild(a);a.click();document.body.removeChild(a);URL.revokeObjectURL(url);});</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-前置基础

前言 基础基础 package org.example;public class Main {int a 10;String s1 "你好";public static void main(String[] args) {System.out.println(a);System.out.println(s1);} } 发现报错位置 public class Main {static int a 10;static String s1 "你好…

python字符串方法

1. capitalize&#xff1a; 是第一个字符大写&#xff0c;其余小写 2. encode&#xff1a; 将字符串转换为字节串&#xff08;bytes&#xff09;&#xff0c;默认使用 UTF-8 编码。 3. format&#xff1a; format是 Python 中字符串对象的内置方法&#xff0c;语法为S.form…

Java详解LeetCode 热题 100(24):LeetCode 234. 回文链表(Palindrome Linked List)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 回文链表的特征2.2 核心难点 3. 解法一&#xff1a;转换为数组法3.1 算法思路3.2 详细图解3.3 Java代码实现3.4 详细执行过程演示3.5 执行结果示例3.6 使用数组而非ArrayList的优化版本3.7 复杂度分析3.8 优缺点分析 4. 解…

平板电脑如何通过EN 18031认证

平板电脑若需通过 EN 18031 认证&#xff08;欧盟无线电设备网络安全标准&#xff0c;属于 CE RED 指令的一部分&#xff09;&#xff0c;需满足其针对互联网连接设备和数据处理设备的安全要求。以下是详细的认证流程、技术要求和操作指南&#xff1a; 一、认证背景与法规基础…

KaiwuDB在边缘计算领域的应用与优势

KaiwuDB 在边缘计算场景中主要应用于 工业物联网&#xff08;IIoT&#xff09;、智能电网、车联网 等领域&#xff0c;通过其分布式多模架构和轻量化设计&#xff0c;在边缘侧承担 数据实时处理、本地存储与协同分析 的核心作用。以下是具体案例和功能解析&#xff1a; 1. 典型…

MP4文件声音与视频分离

最近学习PR剪辑 要添加视频文件和音频文件 但是直接给MP4文件 得到的是一个整体 不管怎么切分 都是无法得到单独的整体 这就需要将视频文件和音频文件分离 我推荐使用ffmpeg工具进行分离 夸克链接&#xff1a;https://pan.quark.cn/s/8dbc3bfbc5d4 百度链接: https://pan.ba…

山洪径流过程及洪水淹没数值模拟

气候变化背景下&#xff0c;极端天气导致的洪水事件将更加频发。快速城市化对流域下垫面的改变&#xff0c;及人类活动向洪泛区的扩张。二者共同使得全世界多数人类活动高度聚集区的洪水风险增加。洪水淹没危险性&#xff08;各种年遇型洪水淹没&#xff09;是洪水损失评估、风…

Rust 通用代码生成器:莲花,红莲尝鲜版三十六,图片初始化功能介绍

Rust 通用代码生成器&#xff1a;莲花&#xff0c;红莲尝鲜版三十六&#xff0c;图片初始化功能介绍 Rust 通用代码生成器莲花&#xff0c;红莲尝鲜版三十六。支持全线支持图片预览&#xff0c;可以直接输出带图片的哑数据模式快速原型。哑数据模式和枚举支持图片。哑数据和枚…

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…

Acrobat DC v25.001 最新专业版已破,像word一样编辑PDF!

在数字化时代&#xff0c;PDF文件以其稳定性和通用性成为了文档交流和存储的热门选择。无论是阅读、编辑、转换还是转曲&#xff0c;大家对PDF文件的操作需求日益增加。因此&#xff0c;一款出色的PDF处理软件不仅要满足多样化的需求&#xff0c;还要通过简洁的界面和强大的功能…

CSS中justify-content: space-between首尾贴边中间等距(两端元素紧贴左右边缘,中间元素等距均匀分布)

justify-content: space-between; 是 CSS Flexbox 布局中的一个属性值&#xff0c;主要作用是在弹性容器的主轴方向上均匀分布子元素&#xff0c;具有以下核心特性&#xff1a; 作用效果&#xff1a; 首尾贴边 第一个子元素紧贴容器起始端 最后一个子元素紧贴容器结束端 中…

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…

全球知名具身智能/AI机器人实验室介绍之AI FACTORY基于慕尼黑工业大学

全球知名具身智能/AI机器人实验室介绍之AI FACTORY基于慕尼黑工业大学 TUM AI FACTORY&#xff0c;即KI.FABRIK&#xff0c;是德国慕尼黑工业大学&#xff08;TUM&#xff09;在巴伐利亚州推出的一个旗舰项目&#xff0c;旨在打造未来工厂&#xff0c;将传统工厂转变为由人工智…

DRV8833 电机控制芯片

引脚分配如图&#xff1a; 要让芯片运行需要将STBY拉高 IN1 IN2 分两组 对应 AO BO&#xff0c;同时拉高电平可以进行刹车&#xff08;慢速衰减。 芯片本身引脚定义&#xff1a; 控制真值表&#xff1a;

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…

区块链技术相关

区块链技术参考&#xff1a;区块链 多领域 一、区块链技术演进与2025年核心突破 2025年&#xff0c;区块链技术已从单一分布式账本演变为融合人工智能、物联网、隐私计算的多维技术栈。零知识证明&#xff08;ZKP&#xff09;在性能优化上取得关键进展&#xff0c;以太坊等主流…

C语言字符数组输入输出方法大全(附带实例)

在 C语言中&#xff0c;字符数组是一种特殊的数组&#xff0c;用于存储和处理字符串。理解字符数组的输入和输出操作对于初学者来说至关重要&#xff0c;因为这是处理文本数据的基础。 字符数组的定义与初始化 在讨论输入输出之前&#xff0c;我们先来回顾一下字符数组的定义…

前端下载文件,文件打不开的问题记录

需求&#xff1a; 下载是很常见的接口&#xff0c;但是经常存在下载的文件异常的问题。此处记录一个常见的错误。 分析&#xff1a; 1、接口请求需要配置{responseType: ‘blob’}&#xff0c;此时要求返回的格式为blob&#xff0c;进而进行下载。 const res await axios.…

HttpServletRequest常用方法

方法说明示例String getMethod()获取请求的 HTTP 方法&#xff08;如 GET、POST 等&#xff09;。request.getMethod() 返回 "GET"String getRequestURI()获取请求的 URI&#xff08;路径部分&#xff0c;不包括域名和协议&#xff09;。请求 http://localhost:8080/…

day46python打卡

知识点回顾&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通道注意力&#xff1a;模型的定义和插入的位置通道注意力后的特征图和热力图 内…