quilljs

现在富文本编辑器轮子太多了,Github 上随便搜一下就有一堆,我需要实现的功能很简单,所以就佛系地选了 quilljs,quilljs 是一个轻量级的富文本编辑器。

链接:

  • 官网:quilljs.com/
  • Github: github.com/quilljs/qui…
  • React版本:github.com/zenoamaro/r…
  • Vue版本:github.com/surmon-chin…

基础功能就不多说了,看文档就好。

主要是记录一下如何在 toolbar 上自定义一个按钮并实现自定义格式化。

toolbar

toolbar 相关文档:quilljs.com/docs/module…

基础用法

可以看到文档中有这么一段代码:

var toolbarOptions = [['bold', 'italic', 'underline', 'strike'],        // toggled buttons['blockquote', 'code-block'],[{ 'header': 1 }, { 'header': 2 }],               // custom button values[{ 'list': 'ordered'}, { 'list': 'bullet' }],[{ 'script': 'sub'}, { 'script': 'super' }],      // superscript/subscript[{ 'indent': '-1'}, { 'indent': '+1' }],          // outdent/indent[{ 'direction': 'rtl' }],                         // text direction[{ 'size': ['small', false, 'large', 'huge'] }],  // custom dropdown[{ 'header': [1, 2, 3, 4, 5, 6, false] }],[{ 'color': [] }, { 'background': [] }],          // dropdown with defaults from theme[{ 'font': [] }],[{ 'align': [] }],['clean']                                         // remove formatting button
];var quill = new Quill('#editor', {modules: {toolbar: toolbarOptions},theme: 'snow'
});
复制代码

这是 toolbar 上支持的一些格式化功能,比如 加粗、斜体、水平对齐等等常见的文档格式化。

可是我发现,貌似不太够用啊。

比如我想插入一些 {{name}} 这样的文本,并且是加粗的,总不能让我每次都输入 {{}} 吧,麻烦而且容易遗漏,得做成自动格式化的。

随手翻了一下文档,quilljs 支持本地 moduletoolbar 上每一个格式化功能可以看作是一个 module,翻翻源码:

看一下 link.js 吧,简化了一下:

import Inline from '../blots/inline';class Link extends Inline {static create(value) {let node = super.create(value); // 创建一个节点node.setAttribute('href', value); // 将输入的 value 放到 hrefnode.setAttribute('target', '_blank'); // target 设为空return node;}static formats(domNode) {return domNode.getAttribute('href'); // 获取放在 href 中的 value}
}
Link.blotName = 'link'; // bolt name
Link.tagName = 'A'; // 渲染成 html 标签export { Link as default };复制代码

是不是实现一个简单的自定义格式化看上去很简单。

实现

以 vue 为例哈,大同小异。

初始化

<quill-editor ref="myTextEditor"class="editor-area"v-model="content":options="editorOption"@blur="onEditorBlur($event)">
</quill-editor>
复制代码
const toolbarOptions = [[{ 'header': [1, 2, 3, 4, 5, 6, false] }],['bold', 'italic', 'underline'],[{ 'color': [] }, { 'background': [] }],[{ 'align': [] }],['formatParam'],
];
data() {return {editorOption: {modules: {toolbar: {container: toolbarOptions,handlers: {},},},}};
},
editor() {return this.$refs.myTextEditor.quill;
}
复制代码

创建

在项目组件的目录下创建一个 formatParam.js

import Quill from 'quill';const Inline = Quill.import('blots/inline');class formatParam extends Inline {static create() {const node = super.create();return node;}static formats(node) {return node;}
}
formatParam.blotName = 'formatParam';
formatParam.tagName = 'span';export default formatParam;
复制代码

我这里没有对 valuenode 做任何处理,然后在 handlers 里做处理,貌似有点蠢。。

注册

import { quillEditor, Quill } from 'vue-quill-editor';
import FormatParam from './formatParam';Quill.register(FormatParam);
复制代码

使用

首先在 toolbar 上放一个按钮是必须的,当然也可以放 icon,我就简单地处理一下:

mounted() {const formatParamButton = document.querySelector('.ql-formatParam');formatParamButton.style.cssText = "width:80px; border:1px solid #ccc; border-radius:5px; padding: 0;";formatParamButton.innerText = "添加参数";
}
复制代码

效果如图:

然后就是要注册这个按钮的点击事件:

handlers: {formatParam: () => {const range = this.editor.getSelection(true); // 获取光标位置const value = prompt('输入参数名(如:name)'); // 弹框输入返回值if (value) {this.editor.format('formatParam', value); // 格式化this.editor.insertText(range.index, `{{${value}}}`); // 显示在编辑器中this.editor.setSelection(range.index + value.length + 4, Quill.sources.SILENT); // 光标移到插入的文字后,并且让按钮失效}},
}
复制代码

渲染 html

我在自定义格式化的时候没直接渲染成 html,然后在保存的时候做了一下:

watch: {content() {const { content } = thisconst result = content.replace(/\{\{(.*?)\}\}/g, (match, key) => `<span class="${key}">{{${key}}}</span>`);updateState({ content: result });},
}
复制代码

这样就好了,想要插入一个参数的时候点击工具栏上的按钮,就会直接在编辑器里插入 {{xxx}} 的文本了。

效果如图:

总结

其实理论上应该可以在 formatParam.js 中把所有事情都做掉,也就不用最后的正则替换了。

按照这个思路,我们可以在富文本编辑器按照自己所需要的格式插入任何自定义内容。

参考链接:

  • github.com/quilljs/qui…
  • quilljs.com/guides/clon…

原文链接:quill 富文本编辑器自定义格式化

quill 富文本编辑器自定义格式化相关推荐

  1. quill富文本编辑器自定义图片上传

    github老哥的代码 const editor = new Quill('#quill-editor', {bounds: '#quill-editor',modules: {toolbar: th ...

  2. Quill 富文本编辑器二次封装

    Quill 富文本编辑器二次封装 Quill 是一个很流行的富文本编辑器,github 上 star 大约 21k.但是很少项目中使用时直接使用它,都要对其进行二次封装,你作为一个页面仔是挡不住有想法 ...

  3. vue quill富文本编辑器上传图片遇到的坑

    在使用quill富文本编辑器上传图片的时候,很多地方都是成功的,但是唯有一处,上传图片总是失败,由此后端的朋友就说可以html标签转换成JSON字符串上传上去,展示的时候在转换回来,即可解决问题. 由 ...

  4. quill富文本编辑器——修改默认图片、视频上传功能

    quill富文本编辑器默认的图片上传是将图片地址转换为base64格式,可能会导致字段过长:默认的视频上传是插入iframe标签,与需要的video标签不符合 图片上传 初始化编辑器时重写image上 ...

  5. *使用quill富文本编辑器的插件,自定义formData图片上传

    官网地址:https://quilljs.com 项目需求:自带的上传图片是base64,直接入库的话,请求头太长,导致网页十分十分的卡,所以才改用formData自定义上传(改完之后,相当于覆盖了他 ...

  6. quill 富文本编辑器

    富文本quill 富文本框中上传图片的缩放功能 vue.config.js添加如下配置 import "./resizeImg.js"➡ resizeImg.js下载链接 3.以下 ...

  7. vue中使用quill富文本编辑器

    因为公司的需求,对比了线在很火的几款富文本编辑器,最终选定了quill,他够轻量,拓展性也比较高,除了文档是英文的阅读不方便之外,都很适合公司项目.故整理出来,也方便以后使用. 在网上找了一个中文文档 ...

  8. vue-quill-editor 富文本编辑器 自定义上传图片

    ① 安装插件,以及引入插件 使用命令:npm install vue-quill-editor -S ② main.js 中引入 // 导入富文本编辑器 import VueQuillEditor f ...

  9. quill富文本编辑器quill粘贴图片上传服务器

    强大的富文本编辑器:quill github:32k start++,:https://github.com/quilljs/quill quill粘贴图片上传服务器 <link href=&q ...

最新文章

  1. java在mac下开发环境_Java开发环境安装(MacOS、Windows)
  2. SQL 获取数据IP,ServerName,ClientIPAddress
  3. javaweb学习总结(二十四):jsp传统标签开发
  4. 帆软报表(finereport)使用Event 事件对象 (target)修改提示框样式
  5. perl 安装GD 出错解决方案
  6. linux中匿名用户怎么登陆_南京课工场IT培训:Linux中vsftpd服务配置(匿名,用户,虚拟用户)...
  7. 信息学奥赛一本通 1163:阿克曼(Ackmann)函数
  8. Linux-Ubuntu安装JDK
  9. c语言指针动态分配数组长度,C语言安全之数组长度与指针实例解析
  10. 怎么关闭计算机139端口,win10系统关闭139端口的处理教程
  11. 练习27——IO流的所有用法(二)
  12. java socket 连接异常_JAVA Socket连接服务器时可能抛出的异常
  13. 前端面试题及解答(尽量口语化,模拟面试现场时的回答)
  14. 个人博客系统的设计与实现
  15. 小小突击队服务器维护多久,《小小突击队》08月06日更新公告
  16. 太壹币——中国互金区块链组长李礼辉:发达国家对虚拟货币态度正在转变
  17. [单片机框架] [kv_sys] 实现一个简易KV键值系统(最终版)
  18. linux中哪个系统适合做服务器
  19. matlab第六章课后答案,MATLAB教程2012a第6章习题解答-张志涌
  20. Stay hungry stay young

热门文章

  1. 皮肤控件 IrisSkin4.dll / IrisSkin2.dll的下载及调用样例
  2. 小米手表如何安装APP (GPS定位精度)
  3. 微信小程序(一)初步,包括(初步了解微信小程序,小程序项目结构,小程序宿主环境,发布与上线等)
  4. docker的使用与进阶
  5. windows使用/服务(7)电脑手机之间如何互传文件(华为分享)
  6. Linux用户需要知道的官方网站
  7. 微信小程序商城(Java版)
  8. matlab 生成audio vst plugin
  9. [GFL]Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Dete
  10. 冷库计算机系统验证,冷库验证 冷链系统验证