如何在前端页面中使用Markdown

近期在自己的项目中加入了对Markdown的支持,主要用到的是markedjs这个项目。该项目托管在github上,地址为:https://github.com/markedjs/marked/

项目的安装

下载项目之后,在根目录下执行如下命令进行安装

$ npm install

安装完成之后最终项目的目录结构如下

markdejs项目目录结构

我们看一下根目录下的package.json文件,部分内容如下

"scripts": {
    "test": "jasmine --config=jasmine.json",
    "test:all": "npm test && npm run test:lint",
    "test:unit": "npm test -- test/unit/**/*-spec.js",
    "test:specs": "npm test -- test/specs/**/*-spec.js",
    "test:lint": "eslint bin/marked .",
    "test:redos": "node test/vuln-regex.js",
    "test:update": "node test/update-specs.js",
    "rules": "node test/rules.js",
    "bench": "npm run rollup && node test/bench.js",
    "lint": "eslint --fix bin/marked .",
    "build:reset": "git checkout upstream/master lib/marked.js lib/marked.esm.js marked.min.js",
    "build": "npm run rollup && npm run minify",
    "build:docs": "node build-docs.js",
    "rollup": "npm run rollup:umd && npm run rollup:esm",
    "rollup:umd": "rollup -c rollup.config.js",
    "rollup:esm": "rollup -c rollup.config.esm.js",
    "minify": "uglifyjs lib/marked.js -cm  --comments /Copyright/ -o marked.min.js",
    "minifyMessage": "uglifyjs ext/onmpwmessage.js -cm  --comments /Copyright/ -o ext/onmpwmessage.min.js",
    "preversion": "npm run build && (git diff --quiet || git commit -am build)"
  }

执行如下命令

$ npm run build

命令执行完成会生成marked.min.js文件
编译生成markedJs

最后我们将 marked.min.js 文件拷贝到我们的项目中,然后就可以使用了

使用markedjs 解析编译Markdown内容

在页面中引入 marked.min.js 文件

<script type="text/javascript" src="/js/marked.min.js"></script>

接下来就是对内容的解析了,首先要初始化marked对象

marked.setOptions({
    renderer: new marked.Renderer(),
    gfm: true,
    tables: true,
    breaks: false,
    pedantic: false,
    sanitize: false,
    smartLists: true,
    smartypants: false,
    highlight: function (code,lang) {
        //使用 highlight 插件解析文档中代码部分
        return hljs.highlightAuto(code,[lang]).value;
    }
});

然后调用marked函数进行解析,完整代码如下

<script type="text/javascript" src="marked.min.js></script>

<div class="markdown">
  ## URL
  * Google
  * Bing

  ## a标签
  [迹忆客](https://www.jiyik.com)
</div>

<script type="text/javascript">
marked.setOptions({
       renderer: new marked.Renderer(),
       gfm: true,
       tables: true,
       breaks: false,
       pedantic: false,
       sanitize: false,
       smartLists: true,
       smartypants: false,
       highlight: function (code,lang) {
            //使用 highlight 插件解析文档中代码部分
            return hljs.highlightAuto(code,[lang]).value;
       }
});

let text = marked($(".markdown").text());
$(".markdown").html(text);
</script>

实际情况中我们可以通过ajax从后台获取markdown的内容,然后通过marked解析成 html,将解析后的 html 内容放到页面中相应的地方即可。

该项目对a标签的解析不太完美,可能很多Markdown的Js都一样,就是不支持 a标签的target属性,也就是没法新窗口打开。

针对a标签target属性这一问题,本人对MarkedJs项目进行了一些优化,只要在中括号中文本的前面加一个叹号 就可以给a标签加上 target="_blank" 属性,使得其可以在新窗口打开链接。
例如 [!迹忆客](https://www.jiyik.com) 可以被解析成如下的a标签

<a href="https://www.jiyik.com" target="_blank">迹忆客</a>

有兴趣的可以参考这篇文章 《页面中使用markdown 并对a标签进行优化》

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
前端整合Markdown是指将Markdown编辑器整合到前端页面使用户可以在页面上编辑和展示Markdown格式的文本。这个过程可以通过使用Vue组件来实现。\[1\] 首先,你可以使用Vue组件来创建一个Markdown编辑器组件,该组件可以提供编辑和展示Markdown文本的功能。你可以使用Vue的相关指令和事件来实现文本的编辑和保存功能。\[2\] 其次,你可以在前端页面引入这个Markdown编辑器组件,并将其放置在合适的位置。用户可以在这个组件输入Markdown文本,并进行编辑和保存操作。\[1\] 最后,你可以在前端页面使用Markdown展示组件来展示已保存的Markdown文本。这个组件可以将Markdown文本转换为HTML,并在页面上显示出来。\[1\] 总结来说,前端整合Markdown的过程包括创建Markdown编辑器组件、引入编辑器组件到前端页面,并使用Markdown展示组件来展示已保存的Markdown文本。这样用户就可以在前端页面上方便地编辑和展示Markdown文本了。\[1\] #### 引用[.reference_title] - *1* *2* [Vue整合Markdown组件+SpringBoot文件上传+代码差异对比](https://blog.csdn.net/FUTEROX/article/details/127455288)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Springboot整合markdown编辑器【保姆级简易教程】](https://blog.csdn.net/weixin_44045828/article/details/129579946)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迹忆客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值