React中使用Jodit编辑器将带样式HTML转为Markdown的问题咨询
HTML转Markdown保留内联样式的实现方案
首先明确:原生Markdown语法本身不支持字体、字号这类自定义样式属性,要保留Jodit输出HTML中的样式,可通过以下方案实现:
- 核心逻辑:Markdown本身完全兼容内嵌原生HTML标签,所以不需要强行把所有内容都转为纯Markdown语法,直接保留带样式的HTML标签即可同时满足Markdown格式要求和样式保留需求。
- 基于Turndown自定义转换规则实现
Turndown支持自定义规则处理特定标签,你可以针对带style属性的标签编写专属转换逻辑,示例代码如下:
如果你还需要保留其他标签的样式,参照上述逻辑新增对应规则即可,所有需要保留的style属性都可以通过这种方式留存。import TurndownService from 'turndown'; const turndown = new TurndownService(); // 新增规则:保留带style属性的span标签及样式 turndown.addRule('preserveSpanWithStyle', { filter: node => node.nodeName === 'SPAN' && node.hasAttribute('style'), replacement: (content, node) => { const styleVal = node.getAttribute('style'); return `<span style="${styleVal}">${content}</span>`; } }); // 测试转换 const inputHtml = `<p><span style="font-family: Impact, Charcoal, sans-serif; font-size: 16px;">ME typing</span></p>`; const outputMarkdown = turndown.turndown(inputHtml); // 输出结果:<span style="font-family: Impact, Charcoal, sans-serif; font-size: 16px;">ME typing</span> - 渲染适配说明
后续需要将转换后的Markdown渲染为页面内容时,直接使用常规Markdown渲染器即可,所有内嵌的HTML标签会被正常解析,样式不会丢失。如果你的业务场景要求完全使用纯Markdown语法、不能内嵌HTML,目前没有通用实现方案,需要你基于业务需求自定义专属的Markdown扩展语法和对应的映射规则。
内容的提问来源于stack exchange,提问作者PremKumar
相关产品推荐
相关产品推荐

