如何在前端页面中使用Markdown

news/2024/7/19 15:57:54 标签: 前端, js, markdown
markdown_views prism-atom-one-light">

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

项目的安装

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

$ npm install

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

markde<a class=js项目目录结构" />

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

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 文件拷贝到我们的项目中,然后就可以使用了

js_Markdown_49">使用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标签进行优化》


http://www.niftyadmin.cn/n/756630.html

相关文章

rsa互通密钥对生成及互通加解密(c#,java,php)

摘要 在数据安全上rsa起着非常大的作用&#xff0c;特别是数据网络通讯的安全上。当异构系统在数据网络通讯上对安全性有所要求时&#xff0c;rsa将作为其中的一种选择&#xff0c;此时rsa的互通性就显得尤为重要了。 本文参考网络资料&#xff0c;提供了rsa互通性的一种可行的…

html(三)

今天自己画了个安卓机器人,之前听徐大大讲过一次,查手册去动手的时候其实发觉不是很难,这种规则的图像还是很好画的,主要是用<div>标签和<span>标签去做的,通过CSS添加样式,感觉display这个属性蛮有用的,transform用起来也很方便. <!DOCTYPE html PUBLIC "…

Linux 管道命令系列 一 熟悉PIPE

什么是管道命令&#xff0c;但就名称来看应该分为 管道 和 命令 。 管道 先来看管道&#xff0c;我是这样理解管道的。管道就是在两个命令之间建立连接&#xff0c;也就是前一个的命令的标准输出结果是后一个命令的标准输入。这个过程就是通过管道来实现的。 管道命令执行流程…

选择最合适机器视觉照明的八个小技巧

机器视觉系统中的照明系统是极其重要的一部分&#xff0c;它的好坏直接影响着后面的图像处理。在听了一位日本光源专家的讲座之前&#xff0c;我其实对照明并不太了解&#xff0c;不就是将图像照亮以至于相机能够拍到图像吗&#xff1f;但事实并非如此&#xff0c;照明远非增强…

Linux提取命令 Cut

cut命令属于管道命令家族中的一员。cut属于提取命令&#xff0c;将一段数据经过分析后提取出我们想要的那些数据。一般情况下提取信息通常是针对一行一行来分析的。cut的意思就是切&#xff0c;没错这个命令的用处就是将一段信息给它切出来。其处理的信息是以行为单位的。下面我…

深入理解css中position属性及z-index属性

深入理解css中position属性及z-index属性 在网页设计中&#xff0c;position属性的使用是非常重要的。有时如果不能认识清楚这个属性&#xff0c;将会给我们带来很多意想不到的困难。 position属性共有四种不同的定位方法&#xff0c;分别是static、fixed、relative、absolute,…

Linux提取命令grep 有这一篇就够了

grep作为linux中使用频率非常高的一个命令&#xff0c;和cut命令一样都是管道命令中的一员。并且其功能也是对一行数据进行分析&#xff0c;从分析的数据中取出我们想要的数据。也就是相当于一个检索的功能。当然了&#xff0c;grep的功能要比cut强大的多了。grep检索的条件是多…

Linux管道命令系列 重定向命令tee

tee命令是linux管道命令家族中的一员&#xff0c;它的功能是将数据重定向到文件中。我们知道&#xff0c;数据重定向直接使用 > 就可以了。没错&#xff0c;>可以实现数据流重定向。但是它并不能使数据再导向标准输出&#xff08;standard output&#xff09;。而tee命令…