博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用剪切板JS API优化输入框的粘贴体验
阅读量:6612 次
发布时间:2019-06-24

本文共 2629 字,大约阅读时间需要 8 分钟。

hot3.png

兼容性

e3c36460c2d09c92e4c0e906b6c4bbb2041.jpg

直接复制记录下

/**@description 表单输入框粘贴体验优化,出处https://www.zhangxinxu.com/wordpress/?p=8003@author zhangxinxu*/// 遍历所有的输入框[].slice.call(document.querySelectorAll('input, textarea')).forEach(function (ele) {    ele.addEventListener('paste', function (event) {        // 输入框类型        var type = this.getAttribute('type') || this.type;        // 剪切板数据对象        var clipboardData = event.clipboardData || window.clipboardData;        // 粘贴内容        var paste = '';        // 剪切板对象可以获取        if (!clipboardData) { return; }        // 获取选中的文本内容        var textSelected = '';        if (window.getSelection) {             // 现代浏览器            // 直接window.getSelection().toString()对于IE的输入框无效            textSelected = this.value.slice(ele.selectionStart, ele.selectionEnd);        } else if (document.selection) {             // 旧IE浏览器            textSelected = document.selection.createRange().text;        }        // 只有输入框没有数据,或全选状态才处理        if (this.value.trim() == '' || textSelected === this.value) {            // 阻止冒泡和默认粘贴行为            event.preventDefault();            event.stopPropagation();            // 获取粘贴数据            paste = clipboardData.getData('text') || '';            // 进行如下处理            // 除非是password,其他都过滤前后空格            if (type != 'password') {                paste = paste.trim();            }            // 邮箱处理,可能会使用#代替@避免被爬虫抓取            if (type == 'email') {                paste = paste.replace('#', '@');            } else if (type == 'tel') {                // 手机号处理                paste = paste.replace(/^\+86/, '');                // 如果此时剩余所有数字正好11位                if (paste.match(/\d/) && paste.match(/\d/g).length == 11) {                    paste = paste.replace(/\D/g, '');                }                } // 其他类型处理大家自行补充...                        // 插入            this.value = paste;        }    });    });

拖拽也可以使用

input.addEventListener('drop', function (event) {    // 获取拖拽文本内容    var text = event.dataTransfer.getData('text');    if (this.value == '' && text.match(/\d/g) && text.match(/\d/g).length == 11) {        event.preventDefault();        input.value = text.replace(/\D/g, '');        input.select();    }});

基于剪切板JS API可以做的事情不仅仅是粘贴,复制的时候也可以做些事情,例如,我可以在我的网站页面上绑定一个copy事件,当你复制文章内容的时候,自动在剪切板文字后面加上一段版权声明。

代码示意:

document.addEventListener('copy', function (event) {    var clipboardData = event.clipboardData || window.clipboardData;    if (!clipboardData) { return; }    var text = window.getSelection().toString();    if (text) {        event.preventDefault();        clipboardData.setData('text/plain', text + '\n\n鑫空间版权所有');    }});

 

转载于:https://my.oschina.net/u/2367690/blog/2250506

你可能感兴趣的文章
倒计时 功能
查看>>
[JS] - onmusewheel事件(兼容IE,FF,opera,safari,chrome)
查看>>
CUDA程序优化[转]
查看>>
window.open()和window.showModalDialog 的使用及传值操作
查看>>
网络编程 - socket实现多个连接处理
查看>>
计科1501韩猛试验7
查看>>
JS基础框架类库
查看>>
Java学习之旅基础知识篇:数据类型及流程控制
查看>>
对线程池简单理解
查看>>
NOI 2010 海拔 ——平面图转对偶图
查看>>
【转】程序员需谨记的8条团队开发原则
查看>>
ObjectARX2012学习笔记之Autodesk.AutoCAD.Colors Namespace
查看>>
leetcode 714. 买卖股票的最佳时机含手续费
查看>>
从技术渣到被要求改行到硅谷程序媛
查看>>
读书笔记之:Exceptional C++ Style (2004) [++]
查看>>
windows添加虚拟网卡
查看>>
HTTP协议基础总结
查看>>
Shell脚本调试
查看>>
201521123070 《JAVA程序设计》第6周学习总结
查看>>
会计的思考(42):会计如何转变为公司的内部财务顾问
查看>>