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

如何将光标所在位置的元素(在可编辑div中)拆分为两部分,然后在其间插入一个自定义元素?

在可编辑的div中,将光标所在位置的元素拆分为两部分并插入一个自定义元素,可以通过以下步骤实现:

  1. 获取光标所在位置的元素:可以使用Selection对象的getRangeAt()方法获取当前选中的Range对象,然后使用Range对象的commonAncestorContainer属性获取光标所在位置的元素。
  2. 拆分元素:使用Range对象的surroundContents()方法将光标所在位置的元素拆分为两部分。首先,创建一个新的span元素作为分割点,然后使用Range对象的extractContents()方法将光标所在位置的元素从DOM树中移除并返回一个DocumentFragment对象。接下来,使用Range对象的insertNode()方法将新创建的span元素插入到光标所在位置的元素之前。
  3. 插入自定义元素:创建一个自定义的元素,例如一个span元素,设置其内容和样式等属性。然后,使用Range对象的insertNode()方法将自定义元素插入到新创建的span元素之后。

下面是一个示例代码:

代码语言:txt
复制
function splitAndInsertCustomElement() {
  var selection = window.getSelection();
  if (selection.rangeCount > 0) {
    var range = selection.getRangeAt(0);
    var container = range.commonAncestorContainer;

    // 创建分割点
    var splitPoint = document.createElement('span');

    // 拆分元素
    range.surroundContents(splitPoint);
    var extractedContent = range.extractContents();

    // 插入自定义元素
    var customElement = document.createElement('span');
    customElement.textContent = '自定义元素';
    customElement.style.color = 'red';
    splitPoint.parentNode.insertBefore(customElement, splitPoint.nextSibling);

    // 将拆分的内容插入到自定义元素之后
    customElement.appendChild(extractedContent);

    // 重新设置光标位置
    range.setStartAfter(customElement);
    range.setEndAfter(customElement);
    selection.removeAllRanges();
    selection.addRange(range);
  }
}

这段代码可以将光标所在位置的元素拆分为两部分,并在其间插入一个自定义的红色span元素。你可以根据实际需求修改自定义元素的内容和样式。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobdev
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【实战】我是如何在输入框实现@ At功能

作者:InfinityTomorrow 授权转载 链接:https://juejin.cn/post/6982251438332182542 一、前言 最近接手了一个需求,评论框实现 @At通知用户功能...) 当前需求拆解 按住shift + @ 时候,弹出通知列表 选择时 @用户标签插入当前光标位置 生成@用户标签规则是:高亮、携带用户ID、一键删除信息、不可以编辑。...通过$event 可以获取键盘keyCode 达到监听目的 e.preventDefault 可以阻止我输入@字符默认事件 getSelection 可以获取光标的位置、给插入标签一个坐标。...Event.returnValue 兼容IE取消默认事件 到现在我们核心功能已经完成了。通过@人监听事件,通过我们自定义标签插入,通过getSelection获取到光标位置。...获取光标的坐标文本位置 caret-pos 从 textarea、contentedtiable 或 iframe 正文中获取插入符号/光标的位置/偏移量 import { position, offset

2.4K20

Linux 系统 vim 编辑器使用简明教程

,执行下面命令后将进入插入模式,按ESC键退出插入模式) a      //在当前光标位置右边添加文本 i       //在当前光标位置左边添加文本 A     //在当前行末尾位置添加文本...四、删除、恢复字符或行(vi命令模式下使用) x :每按一次,删除光标所在位置后面一个字符。 #x :删除光标所在位置后面#个字符,例如, 6x 表示删除光标所在位置后面6个字符。...X :每按一次,删除光标所在位置前面一个字符。 #X :删除光标所在位置前面#个字符,例如, 20X 表示删除光标所在位置前面20个字符。 dd :删除光标所在行。...p        //粘贴剪切板里内容光标后,如果使用了前面的自定义缓冲区,建议使用”ap 进行粘贴。...P        //粘贴剪切板里内容光标前,如果使用了前面的自定义缓冲区,建议使用”aP 进行粘贴。

1.6K70

前端富文本基础及实现

空白 HTML 文档嵌入一个 iframe,并将 designMode 属性设置为 on,文档就会变成可编辑,实际编辑则是 iframe 内 body 元素。...该方式是 IE 最早实现。使用方式是一个元素上添加 contenteditable 属性并设置为 true,然后元素会立即被用户编辑。...效果如图: 两者特点 两种方式都可以实现编辑模式,并且这种编辑模式与 textarea 不同,其内部会用块级元素(默认为 div 元素)做换行处理,最终体现在 dom 结构。...标签,如 insertImage 光标位置插入图片 图片 URL 链接 insertParagraph 光标位置插入元素 null italic 切换选中文本斜体样式 null styleWithCSS...将这些内容汇总即可实现一个简单前端富文本编辑器。 下方附上本文内容汇总代码 demo ,内含基于 iframe 和 div 元素分别实现富文本编辑器,功能简单,供读者参考。

4.2K50

从零开始,开发一个 Web Office 套件(10):捕获键盘事件,输入文字

富文本编辑器 (MVP) 2.22 Feature:通过键盘输入英文 为了实现键盘输入,我们需要在container div元素(canvas父元素插入一个input(或者textarea)元素,作为代理...div元素然后,修改Editor: 同时,修改Store构造函数,在其中存储container元素: 2.22.1.2 Store初始化和存储光标 然后,我们希望input元素可以读取到光标的位置...接下来,我们开始实现feature. 2.22.2 点击文字时,记录下光标的必要信息 点击文字时: 记录下光标的如下信息,存储到Store: cursorIdxInChars:光标在所有chars...,处于第几位置 curParaIdx:光标第几个段落 cursorIdxInCurPara:光标在当前段落,处于第几位置 同时,顺便记录下目标字符的如下样式信息,存储到光标实例上,方便以后插入字符时使用...然后,当input元素input事件触发后: 根据键盘输入字符,新建Char,并插入全局chars列表和当前段落chars列表 重新计算每个段落布局,以便于:重新生成SoftLine和计算chars

16030

三种插件开发模式,带你玩废tinymce

自定义元素):一组 JavaScript API,允许您定义 custom elements 及其行为,然后可以用户界面按照需要使用它们。...再次使用常规 DOM 方法克隆模板并将其附加到您 shadow DOM 页面任何您喜欢位置使用自定义元素,就像使用常规 HTML 元素那样。...因为是自定义标签,并且是 tinymce 编辑,所以出了这个编辑器,客户端浏览器可是识别不了, 所以需要想个办法 转换一下。...通过两个过滤器 ,针对自定义节点 加入对应转换逻辑,实现无论是在编辑器环境 还是客服浏览器中都能完美的渲染出来 Parser : 即 API tinymce.html.DomParser...tinymce 实例 Window 因为自定义节点是插入 tinymce 实例

4.8K30

最新最全自己动手做一个富文本编辑器(附源码 api)

我们来用大白话说一下富文本编辑器原理 将一个div设置属性 contenteditable="true" 设置加粗,加横线,放大字体等效果 使用 document.execCommand('bold...ClearAuthenticationCache: 清除缓存所有身份验证凭据。 contentReadOnly: 通过传入一个布尔类型参数来使能文档内容编辑性。...formatBlock: 添加一个HTML块式标签在包含当前选择行, 如果已经存在了,更换包含该行元素 ( Firefox, BLOCKQUOTE 是一个例外 -它将包含任何包含块元素)....insertParagraph: 选择或当前行周围插入一个段落。(IE会在插入插入一个段落并删除选中部分.) insertText: 光标插入位置插入文本内容或者覆盖所选文本内容。...strikeThrough: 光标插入点开启或关闭删除线。 subscript: 光标插入点开启或关闭下角标。 superscript: 光标插入点开启或关闭上角标。

2.4K20

Vi编辑器使用教程

编辑分为三种模式:(命令行模式、末行模式、插入模式) 命令行模式 进入插入模式 i:从光标当前位置开始输入 a:从目前光标所在位置一个位置开始输入 o:光标所在位置下一行首输入 I:光标所在行首插入...A:行末插入 O:在上一行插入 s:删除光标位置一个字符然后插入 S:删除光标所在行,然后插入 插入模式到命令行 按下ESC键就可以了 移动光标(听说很正规Linux都这样用) 数字“...0”:光标移动到所在行行首 ”G“:移动到文本最后一行 $:移动到行尾 ^:移动到行首 w:光标跳到下个字开头 删除文字 x:删除光标所在位置一个字符 nx:删除光标之后n个字符 X...列出行号:set nu(文件每一行前面列出行号) 取消行号:set nonu(取消行号) 查找字符:“/关键字”或者用“?关键字”,可以按下n找下一个。...保存文件:冒号后面输入w 退出 vi 编辑器 q:退出 !q:强制退出 wq:保存退出

1.1K80

一文搞懂linuxvim编辑

---- 前言 vim是从 vi 发展出来一个文本编译器。 代码补完、编译及错误跳转等方便编程功能特别丰富,程序员中被广泛使用。...vim是一款多模式编辑器,包括支持正则表达式搜索,轻松重复命令能力,直接记录和执行宏,自动完成,文件合并,鼠标集成,拼写检查,语法突出显示,分支撤消/重做历史,支持流行网络协议和文件存档格式等。...命令模式进入插入模式(可随意编写): a        光标后移一位 i        光标位置不变 o        光标位置新起一行 s        删除光标位置元素 插入模式进入命令模式按 ESC...) x(小写)        删除光标所在位置之后单个字符 n+x        删除光标所在位置之后n个字符 X(大写)         删除光标所在位置之前单个字符 n+X         删除光标所在位置之前...n个字符 Ctrl键+ww        从当前文件到另一个文件 3.vim配置 先创建一个隐藏文件      .vimrc(在家目录下自行创建) 然后再将配置项放入里面即可 包括: set nu

23430

详解 MACLinux Vi配置环境变量及Java环境变量配置

2) 插入模式(Insert mode)   只有Insert mode下,才可以做文字输入,按「ESC」键回到命令行模式。...插入模式 按「i」切换进入插入模式「insert mode」,按”i”进入插入模式后是从光标当前位置开始输入文件;   按「a」进入插入模式后,是从目前光标所在位置一个位置开始输入文字;...B) 跳到文件某一行  「#」:「#」号表示一个数字,冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章第15行。...G 光标移至文章最后 $ 光标移动至行尾 Ctrl+f 向前翻屏 Ctrl+b 向后翻屏 Ctrl+d 向前翻半屏 Ctrl+u 向后翻半屏 i 光标位置前插入字符 a 光标所在位置一个字符开始增加...$PATH:$JAVA_HOME/bin" export PATH 【注意】是英文状态下符号 然后按Esc回到末行模式,输入:wq保存退出 echo $PATH 输出刚配置PATH值 感谢阅读

1.4K31

Android富文本开发

插入图片后,图片宽度填充满手机屏幕宽度,然后高度可以动态设置,图片是剧中裁剪显示; 在编辑状态,插入图片后,如果本地图片过大,要求对图片进行质量压缩,大小压缩; 在编辑状态,插入多张图片时,添加插入过渡动画...结束后,光标移到插入图片中最后一行显示; 编辑状态,图片点击暴露点击事件接口,可以4个边角位置动态设置一个删除图片功能,点击删除按钮则删除图片; 连续插入多张图片时,比如顺序1,2,3,注意避免出现图片插入顺序混乱问题...参考易车是:共n个文字,共n个图片显示 02.实现方案介绍 2.0 页面构成分析 整个界面的要求 整体界面滚动,可以编辑,也可以预览 内容可编辑可以插入文字、图片等。...当前编辑器已经添加了多个输入文本EditText,现在问题在于需要记录当前编辑EditText,应用样式时候定位到输入控件,在编辑添加一个变量lastFocusEdit。...CHANGE_APPEARING:由于容器要显现一个元素,其它元素变化需要动画显示。 DISAPPEARING:元素容器消失时需要动画显示。

8.4K20

转载 vivim 使用方法讲解

2) 插入模式(Insert mode) 只有Insert mode下,才可以做文字输入,按「ESC」键回到命令行模式。...插入模式 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件; 按「a」进入插入模式后,是从目前光标所在位置一个位置开始输入文字; 按「o」进入插入模式后...B) 跳到文件某一行 「#」:「#」号表示一个数字,冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章第15行。...G  光标移至文章最后 $  光标移动至行尾 Ctrl+f  向前翻屏 Ctrl+b  向后翻屏 Ctrl+d  向前翻半屏 Ctrl+u  向后翻半屏 i  光标位置前插入字符 a  光标所在位置一个字符开始增加...粘贴 u  取消操作 cw  更改光标所在位置一个字 #cw  更改光标所在位置#个字 下表列出行命令模式下一些指令  w filename  储存正在编辑文件为filename wq filename

1.4K20

vivim基本使用方法

2) 插入模式(Insert mode) 只有Insert mode下,才可以做文字输入,按「ESC」键回到命令行模式。...插入模式 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件; 按「a」进入插入模式后,是从目前光标所在位置一个位置开始输入文字; 按「o」进入插入模式后...删除文字 「x」:每按一次,删除光标所在位置“后面”一个字符。 「#x」:例如,「6x」表示删除光标所在位置“后面”6个字符。 「X」:大写X,每按一次,删除光标所在位置“前面”一个字符。...B) 跳到文件某一行 「#」:「#」号表示一个数字,冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章第15行。...$光标移动至行尾 Ctrl+f向前翻屏 Ctrl+b向后翻屏 Ctrl+d向前翻半屏 Ctrl+u向后翻半屏 i光标位置前插入字符 a光标所在位置一个字符开始增加 o插入一行,从行首开始输入

1.2K10

打字机效果实现与应用

前言 web 应用,模拟编辑器或者模拟输入框中文字啪啦啪啦输入效果,往往能够吸引人们眼球,让用户注意力聚焦输入内容上,其实使用是 web 动画模拟打字机效果,本文将和大家探讨打字机效果实现方式以及应用...,只需把要展示文本进行切割,使用定时器不断向 DOM 元素里追加文字即可,同时使用::after 伪元素 DOM 元素后面产生光标闪烁效果。... 对 seo 非常友好,它是在从页面上 HTML 元素读取,再通过 js 动态插入。...将页面上输入值,设置到 state 然后再使用 vue watch,监听输入值变化,将 markdown 解析成 HTML 插入到页面。...自定义组件、样式、生成二维码、代码 diff 高亮,一键拷贝到微信,导出 markdown 和 PDF。

2.5K20

LinuxUnix下vivim常见操作

2) 插入模式(Insert mode) 只有Insert mode下,才可以做文字输入,按「ESC」键回到命令行模式。...插入模式 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件; 按「a」进入插入模式后,是从目前光标所在位置一个位置开始输入文字; 按「o」进入插入模式后...B) 跳到文件某一行 「#」:「#」号表示一个数字,冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章第15行。...$ 光标移动至行尾 Ctrl+f 向前翻屏 Ctrl+b 向后翻屏 Ctrl+d 向前翻半屏 Ctrl+u 向后翻半屏 i 光标位置前插入字符 a 光标所在位置一个字符开始增加 o 插入一行...#行 yw 复制光标所在位置一个字 #yw 复制光标所在位置#个字 yy 复制光标所在位置一行 #yy 复制从光标所在行数#行 p 粘贴 u 取消操作 cw 更改光标所在位置一个字 #cw 更改光标所在位置

75730

富文本vue-quill-editor结合el-element实现自定义上传组件

,点击图片上传时调用iview或者element图片上传,上传成功后富文本编辑显示图片 步骤 零、安装使用 npm install vue-quill-editor --save main.js...可能不止一处地方用到,比如添加完成后还有编辑功能,那就复制一份文件上传和富文本编辑:两个富文本用不同ref标记,各自配置调用各自文件上传;文件上传成功也使用不同方法名称,里面调用各自富文本编辑器...解决思路也相同:vue-quill-editor自定义按钮,点击使用iView文件上传,然后将地址赋值给a标签href属性,插入到富文本光标处。...不知道为什么,百度都搜不到,好像只有我出现了这个问题,最后通过监听回车,手动换行并在换行后加了一个空格,因为没有内容时候光标不显示,然后光标向前调一个位置,移到空格前面。...; 方式一: 可以另写一个style标签里面写上样式,也可以原有的样式通过深度选择器来写样式

2.9K30

Linuxvim用法

插入模式(Insert mode) 只有 Insert mode 下,才可以做文字输入,按「ESC」键回到命令行模式。...B) 跳到文件某一行 「#」:「#」号表示一个数字,冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字 15,再回车,就会跳到文章第 15 行。...G 光标移至文章最后 $ 光标移动至行尾 Ctrl+f 向前翻屏 Ctrl+b 向后翻屏 Ctrl+d 向前翻半屏 Ctrl+u 向后翻半屏 i 光标位置前插入字符 a 光标所在位置一个字符开始增加...粘贴 u 取消操作 cw 更改光标所在位置一个字 #cw 更改光标所在位置#个字 下表列出行命令模式下一些指令 w filename 储存正在编辑文件为 filename wq filename...沈唁志|一个PHPer成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:Linuxvim用法

2.9K31

【留言板】可编辑输入框操作总结

闲暇之余,用于加深自己对基础了解,徒手撸了一个留言板:输入框。废话少说,进入正题。简陋效果如下(下载代码): 一、定义需求 输入文本,以及插入表情。...SelectionUitls:实现可编辑输入框操作,如:插入一个表情、获取数据等。 各模块兼容性以下细节中进行介绍。 三、代码实现 1....class元素display为none后,用js是获取不到此元素display值。 兼容性有以下几个点: 事件绑定:attacheEvent和addEventListener。...range.deleteContents(); //删除选区选重元素 range.insertNode(dom); //插入元素选区首位置 range = range.cloneRange...(); //克隆一个选区 range.setStartAfter(dom); //设置选区起点光标位置指定元素后面 range.collapse(true);//合并起点、终点光标

1.4K100

vim编辑器和gccg++编辑使用讲解

Linuxvim常用模式大概可以分为三种,分别是: 命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode) 各种模式下功能如下: 命令模式...我们xshell上一探究竟: 可以看到我新建一个文件用vim打开后默认时插入模式 但是有些版本打开默认时命令模式 那么该如何切换各种模式呢?...,输入指定指令: 但是编辑文件时为插入模式,所以先要按Esc键,然后shift+; 例如: w (保存当前文件) wq (输入「wq」,存盘并退出vim) q!...「#x」:例如,「6x」表示删除光标所在位置“后面(包含自己在内)”6个字符 「X」:大写X,每按一次,删除光标所在位置“前面”一个字符 「#X」:例如,「20X」表示删除光标所在位置“前面”...,这样就能实现函数“printf”了,而这也就是链接作用 函数库一般分为静态库和动态库两种 例如,windows: .dll就是动态库,.lib就是静态库 静态库是指编译链接时**,把库文件代码全部加入到可执行文件

13210

vi,java,ant 和Junit 学习报告

vi,java,ant 和Junit 学习报告 一、vi编辑使用 总体概念:Vi 编辑器是所有 Unix 及 Linux 系统下标准文本编辑器 进入Vi环境后,基本有三种基本状态:命令行模式(...插入模式 只有进入此模式才能进行文字输入,按「ESC」键回到命令行模式。...进入插入模式 命令行模式下: 按「i」切换进入插入模式,从光标当前位置开始输入文件; 按「a」进入插入模式后,是从当前光标所在位置一个位置开始输入文字; 按「o」进入插入模式后,是插入一行...(不存盘强制退出 vi) 其他操作 复制、跳转、查找、显示行号等 参考教程:vi编辑使用 二、java基础 (熟悉C系列编程语言基础上学习) 1、其数据类型、程序控制语句(循环、分支、.../> 关键元素 project: Ant 构件文件元素,至少应包含一个 project 元素

49010

上古神器Gvim--从入门到精通

2.插入模式 在这个模式下可以输入文本内容到文件。可以几种不同情况下插入字符。...+ 光标移动到非空格符下一行 - 光标移动到非空格符上一行 n+空格光标会移动到n个空格处 0+回车 尾行模式 按下0然后回车,会将光标移动到第一位 插入命令‘H’也可以...gg和1G也可以 $+回车 尾行模式 按下$然后回车,会将光标移动到最后一位 插入命令‘L’也可以 M插入命令光标移动到屏幕中央那一行一个字符 G插入命令光标移动到最后一行...1).删除光标所在位置字符 进入到命令模式,然后输入"x(右边值删除)" “s(删除并进入插入模式)" "cl(同s)" "dl(同x)" "dh(左边值删除)" 2).删除光标所在位置全部字符...10.分隔窗口 可将一个文件命令窗口分为两个,命令模式下输入“:split”即可。 ?

90010
领券