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

众所周知使用 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. 【藏】使用Entity Framework时要注意的一些性能问题

    这篇文章写的很好: http://diaosbook.com/Post/2012/12/9/performance-issue-in-select-one-or-few-colums-via-enti ...

  2. Java基础03 构造器与方法重载(转载)

    显式初始化要求我们在写程序时就确定初始值,这有时很不方便.我们可以使用构造器(constructor)来初始化对象.构造器可以初始化数据成员,还可以规定特定的操作.这些操作会在创建对象时自动执行. 定 ...

  3. Hibernate无主键配置文件编写

    1.       环境:jdk1.4+hibernate2.0+weblogic8 一般情况下,我们建的表都会有主键,然后根据hibernate的配置文件编写条件 有一个主键key,剩下的是Prope ...

  4. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

  5. 一个智障安装了一天的python和graphlab的血泪史

    大概的过程是这样的: 先装了python3.6.1.,然后发现搞错了Σ(  ̄□ ̄||),是32 bit的,卸了重装python 3.6.1 (64bit). 然后装easy_install.pip.i ...

  6. lumen 事件

    今天需要实现日志功能,所有使用了一下lumen的event(事件)和listener(监听) Lumen事件:https://lumen.laravel-china.org/docs/5.3/even ...

  7. [Unity基础]移动平台下的文件读写

    From:http://blog.csdn.net/lyh916/article/details/52161633 参考链接: http://www.cnblogs.com/murongxiaopif ...

  8. idea 全部报错找不到包

    解决报错方法如下:

  9. TP【连接数据库配置及Model数据模型层】

    [连接数据库配置及Model数据模型层] convertion.php config.php 在config.php做数据库连接配置 制作model模型 a) model本身就是一个类文件 b) 数据 ...

  10. 《从零开始学Swift》学习笔记(Day 46)——下标重写

    原创文章,欢迎转载.转载请注明:关东升的博客 下标是一种特殊属性.子类属性重写是重写属性的getter和setter访问器,对下标的重写也是重写下标的getter和setter访问器. 下面看一个示例 ...