在使用summernote的富文本编辑器,在粘贴word内容时,会发现代码中有很多无效的代码。通过js处理,可以去掉很多无用的代码。

处理前,粘贴后的代码类似这样:

<p><!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><!--[if gte mso 9]><xml>
 <o:OfficeDocumentSettings>
  <o:AllowPNG></o:AllowPNG>
 </o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:WordDocument>

。。。。。

处理以后,这些无效的代码都可以去除。两种处理方法:

方法1:

在summernote的onPaste事件中处理。js如下:

$('#summernote').summernote({callbacks: {onPaste: function (ne) {var bufferText = ((ne.originalEvent || ne).clipboardData || window.clipboardData).getData('Text/plain');//    ne.preventDefault();  ne.preventDefault ? ne.preventDefault() : (ne.returnValue = false);// Firefox fixsetTimeout(function () {document.execCommand("insertText", false, bufferText);}, 10);/*  */}}});

以上代码在win10下ie11和firefox49中测试通过。

其中要点:

getData('Text/plain'),这里一定要加上plain(不知原因),否则,ie11不能粘贴,而FF、Edge则正常。

另外奇怪的地方,ie11可以粘贴过来图形,而FF和Edge却不行。莫名其妙。

========================

方法2:

通过js方法处理。添加summernote自定义按钮,自定义按钮事件,使用js方法有效去除庸余代码,此方法效果好于上述方法。此方法在IE11下测试通过。

            // custom buttonvar EmptyButton = function (context) {var ui = $.summernote.ui;var button = ui.button({contents: '<i class="note-icon-trash"/>',tooltip: '清除全部内容',click: function () {context.invoke('editor.empty');}});return button.render();};var CleanWordButton = function (context) {var ui = $.summernote.ui;var button = ui.button({contents: '<i class="note-icon-square"/>',tooltip: '清除Word格式',click: function () {//  清除img的wrap元素var str = context.invoke('code');str = CleanPastedHTML(str); //  class="hidden"$('.container').append('<div id="tmp">' + str + '</div>');$('#tmp table img').unwrap( );str = $('#tmp').html();str = CleanPastedHTML(str); //  class="hidden"$('#tmp').remove();context.invoke('code', str);}});return button.render();};$(document).ready(function () {$('.summernote').summernote({lang: 'zh-CN',height: 500,minHeight: 240, // set minimum height of editor// maxHeight: null, // set maximum height of editorfocus: true, // set focus to editable area after initializing su dialogsInBody: true,dialogsFade: true, // Add fade effect on dialogs,disableDragAndDrop: true,shortcuts: true,placeholder: '在这里添加内容',toolbar: [['style', ['clear', 'bold', 'italic', 'underline', 'word']],['font', ['fontname', 'fontsize', 'strikethrough', 'superscript', 'subscript']],['color', ['color']],['para', ['ul', 'ol', 'paragraph', 'style', 'height']],['insert', ['table', 'picture', 'hr']],['mybutton', ['empty', 'undo', 'redo']],['misc', ['fullscreen', 'codeview', 'help']]],buttons: {empty: EmptyButton, word: CleanWordButton}});$('.note-group-image-url').hide(); // 隐藏img url   $('.summernote').summernote('code', '<p><br></p>');$('.summernote').summernote('focus');$('.summernote').summernote('fullscreen.toggle');});
function CleanPastedHTML(input) {// 1. remove line breaks / Mso classesvar stringStripper = /(\n|\r| class=(")?Mso[a-zA-Z]+(")?)/g;var output = input.replace(stringStripper, ' ');// 2. strip Word generated HTML commentsvar commentSripper = new RegExp('<!--(.*?)-->','g');var output = output.replace(commentSripper, '');var tagStripper = new RegExp('<(/)*(meta|link|span|\\?xml:|st1:|o:|font)(.*?)>','gi');// 3. remove tags leave content if anyoutput = output.replace(tagStripper, '');// 4. Remove everything in between and including tags '<style(.)style(.)>'var badTags = ['style', 'script','applet','embed','noframes','noscript'];for (var i=0; i< badTags.length; i++) {tagStripper = new RegExp('<'+badTags[i]+'.*?'+badTags[i]+'(.*?)>', 'gi');output = output.replace(tagStripper, '');}// 5. remove attributes ' style="..."'var badAttributes = ['style', 'start'];for (var i=0; i< badAttributes.length; i++) {var attributeStripper = new RegExp(' ' + badAttributes[i] + '="(.*?)"','gi');output = output.replace(attributeStripper, '');}return output;
} 

基于summernote的富文本编辑器,粘贴时去除word格式相关推荐

  1. springboot整合H+,基于summernote的富文本编辑器图片上传

    我在做这块任务时遇到了好几个问题,也查了一些资料,自己总结的一些东西,希望可以帮到一些有需要的朋友,废话不多说开始看代码. 首先看前台页面: 需要注意的是summernote的默认图片上传是base6 ...

  2. 基于summernote的富文本编辑器,粘贴时去除word、html格式

    <script> $(document).ready(function() { $('#summernote').summernote({ height: 350, lang: 'zh-C ...

  3. 基于jQuery的富文本编辑器summernote插件的使用教程

    基于jQuery的富文本编辑器summernote插件的使用教程 基于jQuery的富文本编辑器summernote插件的使用教程 一:最近项目中遇到使用富文本编辑器的功能, JQuery的富文本编辑 ...

  4. html编辑保存为word文档,html 保存成word (富文本编辑器导出内容成word)

    这几天项目里有个需求,用到富文本编辑器,然后导出word. 富文本编辑器,网上很多,使用夜很简单,我们使用的是kindEditor.百度的ueditor很好,而且文档很全.阿里的kissy 感觉比较复 ...

  5. 富文本编辑器粘贴复制Word

    公司做的项目需要用到粘贴Word功能.就是将word内容一键粘贴到网页编辑器(在线富文本编辑器)中.Chrome+IE默认支持粘贴剪切板中的图片,但是我要粘贴的文章存在word里面,图片多达数十张,我 ...

  6. 富文本编辑器tinymce支持从word复制粘贴保留格式和图片的插件powerpaste

    公司做的项目需要用到粘贴Word功能.就是将word内容一键粘贴到网页编辑器(在线富文本编辑器)中.Chrome+IE默认支持粘贴剪切板中的图片,但是我要粘贴的文章存在word里面,图片多达数十张,我 ...

  7. 【uEditor】引入富文本编辑器uEditor时,上传图片失败的原因

    uEditor uEditor是百度开发的一款开源的富文本编辑器.官网地址:http://ueditor.baidu.com/website/ 使用教程请看官网文档 前言 如何引入我就不赘述了,官网有 ...

  8. 基于 Layui 的富文本编辑器和封面的实现方案

    文章目录 前言 素材文件 1. 富文本编辑器的实现步骤 1.1 添加 layui 表单行 1.2 导入富文本必须的 script 脚本 1.3 初始化富文本编辑器 2. 图片封面裁剪的实现步骤 2.1 ...

  9. Vue 自定义富文本编辑器 tinymce 支持导入 word 模板

    自定义富文本编辑器分为前端项目和后端项目两个部分,首先先说一下前端项目 前端 前端项目地址: https://github.com/haoxiaoyong1014/editor-ui 编辑器名称: t ...

最新文章

  1. 程序员需要牢记的一点
  2. OpenCV支持向量机SVM和SDG算法的实例(附完整代码)
  3. 客户端跳转代码html5,HTML5跳转小程序wx-open-launch-weapp的示例代码
  4. Prometheus(一):Web服务环境监控
  5. 通信教程 | 串口丢数据常见的原因
  6. 主成分分析(PCA)及其可视化——matlab
  7. bzoj4565 [HAOI2016]字符合并 结论+状压+区间dp
  8. 计算机四级准考证ppt,计算机等级考试四级课件PPT.ppt
  9. 那位 13 岁就当上老板的开发者是如何炼成的?
  10. CSS雪碧,即CSS Sprite 简单的例子
  11. 服务器芯片组思维导图,服务器思维导图
  12. vm安装dmg苹果镜像_无需刻录DMG光盘,教你在VMWare下安装MAC OS X Snow Leopard 10.6
  13. 吉他音阶训练——问题解答 (三)
  14. 发布地图服务时导入已有的tpk切片包作为缓存
  15. zookeeper storm kafka开机简易启动脚本
  16. 键盘录入一个长方形的长和宽(长和宽为int类型),计算长方形的面积和周长
  17. [北航软工教学] 教学计划大纲
  18. 二叉树-求叶节点个数
  19. 多项式, FTT, NTT小结
  20. 用proteus来玩二极管或门电路

热门文章

  1. 字节终面:说说Kakfa副本状态机的实现原理?
  2. 计算机输入法不能切换用户登录,输入法不能正常切换,输入法切换不出来 - 输入法切换不了,输入法不能切换怎么办? - 安全专题...
  3. 使用 Vue 和 Electron 开发一款简单的 Markdown 编辑器
  4. Kali Linux 安装搜狗拼音输入法
  5. mpc-hc设置说明
  6. ubuntu16.04(虚拟机) 上MPD(Music Player Daemon)+MPC运行环境搭建
  7. VF2, VF3算法
  8. 怎么做好WMS系统项目的验收
  9. 前端vue从后台取到数据(数组对象)后遍历给对象添加属性,修改这个属性为什么没有用?
  10. pip install了之后还是显示no module named xxx的解决办法