实现Editor.md编辑器写文章,并在前台显示

简介:
开源在线 Markdown 编辑器,推荐使用。
官网:https://pandao.github.io/editor.md/

下载安装

https://github.com/pandao/editor.md/archive/master.zip
下载解压下来的文件夹是:editor.md-master

截取的一部分

1.examples文件中是使用PHP做的所有示例(可以在文档编辑器里打开,并查看源代码);
2.lib文件夹中是editor.md所依赖的第三方js资源;
3.plugins文件夹中是如emoji表情支持、代码格式化等插件;

在html页面嵌入编辑器

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <!--需要引入的css文件-->
        <link rel="stylesheet" href="editor.md-master/css/editormd.min.css" />
    </head>
    <body>
        <!--模拟表单传输数据到后台-->
        <form action="./add.php" method="post" enctype="multipart/form-data" accept-charset="UTF-8">        
        <div id="my-editormd">
            <!--Editor.md可以自动附加<textarea>标签-->
            <textarea id="my-editormd-markdown-doc" name="my-editormd-markdown-doc" style="display:none;"></textarea>
                                        <!-- 注意:name属性的值-->
<!--textarea中name属性值,应该跟着div的ID"my-editormd"值来定,即(div的id值+)-markdown-doc-->
/***********editormd还会创建一个name=(div的id值+html-code)的textarea见下**********/
        </div>
        <input type="submit" value="  Send the artcile !" />
        </from>
        <!--需要引入的js文件和js配置-->
        <script src="editor.md-master/examples/js/jquery.min.js"></script>
        <script src="editor.md-master/editormd.min.js"></script>
        <script type="text/javascript">
            $(function() {
                var editor = editormd("my-editormd", {//上面div的id值
                    width: "90%",
                    height: 540,
                    theme : "dark", //主题
                    path: "editor.md-master/lib/" // 这里我的html文件和editor.md-master文件位置如下图
                    saveHTMLToTextarea : true//这个配置,方便post提交html源码表单,保存 HTML 到 Textarea它关乎后端是否可以获取到值
                });
            });
            //更多的editormd配置请参考下面或官网
        </script>
    </body>
</html>

另外一个textarea

需要html格式的文本可以从这获取,name都告诉你了,该知道怎么办吧

另外一个textarea

html文件和editor.md-master文件位置
位置
更多editormd配置
width: "90%",
height: 740,
path : '../lib/',
theme : "dark", //主题
previewTheme : "dark",
editorTheme : "pastel-on-dark",
markdown : md,
codeFold : true,
//syncScrolling : false,
saveHTMLToTextarea : true,    // 保存 HTML 到 Textarea
searchReplace : true,
//watch : false,                // 关闭实时预览
htmlDecode : "style,script,iframe|on*",            // 开启 HTML 标签解析,为了安全性,默认不开启    
//toolbar  : false,             //关闭工具栏
//previewCodeHighlight : false, // 关闭预览 HTML 的代码块高亮,默认开启
emoji : true,
taskList : true,
tocm            : true,         // Using [TOCM]
tex : true,                   // 开启科学公式TeX语言支持,默认关闭
flowChart : true,             // 开启流程图支持,默认关闭
sequenceDiagram : true,       // 开启时序/序列图支持,默认关闭,
//dialogLockScreen : false,   // 设置弹出层对话框不锁屏,全局通用,默认为true
//dialogShowMask : false,     // 设置弹出层对话框显示透明遮罩层,全局通用,默认为true
//dialogDraggable : false,    // 设置弹出层对话框不可拖动,全局通用,默认为true
//dialogMaskOpacity : 0.4,    // 设置透明遮罩层的透明度,全局通用,默认值为0.1
//dialogMaskBgColor : "#000", // 设置透明遮罩层的背景颜色,全局通用,默认为#fff
 /**上传图片相关配置如下*/
imageUpload : true,//开启上传图片吗?
imageFormats : ["jpg", "jpeg", "gif", "png", "bmp", "webp"],//图片支持的格式
imageUploadURL : "editor.md-master/examples/php/upload.php", //处理图片上传的url
                    //上面这个地址是官网给定了一个处理上传图片的php的demo 当然后端的代码得自己写
onload : function() {
    console.log('onload', this);
    //this.fullscreen();
    //this.unwatch();
    //this.watch().fullscreen();

    //this.setMarkdown("#PHP");
    //this.width("100%");
    //this.height(480);
    //this.resize("100%", 640);
}

关于图片上传

首先后端自己写,还有官网给的php-demo我没成功啊。。难道我。漏了点什么。。有没有大佬实现成功的

//editor.md期望得到一个json格式的上传后的返回值,格式是这样的:
/*
{
    success : 0 | 1,           // 0 表示上传失败,1 表示上传成功
    message : "提示的信息,上传成功或上传失败及错误信息等。",
    url     : "图片地址"        // 上传成功时才返回
}
//返回的参数success的值不是字符串“0”和“1”,而是数字0和1,后台返回的时候一定要注意
*/

前台显示

展示内容有两种方式

  • 一种方式是直接展示html格式的内容
  • 第二种方式是页面加载markdown格式内容,然后通过editor.md再次渲染成html格式。

1.直接展示html

<link rel="stylesheet" href="editor.md-master/css/editormd.min.css" />
<div id="my-content">
    ${content}      <!--${content/}为获取后台的html格式内容。-->
</div>
<script src="editor.md-master/examples/js/jquery.min.js"></script>
<script src="editor.md-master/editormd.min.js"></script>
<script src="editor.md-master/lib/marked.min.js"></script>
<script src="editor.md-master/lib/prettify.min.js"></script>
<script type="text/javascript">
    $(function () {
        editormd.markdownToHTML("my-content");
    })
</script>

2.如果第二种:
首先引入必要JS(下面不是所有必要,官网说依赖这么多):

<script src="editor.md-master/examples/js/jquery-min.js"></script>
<script src="editor.md-master/lib/flowchart.min.js"></script>
<script src="editor.md-master/lib/jquery.flowchart.min.js"></script>
<script src="editor.md-master/lib/marked.min.js"></script>
<script src="editor.md-master/lib/prettify.min.js"></script>
<script src="editor.md-master/lib/raphael.min.js"></script>
<script src="editor.md-master/lib/sequence-diagram.min.js"></script>
<script src="editor.md-master/lib/underscore.min.js"></script>
<script src="editor.md-master/editormd.min.js"></script>

然后,本页面中,加入如下DIV以及css

<link rel="stylesheet" href="editor.md-master/css/editormd.min.css"/>
<div id="doc-content">
<textarea style="display:none;">
  ${content}        <!--${content/}为获取后台的md格式内容。-->
</textarea>
</div>

再加上如下js

<script type="text/javascript">
    var testEditor;
    $(function () {
        testEditor = editormd.markdownToHTML("doc-content", {//注意:这里是上面DIV的id
            htmlDecode: "style,script,iframe",
            emoji: true,
            taskList: true,
            tex: true, // 默认不解析
            flowChart: true, // 默认不解析
            sequenceDiagram: true, // 默认不解析
            codeFold: true,
    });});
 </script>

效果预览


模拟拿数据

模拟显示md格式的文本

最后重点:你嫌上面俩种方法都麻烦?

肯定有第三方帮助我门做啊。。
上代码你就懂了:

1.老外的工具:strapdown.js 官网http://strapdownjs.com/

<!DOCTYPE html>
<html>
<head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .navbar-fixed-top{
                display: none;
            }
        </style>
</head>
<body>
<xmp theme="readable" style="display:none;">
##hello world 

**写点东西做测试**

| 表格  |支持   |
| ------------ | ------------ |
|   吗|呀   |
</xmp>
</body>
<script src="http://strapdownjs.com/v/0.2/strapdown.js"></script>
</html>

国外的请下载下来然后改样式路径

它的gitHub:https://github.com/arturadib/strapdown

2.showdown.min.js
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body onload="convert()">
<div>
    <textarea id="content" style="display:none;" >
##hello world 

**写点东西做测试**

- 123

*斜体*
    </textarea>
    <div id="result">
</div>
<script src="https://cdn.bootcss.com/showdown/1.3.0/showdown.min.js"></script> 
<script>  
    function convert(){
        //获取要转换的文字
        var text = document.getElementById("content").value;
        //创建实例
        var converter = new showdown.Converter();
        //进行转换
        var html = converter.makeHtml(text);
        //展示到对应的地方  result便是id名称
     document.getElementById("result").innerHTML = html;
    }
</script>
    </body>
</html>

怎么不支持表格啊!!!!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,978评论 1 3
  • 1-------- 走进前端 2-------- jQuery 3-------- CSS 4-------- A...
    依依玖玥阅读 2,322评论 0 34
  • 大年初一。 家里人都出去旅游赏景了,我在家。收拾干净家里,决定上街看看热闹。 街上的确很热闹,各种玩的,各种吃的,...
    二胖爱穿小裙子阅读 383评论 0 1
  • 少则得,多则惑------老子《道德经》 01 卖豆腐的两夫妻,每天自给自足,日子过非常幸福。有一天夫妻俩突然拾到...
    赵新_思考者阅读 1,276评论 6 10