测试了很多次之后,虽然有点细碎的突破,但还是想说,麻辣隔壁...

众所周知使用 oncut/oncopy/onpaste 监听剪切板,采用 window.clipboardData 并不是适用于大多浏览器,

某天突然发现事件对象 e 中有个 clipboardData 属性,也就是 e.originalEvent.clipboardData,于是才有了今天的尝试,

然而,依旧问题重重呀...先看一段不太舒服的代码。

$('.copy').on('beforecopy beforecut beforepaste copy cut paste', function(e){
var clipboardData = window.clipboardData || e.originalEvent.clipboardData;
switch (e.type) {
case 'copy':
clipboardData.setData('text', '复制我干啥');
console.log(clipboardData.getData('text'));
console.log('复制:'+clipboardData.getData('text'));
break;
case 'beforecopy':
clipboardData.setData('text', '改个数据试试');
console.log('我就是在复制的前面,虽然并没有卵用');
break;
case 'cut':
clipboardData.setData('text', '剪切我干啥');
console.log('剪切:'+clipboardData.getData('text'));
break;
case 'paste':
clipboardData.setData('text', '粘贴我复制还有用吗');
console.log('粘贴:'+clipboardData.getData('text'));
break;
}
});

显然这个操作很不友好,跟玩儿似的,

copy 或 beforecopy 时 setData 了新的内容,对 paste 并不会产生任何影响,

能够在粘贴时对复制的文本进行一定的操作,但显然也只是能在本网页而已,

再者,copy 和 cut 时 getData 是为空的,火狐不支持 beforecopy 方法等...好吧,这特么太鸡肋了。

而对于当年流行的 zeroclipboard.swf 到了今日却不得不放弃了,毕竟屏蔽 flash 小程序的浏览器越来越多。

再后来我就找到了 clipboard.js 这个插件,虽然只有点击才能生效,但我已然是知足的了。

<div class="box">
<textarea id="bar">复制点啥好呢</textarea>
<button class="btn" data-clipboard-action="copy" data-clipboard-target="#bar">Copy</button>
</div>
<div class="box">
<button class="btn2" data-clipboard-text="你猜我复制了什么">Copy</button>
</div>
<script src="http://cdn.bootcss.com/clipboard.js/1.5.12/clipboard.min.js"></script>
<script>
var x = new Clipboard('.btn', {
  text: function(trigger) {
    return document.querySelector(trigger.getAttribute('data-clipboard-target')).value + '\n\n\n复制来源于博客园';
  }
});
x.on('success', function(e){
// e 拥有三个属性,
// action: 类型('copy'|'cut')
// text: 值('cut'时有点小问题)
// trigger: dom元素
console.log(e);
});
x.on('error', function(e){
console.log(e);
}); var xx = new Clipboard('.btn2');
</script>

应该还是很好理解的吧,不然那还是看官网吧。

原理好像很简单的样子,主要靠 getSelection 和 createRange 这类东西,

以后再开一章研究下这种复制粘贴的事件启动问题,以及粘贴时自定义化,blabla...

JS 操作复制剪切粘贴的更多相关文章

  1. vim选中字符复制/剪切/粘贴

    转载自:http://www.cnblogs.com/luosongchao/p/3193153.html 问题描述: vim 中选中指定字符,进行复制/剪切/粘贴 选择:1.普通模式下--v+hjk ...

  2. vi学习 常用命令-新建-复制-剪切-粘贴

    mkdir /home/brandon.du/desktop/mylinux/test_1.txt   ---------mkdir新建文件夹 rm /home/brandon.du/desktop/ ...

  3. vim 介绍安装 复制 剪切 粘贴

    1. vim 产生:对于linux 文件的编辑,最初是vi,然后对于其功能的扩展,就产生了vim vim 的安装 yum install vim 2.光标的移动 用得最多的就是方向键上的 上下左右,和 ...

  4. 【javascript】js实现复制、粘贴

    使用document.ExecCommand("copy")命令,官方文档,点我. 例如: <!DOCTYPE html> <html> <head& ...

  5. js 实现复制剪切

    原生js实现复制 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  6. js 实现复制到粘贴板功能

    前言:js 或者 jquery 都可以实现的复制到粘贴板功能,有时还想要有换行等格式(同 textarea) 网站地址:我的个人vue+element ui demo网站 github地址:yuleG ...

  7. vim常用操作之复制剪切粘贴,注释取消注释,多行缩进等

    进入vim按下v键,选择要操作的对象 按下y复制,d剪切,p粘贴 >缩进,<取消缩进 按下esc退出操作 按下ctrl+v,选择要操作对象, 按下大写I,写入注释符号,按下d取消注释 按下 ...

  8. js实现复制|剪切指定内容到粘贴板--clipboard

    这是著名开源项目 clipboard.js 的 README.md,里面讲解的更加详细,有兴趣的同学可以了解一下.项目地址:https://github.com/zenorocha/clipboard ...

  9. linux命令-vim一般模式下复制剪切粘贴

    删除光标后的一个字符 x 删除光标前的一个字符 shift+x 删除指定个数的字符 数字+x 删除一行字符 dd 剪切指定行数  数字dd  3dd 剪切3行 其实并没有删掉而是保存着剪切板里 粘贴在 ...

随机推荐

  1. Mongodb 与 MySQL对比

    在数据库存放的数据中,有一种特殊的键值叫做主键,它用于惟一地标识表中的某一条记录.也就是说,一个表不能有多个主键,并且主键不能为空值. 无论是MongoDB还是MySQL,都存在着主键的定义. 对于M ...

  2. windows下mysql区分大小写敏感问题

    默认情况下,表别名在Unix上区分大小写,但在Windows或macOS上不是这样.以下语句在Unix上不起作用,因为它引用别名as a和as A: mysql> SELECT col_name ...

  3. Hibernate每个子类一张表(使用注释)实例

    在每个子类一张表的情况下,表是根据持久类创建的,但是它们使用主键和外键来重新定义. 所以关系中不会有重复的列. 我们需要在子类中的使用@PrimaryKeyJoinColumn注释和在父类指定@Inh ...

  4. asp.net 页面延时五秒,跳转到另外的页面

    asp.net 页面延时五秒,跳转到另外的页面的实现代码. --前台 <%@ Page Language="C#" AutoEventWireup="true&qu ...

  5. python3----练习题(三级菜单)

    三级菜单程序. 运行程序输出第一级菜单. 选择一级菜单某项,输出二级菜单,同理输出三级菜单. 退出时返回上一级菜单 menu = { '北京市': { '东城区': { 'aa', 'bb', }, ...

  6. Python抓取豆瓣《白夜追凶》的评论并且分词

    最近网剧<白夜追凶>在很多朋友的推荐下,开启了追剧模式,自从琅琊榜过后没有看过国产剧了,此剧确实是良心剧呀!一直追下去,十一最后两天闲来无事就抓取豆瓣的评论看一下 相关代码提交到githu ...

  7. socket listen/accept

    listen函数 摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定 ...

  8. :eq()中的参数详解——需要注意

    :eq()的括号中的参数如果是非负数则在DOM对象中按从上到下的顺序查找指定的元素,但是,如果是是负数,则在DOM中从下向上查找指定元素. 如下实例: 如果 $("#divTag div:e ...

  9. javascript数组遍历for与for in区别详解

    js中遍历数组的有两种方式 复制代码代码如下: var array=['a']//标准的for循环for(var i=1;i<array.length;i++){    alert(array[ ...

  10. view {display:block}

    view {display:block}