富文本粘贴文本去除默认格式

摘要:
当我们复制文本时,默认情况下会复制所有样式,如下所示:这有时很麻烦。也许我们不需要这些默认样式。我们只想复制文本并根据我们的要求进行转换。此时,我们可以使用强大的选择和范围对象,这可以解决我们开发中的许多常见问题。文本选择区域是通过在文本中拖动鼠标来生成的。

  在我们开发过程中,经常用到的文本输入框,常用的是input/textarea。然而在有些情况下,input/textarea可能满足不了我们的业务需求,textarea/input大部分是处理纯文本,不能附加一些自定义样式,文本域内业务操作空间也不怎么大,但是富文本,即可以编辑的HTML,可以针对输入内容做任意自定义处理,因此,在特定业务需求下,富文本编辑更符合我们的实际业务要求。

  富文本基本使用:只需要给HTML标签添加一个contenteditable=‘true’即可完成普通HTML与富文本的转换,效果如下:

<section>
    <h3>富文本编辑器</h3>
    <div style="height: 300px; 300px;background: #eee;" contenteditable="true"></div>
  </section>

  富文本粘贴文本去除默认格式第1张

   当我们输入的时候,是输入普通的文本,具体样式以我们设置的css为准。当我们复制文本的时候,默认会把所有的样式复制进去,如下所示:

  富文本粘贴文本去除默认格式第2张

   这一点有时候也是比较繁琐的,可能我们并不需要这些默认样式,我们只想要复制的文本,按照我们的要求进行转换,此时可能就要用到强大的Selection和Range对象了,可以解决我们开发中很多常见的问题。下面就简介下Selection 和 Range对象:

  借用MDN上的解释:Selection对象表示用户选择的文本范围或插入符号的当前位置。它代表页面中的文本选区,可能横跨多个元素。文本选区由用户拖拽鼠标经过文字而产生。要获取用户检查或修改的Selection对象,请调用window.getSelection()。

  Range则是每个具体的选区,对于富文本的复制文本格式过滤,我们主要就是借助Range对象中某些具体的属性和方法,从而来操作选区内容,具体实现代码如下:

 1 document.addEventListener('paste', e => {
 2       // 阻止默认的复制事件
 3       e.preventDefault()
 4       let txt = ''
 5       let range = null
 6       // 获取复制的文本
 7       txt = e.clipboardData.getData('text/plain')
 8       // 获取页面文本选区
 9       range = window.getSelection().getRangeAt(0)
10       // 删除默认选中文本
11       range.deleteContents()
12       // 创建一个文本节点,用于替换选区文本
13       let pasteTxt = document.createTextNode(txt)
14       // 插入文本节点
15       range.insertNode(pasteTxt)
16       // 将焦点移动到复制文本结尾
17       range.collapse(false)
18     })
 
  参考资料:
    Selection: https://developer.mozilla.org/zh-CN/docs/Web/API/Selection
    Range: https://developer.mozilla.org/zh-CN/docs/Web/API/Range/Range
  
 

免责声明:文章转载自《富文本粘贴文本去除默认格式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RGB颜色查询对照表WINDBG分析DMP方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

linux 安装nginx

1.检查服务器上是否安装了nginx:nginx v2。查看编译参数:nginxv3。查看安装目录:rpm-qlnginx4。查看配置文件:/etc/logrotate D/nginx5。在安装nginx之前,请确保系统中安装了gcc、pcre-devel、zlib-devel和openssl-devel。5.1如果安装了rpm软件包,您可以使用rpm qa...

svn常见问题汇总

要添加到版本库,必须更新工作副本中的文件。5.更新时,系统会提示您文件冲突,将工作副本中的文件与服务器中的文件进行比较“当版本管理系统更改计算机上的工作副本时”,它会尝试将您的意图写入计算机上的日志文件,因此日志文件记录可能与您的上次工作状态不一致。Subversion客户端将在提交内容之前在本地工作副本中写入日志。首先删除隐藏文件夹中tmp下的临时文件。服...

CommonJS规范

NodeJS是本规范的实现。环境、运行、JSGILocaland远程包和包管理关于每个子规范的具体定制进度,请参考官方网站描述:Apache CouchDB和node.js。然而,这些项目中的大多数只实现了CommonJS的一些规范。具体项目及实施请参见官方网站描述:http:...

win10 优化批处理

@ECHOoffECHO关闭自动修复bcdedit/setrecoveryenabledNOecho完成ECHO关闭WindowsDefenderregadd“HKEY_LOCAL_MACHINESOFTWARE策略MicrosoftWindowsDefender”/v“DisableAntiSpyware”/d1/tReG_ DWORD/fcho完成ECH...

从零开始制作Galgame——我的Ren'py学习笔记(一)

然后点击“启动工程”点击“开始游戏”效果应该是这样的好了,现在你就制作出了属于自己的第一个游戏角色在一般的Galgame中,不是所有话都是“旁白”说的,一个完整的游戏里面应该有主角那么,怎么在ren'py中定义角色呢我们把刚才的代码更改一下definel=Characterlabelstart:l"HelloWorld!...

vscode 用户设置与工作区设置

用户设置与工作空间设置VSCode提供了两种设置方式:-用户设置:这种方式进行的设置,会应用于该用户打开的所有工程;-工作空间设置:工作空间是指使用VSCode打开的某个文件夹,在该文件夹下会创建一个名为.vscode的隐藏文件夹,里面包含着仅适用于当前目录的VSCode的设置,工作空间的设置会覆盖用户的设置。更改默认用户设置与工作空间设置VSCode的设置...