插件地址

官方地址:https://pandao.github.io/editor.md/
使用示例:http://editor.md.ipandao.com/examples/index.html
github地址:https://github.com/pandao/editor.md

引入依赖

在入口htm文件中引入相关依赖,设置div

  1. <script src="jquery.min.js"></script>
  2. <script src="./plug/editormd/editormd.min.js"></script>
  3. <link rel="stylesheet" href="./plug/editormd/css/editormd.min.css" />
  4. <div id="test-editor">
  5. <textarea style="display:none;">### 关于 Editor.md</textarea>
  6. </div>

初始化编辑器

如果是使用react或vue等框架,因为editormd已经挂载到全局,使用window.editormd获取对象

  1. <script type="text/javascript">
  2. $(function() {
  3. var editor = editormd("test-editor", {
  4. // width : "100%",
  5. // height : "100%",
  6. path : "editormd/lib/", // 必须设置,编辑器相关模块
  7. markdown: 'hello world', // 初始内容
  8. emoji: true, // 表情
  9. saveHTMLToTextarea: true,
  10. // 工具栏设置
  11. toolbarIcons: function () {
  12. // Or return editormd.toolbarModes[name]; // full, simple, mini
  13. // Using "||" set icons align right.
  14. return ["undo", "redo", "|", "bold", "hr", "|", "preview", "watch", "|", "fullscreen", "info", "testIcon", "testIcon2", "file", "faicon", "||", "watch", "fullscreen", "preview", "testIcon"]
  15. },
  16. toolbarIconsClass: { // 指定一个FontAawsome的图标类
  17. testIcon: "fa-gears"
  18. },
  19. toolbarIconTexts: { // 如果没有图标,则可以这样直接插入内容,可以是字符串或HTML标签
  20. testIcon2: "测试按钮"
  21. },
  22. toolbarCustomIcons: { // 用于增加自定义工具栏的功能,可以直接插入HTML标签,不使用默认的元素创建图标(所有默认事件失效)
  23. file: `<input type="file" accept=".md" />`,
  24. faicon: `<i class="fa fa- star" onclick="alert('faicon'); "></i>`
  25. },
  26. toolbarHandlers: { // 自定义工具栏按钮的事件处理
  27. /**
  28. * @param {Object} cm CodeMirror对象
  29. * @param {Object} icon 图标按钮jQuery元素对象
  30. * @param {Object} cursor CodeMirror的光标对象,可获取光标所在行和位置
  31. * @param {String} selection 编辑器选中的文本
  32. */
  33. testIcon: function (cm, icon, cursor, selection) {
  34. //var cursor = cm.getCursor(); //获取当前光标对象,同cursor参数
  35. //var selection = cm.getSelection(); //获取当前选中的文本,同selection参数
  36. // 替换选中文本,如果没有选中文本,则直接插入
  37. cm.replaceSelection("[" + selection + ":testIcon]");
  38. // 如果当前没有选中的文本,将光标移到要输入的位置
  39. if (selection === "") {
  40. cm.setCursor(cursor.line, cursor.ch + 1);
  41. }
  42. // this == 当前editormd实例
  43. console.log("testIcon =>", this, cm, icon, cursor, selection);
  44. },
  45. testIcon2: function (cm, icon, cursor, selection) {
  46. cm.replaceSelection("[" + selection + ":testIcon2](" + icon.html() + ")");
  47. console.log("testIcon2 =>", this, icon.html());
  48. }
  49. },
  50. lang: { // 自定义按钮的提示文本,即title属性
  51. toolbar: {
  52. file: "上传文件",
  53. testIcon: "自定义按钮testIcon",
  54. testIcon2: "自定义按钮testIcon2",
  55. undo: "撤销 (Ctrl+Z)"
  56. }
  57. },
  58. // 本地图片上传(跨域请参考官网)
  59. imageUpload: true, // 设置本地上传按钮
  60. imageFormats: ['jpg', 'JPG', 'gif', 'GIF', 'png', 'PNG'] // 虽然计算机不区分大小写
  61. imageUploadURL: 'upload/file' // 上传地址
  62. // 编辑器加载完成或图片上传完成
  63. onload: function () {
  64. $("[type=\"file\"]").bind("change", function () {
  65. alert($(this).val());
  66. testEditor.cm.replaceSelection($(this).val());
  67. console.log($(this).val(), testEditor);
  68. });
  69. }
  70. });
  71. });
  72. </script>

注意事项

1、获取编辑器中所有图片地址:应该用正则匹配到这东西就可以了”editor.md(在线编辑器组件) - 图1

参考资料

https://blog.csdn.net/zhulier1124/article/details/80242300
https://www.jianshu.com/p/176a446e5b64
https://juejin.im/post/5ac2ecbd518825558c479d0e
https://blog.csdn.net/cnhome/article/details/82855271
https://zhidao.baidu.com/question/521582839.html
https://blog.csdn.net/JontyHua/article/details/90142999