剪切板与复制粘贴

前言

        最近在实现从excel复制内容,并粘贴(只粘贴文本)到luckysheet的功能,本来不是很难的事,但因为项目用的http,导致不得不尝试了很多种办法,现将这些方法做一个记录。

1、clipboard(推荐)

优点:

  • 返回promise,是异步的,性能更好,不易卡顿。
  • 能使用任意数据,如文本、图片等

缺点:

  • 兼容性一般
  • 页面是http协议不可使用(但开发模式下可以用)

示例:

【clipboardData和clipboard是不一样的,clipboardData是copy/paste事件对象下的一个属性。】

 let clipboardData = window.clipboardData; //for IE
if (!clipboardData) { // for chrome
    clipboardData = navigator.clipboard;
}

//
  clipboardData.readText().then(res=>{
                if(res.includes('luckysheet_copy_action_table')){
                    let trArr = res.match(/(?<=(<tr[^>]*?>)).*?(?=(<\/tr>))/g)
                    let tdArr = trArr.map(str => {
                        return str.match(/(?<=(<td[^>]*?>)).*?(?=(<\/td>))/g)
                    })
                    selection.pasteText(tdArr);
                }else{
                    selection.pasteHandler(res);
                }
                Store.luckysheet_selection_range = [];
                $("#luckysheet-copy-content").empty();
    
})

文档:

Clipboard - Web API 接口参考 | MDN

剪贴板操作 Clipboard API 教程 - 阮一峰的网络日志

2、copy、paste事件

        监听元素的paste、copy事件即可操作剪切板。

优点:

  • 无网络协议限制。

缺点:

  • CTRL + V或者右键菜单中的“粘贴”才能触发paste。(dispatchEvent-ClipbordEvent能触发paste但是没数据)

示例:

//粘贴事件处理
$(document).on("paste", function (e) {
    let clipboardData = window.clipboardData; //for IE
    if (!clipboardData) { // for chrome
        clipboardData = e.originalEvent.clipboardData;
    }
    //res就是剪切板的内容
    let res = clipboardData.getData("text/html") || clipboardData.getData("text/plain");
})

文档:

onpaste 事件 | 菜鸟教程

3、document.execCommand

        document.execCommand('copy')等已经弃用,不推荐使用,并且大量数据会卡顿,更推荐使用clipboard。

http下清空剪切板

function copyEmptyStringToClipboard() {
    // 创建一个临时的textarea元素
    const tempTextArea = document.createElement('textarea');
    // 将其值设置为多个空格,不能设置为空字符串
    tempTextArea.value = '  ';
    // 将这个元素添加到文档中
    document.body.appendChild(tempTextArea);
    // 选中这个元素中的文本
    tempTextArea.select();
    // 执行复制操作
    document.execCommand('copy');
    // 移除这个临时元素
    document.body.removeChild(tempTextArea);
    
    console.log('剪切板现在是一个空字符串。');
  }

4、clipboard.js

        这是一个用于复制粘贴的库,暂时没用过。

https://www.npmjs.com/package/clipboard

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值