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

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

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

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

  

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

  

  这一点有时候也是比较繁琐的,可能我们并不需要这些默认样式,我们只想要复制的文本,按照我们的要求进行转换,此时可能就要用到强大的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

  

原文地址:https://www.cnblogs.com/gerry2019/p/11807442.html

时间: 2024-08-03 09:41:07

富文本粘贴文本去除默认格式的相关文章

Axure 文本框去掉边框 富文本 粘贴文字图标

在今天做原型的过程中,碰到两个问题: 1 文本框该如何去掉边框 2 富文本粘贴文字图标 第一个问题:首先是思路错了,又跑到元件上面找边框,跑到style里面去border的线,结果是不成功. 正解:属性properties里面有个 hide border属性,勾选下就ok了. 第二个问题:没想其他的,就是复制粘贴,可怎么也粘贴不上,气急败坏了,到底怎么回事了. 正解:在百度帖吧里面发现了正解,复制图标元件的正确姿势,双击确认是复制了.原话是这样的: 还有复制的时候是双击元件,像复制文字行一样选择

复制小说文本时如何去除随机乱码?

复制小说文本时如何去除随机乱码? 想把小说复制上去慢慢看,却看见复制到记事本里出现一大堆良莠不齐的乱码,十分不爽.因此就想了个复杂的办法把它解决. 估计别的人也遇到多么愁闷的事,那就按我后面的办法做吧. 打开对应的小说页面,然后删除地址栏上地址,将下面的内容粘贴到地址栏上,按回车(或"转到"按钮),这样,所有的乱码都清除了,此时你就可以放心的复制到文本里去了 代码如下: javascript:var myfonts=document.getElementsByTagName('font

css(文本格式化,文本格式处理)

文本格式化,文本格式处理 文本格式化 1.控制字体 1.指定字体 font-family:"microsoft yahei",arial,"宋体"; 2.字体大小 font-size: px , pt 作为单位  30pt  16pt 常用字体大小:12px - 14px 3.字体加粗 相当于 <b></b> font-weight : normal / bold ; 建议:通过 该属性取代 b 标签 4.字体样式 斜体 font-style

c# winform 设置winform进入窗口后在文本框里的默认焦点

http://www.cnblogs.com/JuneZhang/archive/2011/04/19/2020585.html 进入窗口后默认聚焦到某个文本框,两种方法: ①设置tabindex 把该文本框属性里的tabIndex设为0,焦点就默认在这个文本框里了. ②Winform的Activated事件 在Form的Activated事件中添加textBox1.Focus(), 即可获得焦点. ? private void Form1_Activated(object sender, Ev

C#WinForm中复制、粘贴文本到剪贴板

//复制: private void button1_Click(object sender, System.EventArgs e) { if(textBox1.SelectedText != "")    Clipboard.SetDataObject(textBox1.SelectedText); } //粘贴: private void button2_Click(object sender, System.EventArgs e) { IDataObject iData =

前台富文本编辑器文本乱码,图片正常显示,解决!

前台:contentPxp=encodeURIComponent(contentPxp); 后台:String content = request.getParameter("contentPxp"); (getParameter的时候,servlet会自动解码一下) 前台富文本编辑器文本乱码,图片正常显示,解决!

jquery.min.js v1.10.3版本autocomplete方法会在text前添加搜索出多少项的文本信息 要去除

http://stackoverflow.com/questions/13011127/how-to-remove-change-jquery-ui-autocomplete-helper-text How to remove/change JQuery UI Autocomplete Helper text? It seems that this is a new feature in JQuery UI 1.9.0, because I used JQuery UI plenty of ti

Linux文本处理---文本搜索

在linux中,因为一切皆文件,而大部分程序的配置文件是文本形式的.所以对文本的处理就显得相当的重要了.对文本的处理包括对文本内容的搜索,文本内容的处理.下面就介绍文本的搜索相关知识. 文本内容搜索 文本搜索的含义是:根据用户指定的文本搜索模式(搜索条件)对目标文件进行逐行的扫扫描,将匹配到的行打印在屏幕上.文本搜索的主要作用是用于统计相关信息. 一.正则表达式 1.正则表达式的概念 是一类字符的书写模式,这些个字符不代表本字符的意义,而是具有特殊意义.一般是对控制或通配的功能. 2.正则表达式

Linux文本处理---文本查找

文件查找 所谓的文件查找时根据文件的各种属性在特定的路径下找到对应文件的过程. 一.文件查找的方式 实时查找:遍历所有文件进行条件匹配.查找精确,但是速度慢. 这种查找通过find命令来实现. 非实时查找:根据索引进行查找.查找速度快,但是查找不精确. 这种查找locate命令,它只依赖于索引查找的,索引的创建时在系统空闲的时候由系统自动进行的.手动更新数据库的命令式upadtedb. 二.实时查找 通过find命令来实现.find是根据查找条件,在查找路径中查找到对应的文件,根据处理动作做出相