使用js的document.execCommand(“Copy“) 方法实现点击复制功能

本文介绍了如何利用JavaScript的document.execCommand('Copy')方法来实现点击复制功能。针对在实现过程中遇到的问题,如input框的disabled、width/height为0、hidden属性等限制,提出了通过创建一个opacity为0且position为absolute的隐藏input框来解决,从而成功实现点击复制文本的功能。

使用js的document.execCommand("Copy")方法实现点击复制功能

点击复制

在这里插入图片描述
html代码

<input type="text" class="form-control" id="video_url" name="video_url"                                 value="Product_video/20200212HH352120200212HH3521.mp4"                                       onclick="copyUrl('oss_video_url')"   readonly/>
<input type="hidden" id="oss_video_url" name="oss_video_url"                           value="https://www.qipa250.com/Product_video/20200212HH352120200212HH3521.mp4"/>                            

js代码

   function copyUrl(id) {
        var url = document.getElementById(id);
        //如果有值才复制
        if (url.value) {
            url.select(); // 选择对象
            document.execCommand("Copy"); // 执行浏览器复制命令
            alert("已复制好,可贴粘!");
        }
    }

点击文本框复制,提示 已复制好,可贴粘 发现根本没有任何链接

不能实现的原因:

input框不能有disabled属性
根据第一条扩展,input的width || height 不能为0;
input框不能有hidden属性

解决方案

因为业务逻辑上input框确实不能编辑和显示,使用另一个input框展示相同的数据,然后设置opacity=0;这样就不可见了,
但是新增的input还是占有空间,所以再来个粗暴的样式 position: absolute;这样就脱离了文档流;

js代码不变,修改html如下:

<input type="text" style="opacity: 0;position: absolute;" id="oss_video_url" name="oss_video_url"                                              value="https://www.qipa250.com/Product_video/20200212HH352120200212HH3521.mp4"/>

就可以实现点击文本框复制链接地址了,快去试试吧

### 如何在使用 `document.execCommand('copy')` 时获取被复制的文本内容 在使用 `document.execCommand('copy')` 实现复制功能时,**无法直接通过该 API 获取当前复制的文本内容**。这是因为 `document.execCommand('copy')` 是一个操作指令,并不提供返回值来表示剪贴板中的内容。然而,可以通过以下方式间接获取或控制被复制的内容。 #### 1.复制前明确指定目标文本 通常,在调用 `document.execCommand('copy')` 前会先创建一个临时的 `<textarea>` 或 `<input>` 元素,并将需要复制的文本写入其中。此时,可以直接访问该元素的 `value` 属性以获取即将复制的内容。 ```javascript function copyAndGetText(text) { const input = document.createElement('textarea'); document.body.appendChild(input); input.value = text; input.select(); document.execCommand('copy'); document.body.removeChild(input); // 此时可通过 input.value 获取被复制的文本 console.log('被复制的内容为:', input.value); } ``` 这种方式适用于大多数兼容性场景,且能确保对复制内容的精确控制[^3]。 #### 2. 使用 Selection API 检测当前选中文本 如果复制的是页面中已有的 DOM 内容(如一段文字),则可以利用 `window.getSelection()` 获取当前选中的文本内容。 ```javascript function getSelectedTextAndCopy() { const selection = window.getSelection(); if (selection.rangeCount > 0) { const selectedText = selection.toString(); console.log('被复制的内容为:', selectedText); document.execCommand('copy'); } } ``` 此方法适用于用户手动选择文本后触发复制的情况,例如“长按复制”等交互逻辑[^1]。 #### 3. 结合隐藏输入框与 `input.select()` 获取内容 在部分移动端浏览器(如 iOS)上,由于安全策略限制,需结合 `input.select()` 和 `setSelectionRange` 来正确触发复制行为,并在此过程中访问 `input.value` 获取内容。 ```javascript function iosFriendlyCopy(text) { const input = document.createElement('input'); document.body.appendChild(input); input.value = text; input.select(); input.setSelectionRange(0, input.value.length); // 适配 iOS document.execCommand('copy'); document.body.removeChild(input); console.log('被复制的内容为:', input.value); } ``` 这种方式在处理跨平台兼容性问题时非常有效,尤其适合在不同设备上保持一致的复制行为[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值