首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

最近迷上了富文本编辑器!

写在前面 image.png 遥想刚入行的时候在一个媒体类的互联网单位,既然是媒体单位,文案的在线编辑,自然而然成为了一个不可绕过的坎 于是web端的富文本编辑器进入了我的世界,要知道富文本这个东西号称前端清华...(这是一个戏称,意思是富文本比较难),刚入行是个彩笔的我,那简直是前端黑盒,于是,年轻干劲十足的我开始正式宣告要攻克富文本。...当时我们的系统还在用又重有大的ueditor,由于媒体行业的特殊属性,富文本中需要大量视频音频图盘等内容的处理,所以必须要二次开发,加入一些自定义功能。...那么在我们的富文本中,显然面向对象是适用的。 如上图这些单独的功能其实就是网状结构的一个节点,所以wangeditor 是可以用面向对象解决的。...设计思路解析 wangeditor 的设计的可读性是非常高的,整体的设计架构就是利用面向对象的思想,将一个个的功能对象,组合成富文本的功能,主要实现以下功能对象 Editor 总编辑器功能的对象 Command

3.7K30

前端富文本基础及实现

例如: 富文本编辑器中的富文本,是由红色框中带有语义化标签和内联样式的 html 渲染实现的。通过富文本编辑器,即可实现富文本的编写、展示。...该方式是 IE 最早实现的。使用方式是在一个元素上添加 contenteditable 属性并设置为 true,然后该元素会立即被用户编辑。...颜色值字符串(IE 使用这个命令设置文本背景色) bold 切换选中文本的粗体样式 null createLink 将选中内容转换为指向给定 URL的链接 URL 链接值,至少包含一个字符 fontSize...编辑区域可通过获取编辑元素的 innerHTML 拿到对应富文本数据,存入数据库。 网络请求的富文本数据设置为富文本容器的 innerHTML,即可展示富文本内容。...将这些内容汇总即可实现一个简单的前端富文本编辑器。 下方附上本文内容汇总的代码 demo ,内含基于 iframe 和 div 元素分别实现的富文本编辑器,功能简单,供读者参考。

4.6K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    微信小程序官方组件展示之基础内容rich-text源码

    以下将展示微信小程序之基础内容rich-text源码官方组件能力,组件样式仅供参考,开发者可根据自身需求定义组件样式,具体属性参数详见小程序开发文档。功能描述:富文本。...emsp中文字符空格大小nbsp根据字体设置的空格大小user-selectbooleanFALSE否文本是否可选,该属性会使节点显示为 block2.24.0nodes现支持两种节点,通过 type...来区分,分别是元素节点和文本节点,默认是元素节点,在富文本区域里显示的 HTML 节点元素节点:type = node属性说明类型必填备注name标签名string是支持部分受信任的 HTML 节点...attrs属性object否支持部分受信任的属性,遵循 Pascal 命名法children子节点列表array否结构和 nodes 一致文本节点:type = text属性说明类型必填备注text...文本string是支持entities受信任的 HTML 节点及属性全局支持 class 和style属性,不支持 id 属性。

    49770

    初探富文本之富文本概述

    描述 富文本编辑器实际上是一个水非常深的领域,其本身还是非常难以实现的,例如如何处理光标、如何处理选区等等,当然借助于浏览器的能力我们可以相对比较简单的实现类似的功能,但是由此就可能导致过于依赖浏览器而出现兼容性等问题...此时我们离富文本编辑器就差一个document.execCommand的执行了,可以通过完成一个工具栏来执行命令,将选中文本的格式转换为另一种格式。...为了更强的拓展性,也解决数据与视图无法对应的问题,L1的富文本编辑器使用了自定义数据模型的概念,就是在DOM树的基础上抽离出来的数据结构,相同的数据结构可以保证渲染的HTML也是相同的,配合自定义的命令直接控制数据模型...记录数据的操作类似于保存快照,当用户进行操作的时候,无论发生任何操作,都将整篇内容进行保存,并维护一个线性的栈。当进行Undo/Redo操作的时候,将即将要恢复的栈中的内容完全呈现出来。...由于我们现在对于富文本的操作实际上都是通过命令来实现的,也就是说我们完全可以将这些内容存储下来,维护一个保存操作记录的方式更加符合现在的设计,此外这部分设计好的话,对于实现Operation Transform

    1.9K10

    【愚公系列】《微信小程序与云开发从入门到实践》016-基础功能组件

    4.rich-text 组件的应用 在小程序中,rich-text 组件可以用来渲染富文本内容。下面是两个示例,其中一个是使用字符串渲染富文本,另一个是使用描述 Node 节点的对象来渲染富文本。...4.1 示例 1:使用字符串渲染富文本 在 pages/textDemo/textDemo.wxml 文件中编写以下代码: 节点的对象渲染富文本 修改 textDemo.wxml 文件中的代码如下: 渲染富文本 在使用 Node 对象渲染富文本时,需要传递一组 Node 节点对象。 Node 节点对象可配置的属性如表所示。...:文本节点 text 字符串 文本,只有 tex 节点可以设置此值 rich-text 支持的标签及属性 标签名 支持的属性 意义

    11100

    初探富文本之文档diff算法

    但归根结底就是需要在部分文字上挂载额外的属性,例如A加粗B斜体的话,就是在A上挂载bold属性,在B上挂载italic属性,这样的数据结构就可以描述出富文本的内容。...如果说上述的场景只是在基本功能上提出的进阶能力,那么在搜索/查找的场景下,直接将高亮应用到富文本内容上似乎并不是一个可行的选择,试想一下如果我们直接将在数据层面上搜索出的内容应用到富文本上来实现高亮,我们就需要承受上边提到的所有问题...所以我们同样需要一种能够在不修改富文本内容的情况下高亮部分内容,但是我们又不容易像slate一样在编辑器底层渲染时实现这个能力,那么其实我们可以换个思路,我们直接在相关位置上加入一个半透明的高亮蒙层就可以了...首先我们考虑一个问题,如果我们将蒙层放在富文本正上方,也就是z-index是高于富文本层级的话,如果此时我们点击蒙层,富文本会直接失去焦点,固然我们可以使用event.preventDefault来阻止焦点转移的默认行为...那么我们转变一个思路,如果我们将z-index调整到低于富文本层级的话,事件的问题是可以解决的,但是又造成了新的问题,如果此时富文本的内容本身是带有背景色的,此时我们再加入蒙层,那么我们蒙层的颜色是会被原本的背景色遮挡的

    23210

    推荐项目:微信小程序富文本解析-wxParse

    由于原作者仓库 wxParse 不再维护,我们项目中商品信息展示又是以wxParse这个用做富文本解析的; 于是乎,决定采用 递归Component 的方式对其进行重构一番; 原项目使用的 template...模板的方式渲染节点,存在以下问题: 节点渲染支持到12层,超出会原样输出 html 代码; 每一层级的循环模板都重复了一遍所有的可解析标签,代码十分臃肿。...li标签不支持 ol 有序列表渲染(统一采用的是 ul 无序列表),a标签无法实现跳转,也无法获取点击事件回调等等; 节点渲染没有绑定 key 值,一是在开发工具看到一堆的 warning信息(看着十分难受...参数 说明 类型 例子 nodes 富文本字符 String “div>testdiv>” language 语言 String 可选:“html” | “markdown” (“md”) 受信任的节点...更新历史 2020-5-31 迁移utils目录到wxParse目录下; 富文本增加markdown文本解析支持; 2020-5-21: 富文本组件image标签添加loading过渡态,优化图片加载体验

    1.4K50

    用 Web Worker 改善 Vue 组件性能

    比方说,我昨天就在使用“StoryBlok”工具库创建富文本编辑器的时候遇到了麻烦。 事情是这样的,从 StoryBlok API 获取富文本内容的时候,得到的数据有其独有的结构。...看上去,把这些内容渲染出来可是个繁重的工作,这在 StoryBlok 的各种组件开始渲染包含大量内容的数据时尤为明显。 现在再想象这样的场景:你的页面上有个包含富文本组件的列表,以及一个下拉筛选器。...当你改变筛选项时,将重新请求符合筛选的所有内容,再把列表项都重新渲染一遍。...其实也很简单:为富文本渲染任务使用一个 Web Worker 就行了。 如果要对 JS 单线程和 Web Worker 有所了解,请阅读: [译] JS在浏览器和Node下是如何工作的?...结果分别是:组件渲染(创建 VDom 结构的时间)快了 20.65 倍、patch(将 VDom 结构应用到 DOM 上的时间)快了 1.39 倍。 ? ? --End--

    2.6K20

    探索如何将html和svg导出为图片

    处理存在foreignObject标签的情况 svg提供了一个foreignObject标签,可以插入html节点,实际上,笔者就是使用它来实现节点的富文本编辑效果的: 接下来使用前面的方式来导出,...foreignObject标签内容在firefox浏览器上无法显示 对于svg的操作笔者使用的是svg.js库,创建富文本节点的核心代码大致如下: import { SVG, ForeignObject...} from '@svgdotjs/svg.js' let html = `div>节点文本div>` let foreignObject = new ForeignObject() foreignObject.add...在chrome浏览器和opera浏览器上渲染非常正常,但是在firefox浏览器上foreignObject标签的内容完全渲染不出来: 检查元素也看不出有任何问题,并且神奇的是只要在控制台元素里编辑一下嵌入的...,同时了解了一下dom-to-image库的实现原理,发现它也是通过将dom节点添加到svg的foreignObject标签中实现将html转换成图片的,那么就很搞笑了,我本身要转换的内容就是一个嵌入了

    84921

    浅谈RPA软件如何填写富文本框

    1、使用Textarea元素的富文本框如下图所示,页面上的富文本输入框,实际上是一个Textarea表单控件元素,在Textarea控件前后再配上几个功能按钮,这是最简单的富文本框。...自动填写Textarea富文本框2、使用Iframe的Body元素的富文本框目前大多数成熟的富文本框架都采用Iframe元素实现的。通过Iframe渲染一个子页面,更方便实现复杂的排版要求。...我们在富文本框中先输入一个字符串,然后打开开发者工具分析元素,发现输入内容被一个p span元素包裹着,不难发现p元素就是富文本框的段落,按照上面的思路,我们只要找到这个富文本框div元素,修改其内容就实现填写富文本框了...使用div元素的富文本框马上实践一下,在木头浏览器项目管理器中,创建填写内容步骤,通过元素id获取富文本框div元素,填写text属性,即用内容填充div元素。单步测试,成功将内容填写到富文本框。...模拟按键填写富文本框对于某些复杂的富文本框,确定在哪个元素上模拟键盘操作比较困难时,我们还可以获取富文本框之前的表单控件,然后在输入内容前添加{tab},在自动填表时,首先让前一个元素获取焦点,然后通过

    41220

    把飞书云文档变成HTML邮件:问题挑战与解决历程

    飞书云文档的多种富文本块格式都需要转译,且部分格式完全不支持,造成编辑和预览发送不一致的情况。...标题块(heading 1-9)标题组件应该是实现难度最低的一个,一个标题组件的数据结构如下:原版实现方式在原版的转译工具中,我们编写了通用方法来处理文本内容的下划线、删除线、斜体、粗体、高亮色等进行处理...由于原来的方法中完全没有处理过文本块的缩进,我们根据飞书缩进的规律,为普通的文本块(表格、栅格等以外的文本块)在渲染子节点时为子节点的容器添加25px的padding-left。...表格是另一类比较特殊的文本块,他内部并不包含正文。整个表格实际上由三层文档块组合而成,它们的数据结构如下:依据数据结构和我们的代码模式设计,我们需要使用嵌套的渲染器来实现表格的绘制。...但实际上,element的内容和普通文本类似,只要文本的样式不变(比如设为斜体、加粗等),这些文本就都会被塞到同一个element项中。

    22010

    WEB安全(一)之图解XSS注入

    XSS注入方式 注入的方式分别是通用修改 DOM 节点内容,通过修改 DOM 节点属性,通过修改 JavaScript 修改和通过富文本修改。...id=1"console.log(document.cookie)""; const id = "1"console.log(document.cookie)""; 通过富文本 div>testconsole.log(document.cookie)div> 这一段富文本就包含了一段恶意脚本代码,而这一段代码是会保存在数据库的...防御 XSS 攻击手段 DOM 节点内容进行转义 对于一些标签的 进行转移,是他们在 HTML 中不会以一个 script 标签形式执行。...当然,解决的方法还是给 \ 做转义。 富文本配置白名单 在富文本中,可以其实可以使用配置黑白名单的方法,配置禁止某些标签出现或者是只允许某些标签出现。

    1.9K91

    浏览器渲染(线程视角1)

    这篇文章主要从渲染进程的的视角,来看渲染过程,主线程做了那些事情,导航流程、GPU快速栅格化图像和浏览器主进程输入到显卡后缓冲区部分一带而过,之后文章详细介绍 上一篇 浏览器渲染(进程视角)文章从浏览器的进程模型演进分析了打开一个页面的渲染进程数量...构建DOM树 当网络进程接收到http响应头内容为Content-Type: text/htmls时,发送消息给浏览器进程,浏览器进程开始加载渲染进程,并为网络进程和渲染进程数据通道,将html字节流实时发送给渲染进程...Token栈 html解析器维护了一个token栈结构,主要用来计算节点之间的父子关系,按照字节流的顺序入栈、出栈将字节流进行分词。...token将标签和文本划分为 tagToken ,textToken ,tagToken又分为startToken,endToken 一个简单的例子: div...token压入栈中(图中的1-4步骤),并为该token创建一个DOM节点,加入到DOM树中,它的父节点就是栈中相邻的节点 如果分词器解析出来的是文本token(例如图中的第5步骤),那会直接生成一个文本节点

    2.4K140

    读者提问,如何让 tooltip 提示框内显示饼图

    实现思路(一段曲折的过程) 当天晚上有事,没来及看,转天上班途中,先看了眼配置项手册,在确认没有现成功能可用的同时,注意到了一个关键点:提示框是一个 DOM 节点,也就是有办法作为 ECharts 的容器...浮层的渲染模式,默认以 'html 即额外的 DOM 节点展示 tooltip;此外还可以设置为 'richText' 表示以富文本的形式渲染,渲染的结果在图表对应的 Canvas 中(目前 SVG 尚未支持富文本...「」而不是「\n」这一个特点上,也可以推测得到的。...有了这个关键点,大体的思路就有了: 通过回调函数返回一个带 id 属性的 div,比如 以这个 div 为容器,初始化 ECharts 实例; 根据触发提示框的 params 属性,准备相应的饼图配置项...,渲染对应的饼图 大体思路图示 但是还存在一个问题需要解决,这个问题有 2 个难点: 在提示框首次弹出之前,带 id 的 div(回调函数返回的「饼图容器」)是不存在的,而且每次触发提示框显示/移动

    1.7K30

    2024全网最全面及最新且最为详细的网络安全技巧 七之 XSS漏洞典例分析POC以及 如何防御和修复(5)———— 作者:LJS

    7.14 Tui Editor的bypass之路 TOAST Tui Editor是一款富文本Markdown编辑器,用于给HTML表单提供Markdown和富文本编写支持。...常见的Markdown渲染器对于XSS问题有两种处理方式: 在渲染的时候格外注意,在写入标签和属性的时候进行实体编码 渲染时不做任何处理,渲染完成以后再将整个数据作为富文本进行过滤 相比起来,后一种方式更加安全...(它的安全主要取决于富文本过滤器的安全性)。...代码不多,总结一下大概的过滤过程是: 先正则直接去除注释与onload属性的内容 将上面处理后的内容,赋值给一个新创建的div的innerHTML属性,建立起一颗DOM树 用黑名单删除掉一些危险DOM节点...这暗示了一个问题 ——任何非缓存键内容的差异,都可能被存储并提供给其他用户。理论上,站点可以使用“Vary”响应头来指定请求头中哪些部分应该作为缓存键。

    10510

    动态监听DOM元素高度变化

    1、背景 考虑这样一种情况,产品同学希望达到以下功能: 在我们的网页中有一个固定区域,这个区域会用于渲染从后端拉取的含有图片等资源的富文本字符串。...他需要在内容不超过一个最大高度的时候完全显示所有内容,超过最大内容后仅展示最大高度范围内的内容,超出部分隐藏,并通过一个按钮 “展示更多” 来给用户展示更多的选择。...、删除或者更改)    attributes: true, // 属性的变动    characterData: true, // 节点内容或节点文本的变动    subtree: true, /...(新增、删除或者更改)            attributes: true, // 属性的变动            characterData: true, // 节点内容或节点文本的变动            ...我们可以换一种思路,既然我们无法通过监听容器的高度变化来展示相应的 “展开更多” 操作,那么我们可不可以将这个 “展开更多” 固定到一个位置上,然后超出部分隐藏, 当我们的内容自动撑开,达到指定高度后,

    5K30

    36.2K Star开源一款强大的所见即所得富文本编辑器,用过的人都说好

    Quill是一款基于JavaScript的富文本编辑器库,旨在提供一种简单而强大的文本编辑解决方案。以下是该软件的详细介绍、功能特点和使用步骤。...三种模式 软件介绍 Quill是一个开源的富文本编辑器,它提供了许多先进的功能,使开发者能够在网页上构建各种文本编辑应用程序。该软件以其可定制性和易用性而闻名,并且在许多项目中被广泛应用。...功能特点 富文本编辑: Quill提供了丰富的富文本编辑功能,包括字体样式、文字格式化、段落样式和布局等。用户可以轻松自定义字体、颜色、大小,并对文本进行加粗、斜体、下划线等操作。...插入多媒体: 除了文本编辑,Quill还支持插入多媒体内容,如图像、音频和视频,使得用户可以在编辑器中嵌入丰富的多媒体内容。...创建编辑器实例: 在网页上创建一个div元素,并为其分配一个唯一的ID,作为编辑器容器。

    43420

    基于slate构建文档编辑器

    基于slate构建文档编辑器 slate.js是一个完全可定制的框架,用于构建富文本编辑器,在这里我们使用slate.js构建专注于文档编辑的富文本编辑器。...描述 Github | Editor DEMO 富文本编辑器是一种可内嵌于浏览器,所见即所得的文本编辑器。...而类似于Draft.js、Slate.js,他们是富文本编辑器的core或者叫做controller,并不是一个完整的功能,这样就能够让我们有非常高的可定制性,当然也就会造成开发所需要的时间比较多。...前边提到了slate只是一个core,简单来说他本身并不提供各种富文本编辑功能,所有的富文本功能都需要自己来通过其提供的API来实现,甚至他的插件机制也需要通过自己来拓展,所以在插件的实现方面就需要自己制定一些策略...,例如分割线、图片、视频等,void元素应该是一个空元素,他会有一个空的用于渲染的文本子节点,并且是不可编辑的,所以是一类单独的节点类型。

    1.1K10

    【玩转腾讯云】现代富文本编辑器Quill的模块化机制

    Quill模块初探 使用Quill开发过富文本应用的人,应该都对Quill的模块有所了解。...toolbar参数用来配置工具栏模块,这里传入一个二维数组,表示分组后的工具栏按钮。 渲染出来的编辑器将包含4个工具栏按钮: 要看以上Demo,请怒戳配置工具栏模块。...比如:在EditorX富文本组件中有一个统计编辑器当前字数的功能,该功能就是通过自定义模块来实现的,下面我们将一步一步介绍如何将改该功能封装成独立的Counter模块。...在Text Change事件中,我们调用Quill实例的getText方法获取编辑器里的纯文本内容,然后用正则表达式将其中的空白字符去掉,最后将字数信息插入到字符统计的容器中。...然后通过字符统计模块这个简单的例子介绍如何开发自定义Quill模块,对富文本编辑器的功能进行扩展。

    2.2K00

    chromium与markdown极简笔记多线程文本渲染

    最近我的markdown笔记软件做了一次升级,升级内容主要是将单线程的文本渲染做成了多线程的,这样避免了笔记打开时候卡顿的情况。...这个并不是程序性能慢,而是没有用多线程,没有将加载和显示进行拆解。 单线程渲染 单线程渲染是指从加载文本开始,一直到文本显示在屏幕上,都是主线程来处理所有逻辑。...对于多线程的流程,可以分为如下几步 主线程准备进行文本加载,将文本内容和发送给另外一个线程b 线程b开始解析文本 b线程中生成一个文档对象d,插入解析后的数据结构 b线程将生成好的文档对象d传给主线程,...主线程通过这个对象进行渲染工作 这个过程可以细化,做成文本分段传给主线程,这样主线程能够即时渲染开头部分的文本内容,即使几百mb的文本也不会体验很差。...结语 本篇是极简笔记多线程文本渲染的开发总结,如果你也对富文本编辑器感兴趣,可以持续关注ACM算法日常,我打算把富文本的开发细节做成一个系列,以便后来人能够非常轻松的解决富文本编辑器问题。

    73920
    领券