layui添加富文本编辑器_定制富文本编辑器

27de495638e1446d810d4dc76635255f.png

定制富文本编辑器

很多时候并不能满足我们对文本输入的需求,当我们需要为输入的文本添加格式时,我们需要使用像quill这样的富文本编辑器来完成富文本的输入。本文将会详细的讲解如何使用羽毛笔定制一个自己的富文本编辑器。这里面定制了两个特殊的功能(添加卡片,添加图片墙),感兴趣的同学可以先看一下实现后的效果:富文本编辑器接下来将会讲解如何在quill的基础上实现定制化的富文本编辑器。

简介

一个好的富文本编辑器的标志就是它能够支持多少种格式,而羽毛笔则支持无限种类的格式。你可以在羽毛笔上自定义任意种类的文本。并且,如果你不想自定义个任何功能,那么羽毛笔也是极易上手的
var quill = new Quill('#editor', {  modules: { toolbar: true },  theme: 'snow'})
如何在Quill上定制功能

quill提供了非常细粒度,定义良好的API,我们可以在此基础之上进行定制化开发自己的富文本编辑器。(环境为vue + iview,使用iview进行辅助样式开发)

首先我们从最简单的demo入手。

<template>  <div id="editor" class="editor">div>template><script>import Quill from "quill";export default {  mounted() {    const quill = new Quill("#editor", {      theme: "snow",      placeholder: "请在此开始编辑..."    });  }};script>

这是一个替代参数条件下的一个富文本编辑器,我们首先对Toolbar进行替换,Toolbar是modules的一部分。

d4ce75254ddf454e531e1a68eddae8b5.png

我们需要在新建quill实例的时候覆盖原来的工具栏,并使用自己的工具栏元素。

<template>  <div class="container">    <div id="toolbar">      <Tooltip content="加粗" placement="bottom">        <button class="ql-bold">button>      Tooltip>      <Tooltip content="倾斜" placement="bottom">        <button class="ql-italic">button>      Tooltip>      <Tooltip content="下划线" placement="bottom">        <button class="ql-underline">button>      Tooltip>      <Tooltip content="删除线" placement="bottom">        <button class="ql-strike">button>      Tooltip>    div>    <div id="editor" class="editor">div>  div>template><script>import Quill from "quill";export default {  mounted() {    const quill = new Quill("#editor", {      theme: "snow",      modules: {        toolbar: "#toolbar"      },      placeholder: "请在此开始编辑..."    });  }};script><style lang="less" scoped>style>
引入我们的工具栏的样式变成如下的样子。622b4ab8288b244020d385d4c6f7eab1.pngquill在初始化时会读取#toolbar元素,并获取其子计数器的类名,对于ql-bold,quill会截取ql-之后的部分,并且和已经注册的handlers做匹配,上面的粗体斜体下划线删除存在注册好的handler。当我们单击工具栏中的元素时便会调用handler对富文本内容进行格式化。当我们需要添加一个本不存在的格式化效果时我们还需要在模块时,下面添加一个可以添加卡片的按钮,并添加其对应的处理程序。
<template>  <div class="”container“">    <div id="toolbar">      <Tooltip content="添加卡片" placement="bottom">        <button class="ql-card">          <Icon type="md-card" />        button>      Tooltip>    div>    <div id="editor" class="editor">div>  div>template><script>import Quill from "quill";export default {  mounted() {    const quill = new Quill("#editor", {      theme: "snow",      modules: {        toolbar: {          container: "#toolbar",          handlers: {            card: () => { // 属性名称要与 ql-xxx 对应              console.log(`点击了 card`);            }          }        }      },      placeholder: "请在此开始编辑..."    });  }};script><style lang="less" scoped>style>
接下来我们为这个按钮添加实际的效果。在我们Quill中,使用Blots表示节点,我们可以认为Blots对应Dom中的Node。当我们需要在quill中添加一自定义的Blots队列时,我们需要让其继承自Blots队列。
const BlockEmbed = Quill.import('blots/block/embed')function customCard(node) {  // 在一个节点中插入自定义的 dom  const leftDiv = document.createElement('div')  leftDiv.className = 'media-container'  const mediaDiv = document.createElement('div')  mediaDiv.style['background-image'] = `url(${value.image})`  mediaDiv.className = 'media'  leftDiv.appendChild(mediaDiv)  const rightDiv = document.createElement('div')  rightDiv.className = 'content-container'  const titleP = document.createElement('p')  titleP.className = 'title'  titleP.innerText = value.title  const authorP = document.createElement('p')  authorP.className = 'author'  authorP.innerText = value.author  const contentP = document.createElement('p')  contentP.className = 'content'  contentP.innerText = value.content  rightDiv.appendChild(titleP)  rightDiv.appendChild(authorP)  rightDiv.appendChild(contentP)  node.appendChild(leftDiv)  node.appendChild(rightDiv)}// 自定义卡片节点class CardBlot extends BlockEmbed {  static create(value) {    const node = super.create()    // 新建节点时传入的数据    node.dataset.title = value.title    node.dataset.image = value.image    node.dataset.content = value.content    node.dataset.author = value.author    customizeCard(node)    node.setAttribute('contenteditable', false) // 设置该节点不可编辑    return node  }  static value(node) {    // 这里需要返回 create 函数中传入的数据    return node.dataset  }}CardBlot.blotName = 'card' // quill 中的标记名称CardBlot.tagName = 'div' // dom 节点名称CardBlot.className = 'card' // dom 中真实的 class 名称Quill.register(CardBlot)
同时我们还需要添加对应的处理程序。
const CARD_INFO = {  title: 'Quill 编辑器',  author: 'jhchen',  content:    'Quill是一种现代的富文本编辑器,旨在实现兼容性和可扩展性。它由Jason Chen和Byron Milligan创建,并由Slab积极维护。 ',  image:    'http://neau-lib-static.test.upcdn.net/quill/resource/1576812308405-0.0544z7sqq9au-quill.png'}new Quill('#editor', {  theme: 'snow',  modules: {    toolbar: {      container: '#toolbar',      handlers: {        card: () => {          const addRange = this.quill.getSelection() || 0 // 获取当前光标选中的位置          this.quill.insertEmbed(            addRange,            'card',            CARD_INFO,            Quill.sources.USER          ) // 插入 card blots          this.$nextTick(() => {            this.quill.setSelection(addRange + 1, Quill.sources.SILENT)          }) // 插入完成后将光标向后移动一位        }      }    }  },  placeholder: '请在此开始编辑...'})
至此我们就可以通过点击card图标来添加一个card了,但是这个card还没有添加样式,我们手动在显示card页面上添加样式就大功告变为。通过这种方式,我们可以便可以在笔芯中添加任意类型的内容。

本文完~

dd0faba182d0034126accc77496ad66b.png5ea18ae854ce748ca2c56239e66e8e98.png
layui 富文本编辑器(layedit) layedit 链接:https://www.layui.com/doc/modules/layedit.html 使用方法: <textarea id="demo" style="display: none;"></textarea> //html部分添加<textarea>标签 <script> layui.use('layedit', function(){ var layedit = layui.layedit; layedit.build(' 阅读详情

相关推荐

Layui富文本编辑器新增图片和视频功能

前些日子项目需要使用到富文本编辑器作为文章发布的编辑器,刚好项目前端使用的是Layui框架,所以就决定使用Layui的富文本,但Layui富文本没有视频这个功能,上网找了扩展过的layedit。 1.先下载layedit扩展文件:https://fly.layui.com/extend/layedit/#download 2.将下载的文件dist下文件layedit.js替换掉layui/la...

老林的博客 2073

LayUI - 富文本编辑器

一个做后端的猿,难免用到LayUI,首先在这里,不推荐使用,坑多 一、富文本编辑器 缺点:功能太少,只能满足简单需求,只有下面这几个功能 废话少说,直接丢代码 html部分 <link rel="stylesheet" href="layui/css/layui.css"> <script src="layui/layui.js"></script> <div> <!-- 引入layui语法 --> <texta.

学弟不想努力了 2万+

如何赋值给Layui富文本编辑器,或获取不到值,内容无法获得怎么解决

问题描述 此处为问题是怎么出现的 如果你能通过标题找到与你相同的问题 可以略过此段,直接看解决办法 使用laravel+layui进行后台编写时 问题1:需要使用富文本编辑器 问题2:使用layui的富文本无法加载富文本里面的内容 解决结果 这是我解决问题后的结果 可以很直观快速的看到效果 这是解决之后的截图 解决方法 解决办法的一般步骤 解决问题1: 使用l...

weixin_43235500的博客 3636

layui富文本编辑器添加使用、新增、回显详解(layeidt)

html部分添加textarea标签 <textarea id="wznr" lay-verify="content" style="display: none;"></textarea> JS部分 layui.config({ base: '../lib/modules/' }).extend({ layerUtil: 'layerUtil', //在use中加载模块layedit, }).use(['laydate

weixin_47390965的博客 4404

layui与tinymce集成的富文本编辑器实现

Layui是一个经典的前端UI框架,以其轻量级、模块化、美观而易用的界面元素而著称。它提供了一系列的组件和模块,让开发者能够快速地搭建出美观的网页界面。TinyMCE 是一个小型的 JavaScript 库,提供了一个网页上的富文本编辑器。它允许用户在网页上输入和编辑文本,并且支持各种格式化选项,使得内容编辑变得更加简单。TinyMCE 的编辑器界面直观,用户不需要深入学习就可以轻松上手。TinyMCE 的编辑功能包括但不限于:基本的文本编辑功能。

weixin_42668301的博客 958

基于JQ JS与layui框架的富文本编辑器实战开发

简单来说,富文本编辑器就是让你能在网页中像使用 Word 那样排版文字的工具。但它真正的价值在于——把用户直观的操作转化为结构化的数据。比如你选中一段话点了个“加粗”,编辑器就得知道:👉 这段文字对应的 DOM 节点是哪个?👉 当前光标位置是否合法?👉 加粗之后要不要自动聚焦回去?👉 如果这是个协作场景,怎么告诉其他客户端“有人加粗了这段”?早期的解决方案非常“暴力”:IE 浏览器搞了个属性,只要加上这个,任何元素都可以变成可编辑区域。配合。

weixin_35749545的博客 1004

layui :富文本编辑器添加上传视频功能

甲方又整新需求了:富文本编辑器需要可以传视频。 layui本身的富文本编辑器没有传视频的功能,所以,又到了咱们魔改的时候了。 友情提醒,富文本编辑器 layedit 只有layui的V1版有,V2版没了,也是很神秘。 因为上次咱们加了上传加了进度条,所以这回的上传也是有进度条的,只不过在富文本编辑区的外面。 上代码。 需要用编辑器的某个HTML的JS域: var layedit...

haponchang的博客 5640

Layui带视频、字体等的富文本编辑器layedit.js

新增的有 tool: [ 'redo'//重做 ,'undo'//撤销 ,'fontfamily'//字体 ,'fontSize'//字体大小 ,'video' //插入视频 ]

layui富文本编辑器添加图片回显问题详解

最近写项目中需要用到LayUI富文本编辑器,其他地方都挺好,唯独上传图片时,要不就是上传完成后回显404,要不就是访问时404(访问时我是新打开的一个页面),返回路径一直有问题,之后把返回的路径改成绝对路径就可以。 效果图如下: 先添加上传图片接口,layui会自动传递参数,后台直接写对应的上传方法就行了。 var layedit = layui.layedit; layedi...

小马同学 1万+

51单片机自学笔记(六)数码管动态扫描与消影实战

本文详细解析了51单片机数码管动态扫描原理与视觉暂留效应,通过硬件电路分析和C语言代码实战,重点介绍了三种数码管消影技术(段选清零法、位选屏蔽法、硬件消影法),解决了显示重影问题,并提供了常见问题调试技巧与定时器中断优化方案,帮助开发者掌握稳定的多位数码管显示技术。

y9z0a1b的博客 1105

定时器(PWM输出)触发ADC采样(DMA)——STM32CubeMX

已知 Tclk 为 84MHz , 我们需要 Tout 为 200ms 即 200000us , 不妨先让PSC为 839, 带入上述公式可得 ARR = 19999. 这样算出来之后ARR和PSC都在0~65535的范围, 则可以使用这组参数。例如,如果时钟频率为1MHz,并且PSC设置为1000,则实际的定时频率将为1kHz。当重装载值(Period 或 ARR)设置为 500 时,意味着定时器需要计数 500 个时钟周期才会触发中断。例如,如果时钟频率为1MHz,则Tclk为1微秒。

2301_77123899的博客 1万+

Layui 使用 TinyMCE 富文本编辑器

Layui 使用 TinyMCE 富文本编辑器Layui 使用 TinyMCE 富文本编辑器1.进入 Layui 第三方组件平台下载该拓展组件2.写一个测试 Demo合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公...

李晋江的博客 6102

Win10 环境下 ISE14.7 iMPACT 闪退的 DLL 修复方案 - FPGA 开发实战

本文详细介绍了在Win10系统下解决ISE14.7 iMPACT工具闪退问题的DLL修复方案,特别针对FPGA开发中常见的兼容性问题。通过替换关键DLL文件,有效解决了iMPACT在生成PROM文件时的崩溃问题,并提供了详细的步骤说明和注意事项,帮助开发者提升工作效率。

weixin_29197051的博客 210

layui富文本编辑器上传图片

layui是贤心大神的开源前端框架,也是对后端菜鸟非常友好的一个框架,平常开发的时候就比较喜欢使用这个,最近刚好写网站就到了layui的富文本编辑器,遇到一些有意思的事情,就和大家聊聊。 首先准备工作先到官网下载layui资源包 之后新建一个项目我平常使用springboot项目,如果不熟悉Springboot的请参考大佬教程,把下载好的资源包layui文件夹放到static下 配置一下端口,个...

weixin_43829645的博客 6199

Cursor聊天记录迁移工具:实现跨设备AI对话同步与备份

在软件开发中,数据持久化与迁移是常见需求,尤其当工具依赖本地存储时。SQLite作为轻量级关系型数据库,因其嵌入式、零配置特性,常被用于存储应用状态与用户数据。其WAL(预写式日志)模式提升了并发性能,但也增加了数据操作复杂性。通过命令行工具与JSON序列化技术,可以实现结构化数据的提取、转换与安全迁移,这对于保障开发资产的连续性与可移植性具有重要价值。例如,在AI辅助编程场景下,开发者与AI的对话记录包含关键的问题分析、解决方案与决策逻辑,是重要的上下文资产。cursor-chat-transfer工具正

weixin_42551967的博客 533

论文理解【LLM-Agent】——【SkillOpt】Executive Strategy for Self-Evolving Agent Skills

SkillOpt 将 agent skill 从人工或一次性 prompt artifact 转化为可验证、可控、可迁移的文本空间“可训练状态”,通过有界编辑、验证门控、拒绝编辑反馈和 slow/meta update,在不更新模型权重的情况下显著提升多类 agent 任务表现

佚失的诗篇 594

告别繁琐!Layui富文本编辑器3分钟快速上手指南

你还在为网站开发中的文本编辑功能头疼吗?既要美观易用,又要兼容各种浏览器,还得自己处理复杂的格式控制?本文将带你3分钟掌握Layui富文本编辑器的核心用法,从基础集成到高级定制,让你轻松实现专业级文本编辑功能。 ## 核心模块概览 Layui富文本编辑器的核心实现位于src/modules/layedit.js,该模块依赖于基础框架[src/layui.js](https://link.git...

gitblog_00568的博客 1051

智能车竞赛循迹控制:基于状态机的直道、弯道、十字路口处理策略

在嵌入式系统与自动控制领域,PID控制算法是实现精确运动控制的基础。其原理是通过比例、积分、微分三个环节的线性组合,对系统误差进行实时校正,从而实现对目标值的快速、稳定跟踪。这项技术的核心价值在于为各类自动控制系统提供了稳定、可靠且易于实现的解决方案,广泛应用于机器人、无人机、工业自动化等场景。在智能车循迹这类特定应用中,赛道环境复杂多变,单一的PID控制器难以应对直道、弯道、十字路口等不同赛道元素的控制需求。此时,有限状态机(FSM)作为一种高效的**决策框架**,能够根据实时感知的赛道特征(如边线曲率、

weixin_34034261的博客 282

Layui 中使用了KindEditor的富文本编辑器

Layui 中使用了KindEditor的富文本编辑器,提交时无法获取比机器中内容解决方式 官方源码如下 KindEditor.ready(function(K) { var editor1 = K.create('textarea[name="content1"]', { cssPath : '../plugins/code/prettify.css', uploadJso...

Darryl Cao的博客 2694

【多目标跟踪】ByteTrack复现(有yolov5例子)

1.环境 ubuntu16.04 cuda10.1 cudnn7 python3.6 Cython matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.2 Pillow PyYAML>=5.3 scipy>=1.4.1 tensorboard>=2.2 torch>=1.7.0 torchvision>=0.8.1 tqdm>=4.41.0 seaborn>=0.11.0 easydic

聿默的博客 1万+

刷爆 Java 基础!1000 道经典面试题精解第一篇【序列化】

自定义序列化 / 反序列化的实现方式在实现接口的类中,手动重写和方法在方法内优先调用执行默认序列化逻辑;追加自定义逻辑(如敏感数据加密、临时字段赋值、兼容旧版本数据等)。// 序列化ID,保证兼容性// 敏感字段,默认不序列化,自定义处理// 自定义序列化// 执行默认序列化:写入username// 自定义逻辑:密码加密后写入// 自定义反序列化// 执行默认反序列化:读取username// 自定义逻辑:读取加密密码并解密// 模拟加密/解密工具方法。

七叔的博客 192

layui集成富文本编辑器

layui富文本编辑器集成比其他任何富文本编辑器集成都简单,因为layui自带富文本编辑器,只需要2行代码: var layedit = layui.layedit; layedit.build('lay_content', { tool: ['strong', 'italic', 'underline', 'del', '|', 'left', 'ce...

征途人生&梦 1577

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

layui 富文本编辑器回显问题

众所周知,富文本编辑器存入数据的内容包含了样式、元素、文本内容等。所以回显最直接的方法就是将从后台传回来的数据直接塞进富文本编辑器的元素里。采用vue可以使用v-html,js直接用html()方法。但是记得将这一块代码放在富文本编辑器初始化代码前执行,其实就是初始化textarea(否则会受到影响)。 //富文本框 <div class="layui-form-item layui-...

明天 6693

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

layui中使用wangEditor富文本编辑器

<script type="text/javascript" src="https://unpkg.com/wangeditor/dist/wangEditor.min.js"></script> <script type="text/javascript" src="http://www.wangeditor.com/js/jquery-1.10.2.min.js"></script> <div id="div1">

梦奇 3472

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: MySQL指定存储引擎命令_mysql存储引擎相关命令
下一篇: mysql数值美观_数据库调优教程(十一) 设计一张漂亮的表
L oiey
博客等级 码龄10年 36粉丝 1666原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值