我是靠谱客的博主 无奈烧鹅,最近开发中收集的这篇文章主要介绍copy cut paste事件 重写clipboardData的值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

copy cut paste事件 重写clipboardData的值

##前言
需求是将表单页面的输入框内容粘贴到其他地方,自动清除其空格

##初始思路
window监听copy和cut事件,使用正则表达式将数据处理。
后来反思,这样做只考虑了复制内容为当前页面或者项目,如果从其他地方复制粘贴则无效。那么监听paste事件一定可以,不管从哪里复制的,paste就是入口,数据一定会经过这个事件的。

##copy或cut的代码实现 仅考虑文本类型
在生命周期函数componentDidMount中添加代码

 window.addEventListener('copy',this.handleCopyKey) 
  window.addEventListener('cut',this.handleCopryKey)  
  // copy文本的处理  去掉空格
     handleCopyKey = (e)=>{
         const selection = document.getSelection();
         e.preventDefault();  
         e.clipboardData.setData("Text",selection.toString().replace(/s+/g, ''))
     }

实现
在生命周期函数componentDidMount中添加代码

window.addEventListener('paste',this.handlePasteKey)
 handlePasteKey = (e)=>{
         e.preventDefault();
         e.clipboardData.setData("Text",selection.toString().replace(/s+/g, ''))
         var text;
         var clp = (e.originalEvent || e).clipboardData;
         var type=clp.items[0].type; // 可通过类型来进行粘贴文件的判断  【重点】
         //兼容针对于opera ie等浏览器
         if (clp === undefined || clp === null) {
             text = window.clipboardData.getData("text") || "";
             if (text !== "") {
                 if (window.getSelection) {
                     // 针对于ie11 10 9 safari
                     var newNode = document.createElement("span");
                     newNode.innerHTML = text; 
                     window.getSelection().getRangeAt(0).insertNode(newNode);
                 } else {
                     // 兼容ie10 9 8 7 6 5
                     document.selection.createRange().pasteHTML(text);
                 }
             }
         } else {
           if(type.match(/image/)){
             var blob = clp.items[0].getAsFile();
                 var file = new FileReader();
                 file.onload=function(){
                   document.execCommand('insertHTML', false, `<img src="${file.result}"></img>`);
                 }
                 file.readAsDataURL(blob);
           }else{
             //兼容chorme或hotfire
             text = clp.getData('text/plain') || "";
             if (text !== "") {
                 document.execCommand('insertText', false, text.replace(/s+/g, ''));
             }
           }
         }
     }

参考文档 https://blog.csdn.net/qq_37190789/article/details/119212187.

最后

以上就是无奈烧鹅为你收集整理的copy cut paste事件 重写clipboardData的值的全部内容,希望文章能够帮你解决copy cut paste事件 重写clipboardData的值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部