本文目录一览:
- 1、JS原生 复制粘贴
- 2、js复制数组
- 3、JS中实现深度拷贝,复制一个对象
- 4、如何利用JS实现复制/粘贴功能
- 5、js 复制文字功能
JS原生 复制粘贴
本篇文章不考虑浏览器兼容,谷歌浏览器亲测至少得88版本往上。Mac系统复制粘贴html数据,会自动加一些标签,小伙伴们自己测吧。一般需求用不着。
想要实现复制粘贴就只需要搞明白两件事就可以了。
第一就是如何往粘贴板里边存放数据,第二就是如何读取粘贴板里边的数据。
所操作的数据大致可以分为三类数据 1:字符串 2:带样式的HTML 3:图片 还有其他数据格式,还请各位小伙伴补充指教吧。
① 如果只是放普通字符串是最简单的
② 想要放入带格式的数据,比如想要往word内粘贴一个表格,跟正常写html标签加写样式是一样的
③往粘贴板内放入图片,目前只支持放png图片
其实也可以用放HTML的方式,把图片放入粘贴板内
js复制数组
一、 错误实现
var array1 = new Array("1","2","3");
var array2;
array2 = array1;
array1.length = 0;
alert(array2); //返回为空
这种做法是错的,因为javascript分原始类型与引用类型(与java、c#类似)。Array是引用类
型。array2得到的是引用,所以对array1的修改会影响到array2。
二、 使用slice()
可使用slice()进行复制,因为slice()返回也是数组。
var array1 = new Array("1","2","3");
var array2;
array2 = array1.slice(0);
array1.length = 0;
alert(array2); //返回1、2、3
三、 使用concat()
注意concat()返回的并不是调用函数的Array,而是一个新的Array,所以可以利用这一点进行复制。
var array1 = new Array("1","2","3");
var array2;
array2 = array1.concat();
array1.length = 0;
alert(array2); //返回1、2、3
JS中实现深度拷贝,复制一个对象
在JS中拷贝、复制一个对象的方式有多种,我常用的一般是 Object.assign({},sourceObj)。
Object.assign()因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。如果合并的对象是多层嵌套对象那就属于浅拷贝了,修改内层对象的值还是会影响原对象。
要想实现深度复制可以使用JSON方式。
写法如下:
它的原理是把JS对象转换为JSON字符串,再由JSON字符串转换为JS对象,这样新对象的指针就不会指向原对象的指针了。但这种也有副作用的,有一下几点副作用:
1、有属性包含时间对象,拷贝后就是字符串的形式。
2、有函数或undefined,拷贝后会丢失。
3、有RegExp和Error对象,拷贝后变为空对象。
4、存在循环引用的情况,没法正确拷贝。
5、内层对象是构造函数生成的,会丢失constructor。
6、属性值为NaN、Infinity,拷贝后变为null。
虽然有些副作用,但大多情况还是符合要求可以使用。
如何利用JS实现复制/粘贴功能
1、最基本的复制
Java代码
script language="JavaScript"
function readTxt()
{
alert(window.clipboardData.getData("text"));
}
function setTxt()
{
var t=document.getElementById("txt");
t.select();
window.clipboardData.setData('text',t.createTextRange().text);
}
/script
input name="txt" value="测试"
input type="button" value="复制" onclick="setTxt()"
input type="button" value="读取" onclick="readTxt()"
2、扩展复制:复制表格
Java代码
INPUT TYPE="button" value="选中测试表格" onclick="CopyTable()"
测试
TABLE border="1" id="oTable"
TR
TD测试表格/TD
TD测试表格/TD
/TR
TR
TD测试表格/TD
TD测试表格/TD
/TR
/TABLE文字
SCRIPT LANGUAGE="JavaScript"
!--
function CopyTable()
{
var txt = document.body.createTextRange();
txt.moveToElementText(document.getElementById('oTable'));
txt.select();
}
//--
/SCRIPT
、兼容IE,firefox等浏览器的复制
Java代码
script
function copyToClipboard(txt) {
if(window.clipboardData) {
window.clipboardData.clearData();
window.clipboardData.setData("Text", txt);
} else if(navigator.userAgent.indexOf("Opera") != -1) {
window.location = txt;
} else if (window.netscape) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将'signed.applets.codebase_principal_support'设置为'true'");
}
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
if (!clip)
return;
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
if (!trans)
return;
trans.addDataFlavor('text/unicode');
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
var copytext = txt;
str.data = copytext;
trans.setTransferData("text/unicode",str,copytext.length*2);
var clipid = Components.interfaces.nsIClipboard;
if (!clip)
return false;
clip.setData(trans,null,clipid.kGlobalClipboard);
}
}
/script
button onclick="copyToClipboard('你好!');"复制文本“你好!”/button
textarea id="test"/textarea
js 复制文字功能
功能 :点击按钮,复制值。
实现方法 :通过原生js 的方法 document.execCommand('copy')
巨坑 :document.execCommand(‘copy’)不生效
原因 :
1.input框不能有disabled属性
2.根据第一条扩展,input的width || height 不能为0;
3.input框不能有hidden、display:none属性
解决方案 :在不改变原需求的情况下,新增一个input框,然后设置 opacity:0; 实现不可见, position:absolute; 脱离文档流解决占空间的问题
语法:
document.execCommand(aCommandName,aShowDefaultUI,aValueArgument),返回值Boolean 如果返回false 则表示还不能支持;
参数说明:
1.aCommandName
命令的名称:常用的为"copy","cut"等;
注:“copy” 拷贝当前选中内容到剪贴板
“cut” 剪贴当前选中的文字并复制到剪贴板
2.aShowDefaultUI
是否展示用户界面,一般为 false;
3.aValueArgument
默认为null,
示例
!-- html --
!-- 点击复制输入框value值 --
input type="text" id="copyVal" value="被复制的内容" /
!-- 点击复制div标签的innerHTML --
div id="copyInner"被复制的内容/div
button onclick="myCopy"点击复制/button
// 方法一:点击按钮复制文本框内容
function myCopy(){
var copyVal = document.getElementById('copyVal');
copyVal.select();
document.execCommand('copy');
}
// 方法二:点击按钮复制div标签内容
function myCopy(){
const range = document.createRange();
range.selectNode(document.getElementById('copyInner'));
const selection = window.getSelection();
if(selection.rangeCount 0) selection.removeAllRanges();
selection.addRange(range);
document.execCommand('copy');
}