前言 富文本编辑器,Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器。 方式 iframe 页面中嵌入一个包含空HTML页面的iframe。...anchorOffset:在到达选区起点位置之前跳过的anchorNode中的字符数量 focusNode:选区终点所在的节点 focusOffset:focusNode中包含在选区之内的字符数量 isCollapsed...:布尔值,表示选区的起点和终点是否重合 rangeCount:选区中包含的DOM范围的数量 方法 addRange(range):将指定的DOM范围添加到选区中 collapse(node,offset...):将选区折叠到指定节点中的相应的文本偏移位置 collapseToEnd():将选区折叠到终点位置 collapseToStart():将选区折叠到起点位置 containsNode(node):确定指定的节点是否包含在选区中...表单提交 富文本编辑不是使用表单控件实现的,而需要手工来提取并提交HTML。为此,通常可以添加一个隐藏的表单字段,就是在提交表单之前提取出HTML,并将其插入到隐藏的字段中。
文档变成可编辑后,就可以像使用文字处理程序一样编辑文本。 效果如图: 元素设置 contenteditable 第二种方式是使用 contenteditable 属性指定 HTML 文档中的元素。...该方式是 IE 最早实现的。使用方式是在一个元素上添加 contenteditable 属性并设置为 true,然后该元素会立即被用户编辑。...Selection 对象表示用户选择的文本范围或插入符号的当前位置。它代表页面中的文本选区,可能横跨多个元素。文本选区由用户拖拽鼠标经过文字而产生。...如想删除后插入,可获取新的 Selection 对象,利用此时位置所在 dom 元素的方法插入对应的文字、元素。...标签,如 insertImage 在光标位置插入图片 图片的 URL 链接 insertParagraph 在光标位置插入元素 null italic 切换选中文本的斜体样式 null styleWithCSS
contenteditable 属性 假如我们给一个标签加上 contenteditable="true" 的属性,就像这样: div contenteditable="true">div> 那么在这个...div 中我们就可以对其进行任意编辑了。...如果想要插入的子节点不可编辑,我们只需要把子节点的属性设置为 contenteditable="false" 即可,就像这样: div contenteditable="true"> 这是可编辑的...这个知识点是很重要的,因为它让我们有了操纵光标的能力(比如插入内容之后设置光标的位置),不过这篇文章中我并没有去深入它,只是浅出?。 目标 开篇一顿扯,下面让我们抓紧时间做一个属于自己的富文本吧?...当然了,你也可以先上传到服务器处理返回 url 地址再插入也是可以的。 ?至此,一个简易版的富文本就完成了(当然了 bug 也是有的?
) 当前需求的拆解 按住shift + @ 的时候,弹出通知列表 选择时 @的用户标签插入当前的光标位置中 生成@的用户标签的规则是:高亮、携带用户ID、一键删除信息、不可以编辑。...通过$event 可以获取键盘的keyCode 达到监听的目的 e.preventDefault 可以阻止我输入的@字符的默认事件 getSelection 可以获取光标的位置、给插入标签一个坐标。...要兼容中文输入法的时候@的事件判断(如:中文输入法打“哈哈哈@” 这个时候不能监听@的事件 ) 中文输入法的时候单独输入@的时 怎么判断中文输入?...Event.returnValue 兼容IE取消默认事件 到现在我们的核心功能已经完成了。通过@人的监听事件,通过我们自定义的标签插入,通过getSelection获取到的光标位置。...获取光标的坐标在文本中的位置 caret-pos 从 textarea、contentedtiable 或 iframe 正文中获取插入符号/光标的位置/偏移量 import { position, offset
的回答: 当时试了一下确实很好玩,于是每次都可以在妹子面前秀一波操作,在他们惊叹的目光中,我心里开心地笑了——嗯,又让一个不懂技术的人发现到了程序的美,咳咳。...那用 div 包裹呢?也不对:div 不能输入啊,唉,谁说不能输入的?contentEditable 属性就是可以让用户手动输入的。...解决方法是在 componentDidUpdate 里把光标重新放到最后就可以了,每次渲染后光标回到最后的位置。...完全起不到性能优化的作用。 一个比较折中的方案是添加一个 checkUpdate 的 props 给使用的人去做性能优化。源码是对每次的值以及一些 props 更新进行判定是否需要更新。...补充 props 除了上面一些比较重要的 props,还有一些增强扩展性的 props,如 disabled, tagName。
基于富文本的可视化搭建看似很新颖,但其实早就被广泛使用了,任何一个富文本编辑器几乎都有插入表格功能,这就是一个典型插入自定义组件的场景。...积木式搭建和富文本搭建的区别 富文本以文本为中心,因此编辑文字的光标会常驻,编辑的核心逻辑是排版文字,并考虑如何在文字周围添加一些自定义区块。...有了光标后,圈选也非常重要,因为大家编辑文字时有一种很自然的想法是,任何文字圈选后复制,可以粘贴到任何地方,那么所有插入到富文本中的自定义组件也要支持被圈选,被复制。...可以看出来这是一种结合的尝试,从前端角度来看,富文本本质上是对一个 div 进行 contenteditable 申明,那么一个应用可以整体是 contenteditable 的,也可以局部几个区块是,.../div> 只要拖拽 bar-chart、div 两个组件即可,div 内部的文字通过光标输入,line-chart 通过富文本某个按钮或者键盘快捷键添加。
平时我们使用文本框input, textarea时,我们有时候需要得到光标的位置或者说设置光标的位置. 但是文本框有个不足,就是不能满足我们插入图片或者其他的一些要求....所以有时候我们使用div来代替文本框. 今天为了搞定设置DI的光标位置.头疼啊,终于可以了,记录一下,网上资料不多. 首先要让DIV启用编辑模式....div contenteditable=true id="divTest">div> 通过设定contenteditable=true开启div的编辑模式.这样DIV就可以跟文本框一样输入内容了。...下面说怎么获取或设置光标位置. 2个步骤 1:获取DIV中的光标位置 2:改变光标位置 var cursor = 0; // 光标位置 document.onselectionchange = function...中的光标移动到最后面了..
要允许特定媒体类型的所有文件,请使用 accept="image/*"。 2、Autofocus 它表明特定元素应该专注于页面加载。...div contenteditable="true"> This text can be edited by the user.div> 10、Readonly 指定输入字段是只读的。...Printing Works, Inc 一个示例用例是我们的公司名称、书名、位置等。...16、Poster 允许在下载视频时添加要显示的图像。...https://mysite.com/original-source-url"> Some awesome quote 21、Datetime 它指定删除/插入文本的日期和时间
> div> ); } export default App; 效果图: 第二天,掌控浏览器中光标 小标题又可以叫做在接管输入文字以后,我们可以怎样在富文本光标位置输入文本...作为一个富文本编辑器这是不可饶恕的。 那么现在,我们来完善这个问题。 首先,我们知道如何获取光标的位置,以及对应文本的位置。...这里我们会用到window.getSelection() api来获取光标所在的dom,以及光标在dom中文本的位置。...如果光标选中一个范围 } // console.log(root[0].children[0] === node, root[0].children[0], node) } 我们实现了在光标位置插入文本...在监听中修改window.root,并在里面更新txt和txtO,最后清除光标,防止txt更新导致光标闪动。
,返回一个NodeList对象或Element;功能与JQuery类库中的()相似,两者参数相同,不同的是:()返回值为一个JQuery对象表示匹配的元素集,JQuery对象是一个类数组,可以用标准的数组标示方括号来访问...insertBefore():两个参数,第一个参数是待插入的节点,第二个参数是该父节点的子节点,可以为null,为null是功能与appendChild相同; 如果使用以上两个方法再次插入已经存在的节点...,已存在节点将会自动从它的当前位置删除并在新的位置从新插入,可以用来做单页表格的排序等,不改变表格数据,只改变节点的顺序; 3、删除和替换节点:删除节点:removeChild() 替换节点...contenteditable属性;div id="editor" contenteditable>edit........div> 其二:设置对应元素的JavaScript contenteditable属性; 浏览器定义了多项文本编辑命令,为了执行这些命令,应该使用Document
前言 TinyMCE是一款开源、易用、UI时新、所见即所得的富文本编辑器。是富文本领域中的佼佼者。整体设计和模式,都是非常不错的。...再次使用常规 DOM 方法克隆模板并将其附加到您的 shadow DOM 中。 在页面任何您喜欢的位置使用自定义元素,就像使用常规 HTML 元素那样。...哪该如何转化,还得再了解认识一下 tinymce tinymce 富文本中编辑的数据 会抽象为 ASTNode (可以直接看成tinymce官方自制简易版的DOM树),如打印出来如下图 既然有转换...tinymce 实例中的 Window 因为自定义的节点是插入 tinymce 的实例中。...tinymce 实例中的 Window 因为自定义的节点是插入 tinymce 的实例中。
wangEditor-基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、易用、开源免费 wangEditor基本配置 1 <!...// onblur 178 editor2.customConfig.onblur = function (html) { 179 // html 即编辑器中的内容...// onfocus 184 editor2.customConfig.onfocus = function () { 185 // html 即编辑器中的内容...(text); // 插入的文字 209 console.log(link); // 插入的链接 210 211 return true; // 返回...true 表示校验成功 212 // return '验证失败' // 返回字符串,即校验失败的提示信息 213 } 214 215 // 插入网络图片的校验
什么是 contenteditable HTML中的 contenteditable 的属性可以打开某些元素的可编辑状态.也许你没用过 contenteditable 属性.甚至从未听说过. contenteditable...的作用相当神奇.可以让 div 或整个网页,以及 span 等等元素设置为可写。...我们最常用的输入文本内容便是 inpu t与t extarea ,使用 contenteditable 属性后,可以在 div , table , p , span , body ,等等很多元素中输入内容...即通过 contenteditable 可以让普通的元素实现可编辑状态。 2. 什么是 Selection Selection 对象表示用户选择的文本范围或插入符号的当前位置。...它代表页面中的文本选区,可能横跨多个元素。文本选区由用户拖拽鼠标经过文字而产生。要获取用于检查或修改的 Selection 对象,请调用 window.getSelection() 。 3.
DOCTYPE html> 在可编辑div中定位和设置光标...id="edit" contenteditable>div> ...emojiInput.value); // 如果文本框的子元素大于0,则表示有其他元素,则按照位置插入表情节点 if (edit.childNodes.length...rangeStartOffset = range.startOffset; // 在光标位置处插入新的表情内容 textNode.insertData...(rangeStartOffset, emojiInput.value); // 添加了新内容,将光标移动到新的位置 range.setStart
此外,每个注释只有一个偏移量的简单性使我们很容易实现我们用于协作的操作转换(OT)算法。 核心逻辑 随着数据模型的出现,也带来了与之互动的代码。当你在一个单元格中打字时,我们在哪里插入新打的字符?...这是因为浏览器通常只识别两种类型的编辑器:纯文本编辑器,如和元素,以及使用一种叫做contenteditable的属性创建的自由格式编辑器。我们的编辑器两者都不是。...然后,我们添加了必要的事件处理程序来捕捉用户的互动,这又将再次调用数据模型上的适当逻辑。 那么用户的光标呢?只是另一个我们自己插入的小React组件。...上一节中的例子显示了如何向左和向右移动光标。但是如果用户按了向下的箭头,他们的光标最终会在哪两个字符之间呢?这不是一个简单的问题,因为保持光标的垂直位置需要测量上面那一行的字符的位置。...为了在更新我们的数据模型时能够保留用户的意图(OT算法的一个重要方面),最好是了解导致任何变化的互动。但是,如果你试图理解浏览器对DOM在内容可编辑元素中的变化,你最多只能是猜测。
CreateBookmark 创建一个书签锚或获取当前选中区或插入点的书签锚的名称。 10....CreateLink 在当前选中区上插入超级链接,或显示一个对话框允许用户指定要为当前选中区插入的超级链接的 URL。 11. Cut 将当前选中区复制到剪贴板并删除之。 12....LiveResize 迫使 MSHTML 编辑器在缩放或移动过程中持续更新元素外观,而不是只在移动或缩放完成后更新。 52....Outdent 减少选中区所在格式化块的缩进。 55. OverWrite 切换文本状态的插入和覆盖。 56. Paste 用剪贴板内容覆盖当前选中区。 57....Unlink 从当前选中区中删除全部超级链接。 77. Unselect 清除当前选中区的选中状态。
[5531211-b71cbd48561dd566.jpg] 前来挖墙脚的是html中的contenteditable,他是一个全局属性,可以大致理解为"可以使一个元素处于可编辑状态",像极了textarea...,不过还是存在许多不足跟问题,比如没有change钩子等,本文不作深入探讨❌ 开胃 使一个div可以进行内容编辑: div contenteditable>点击我进行编辑div> [strip]...,是不是就可以在页面上直接编写样式并且自带"热更新"?...> 然后激动的切到页面上看效果,发现空空如也: [1240] 经过一番研究,想要在页面上编辑style元素,必须要满足以下两点: style元素必须放在body元素内 style元素要设置...write-only read-write-plaintext-only CSS user-modify属性行为表现测试实例页面 我们取第四个值就行,定义内容只可输入纯文本,因此回车也就不会产生div
图片 0.7.3 更新日志: 该模块适用于 DLE 13.0 及更高版本。 更改了模块管理面板中的图标。 0.7.4 更新日志: 该模块完全适应插件系统。...“收据”部分已添加到用户的个人帐户中,该帐户显示所有收据的列表。 模块设置中添加了一个新项目,指示用户可以创建的最大未付款收据数。 删除未付收据的功能已添加到用户的个人帐户中。...在模板中的任意位置显示登录用户的当前余额,请添加代码: {include file="engine/modules/billing/widgets/balance.php"} 6....="quote"> div class="quote_body contenteditable"> 这一行填写“隐藏文本插件”-“标签生成器”里面生成的代码...,其中“隐藏文本”替换为自定义标签值:[xfvalue_payhide] div> div> div> [/xfgiven_payhide
实现,结果发现实现不了图片输入,然后想着找个富文本编辑器的插件实现,深思熟虑之后,我的需求好像也没那么复杂,不至于引用个插件,看了掘金的发布沸点功能,然后就模仿了其作法,于是就有了这篇文章的分享。...先给大家展示下最后实现的效果 实现思路 •利用div的contenteditable属性,让div可编辑•绑定ref属性,用于操作输入框元素•图片点击时,获取图片地址,使用require转换图片地址•...创建img标签,赋值转换好的图片地址•从refs对象中获取到输入框元素,赋值创建好的img标签 实现过程 •声明div可编辑,监听回车键事件,关闭拼写检查,绑定ref方便获取当前元素 div class...* 无法在当前焦点的位置插入元素 */ // const imgTag = document.createElement("img");...•正确的实现方法 创建DOM字符串,使用document暴露的execCommand方法来插入创建好的DOM字符串。
领取专属 10元无门槛券
手把手带您无忧上云