欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS實(shí)現(xiàn)一鍵復(fù)制

 更新時(shí)間:2022年07月01日 15:13:42   作者:莎莉哇  
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

原生js實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本,供大家參考,具體內(nèi)容如下

最近遇到一個(gè)需求,需要點(diǎn)擊按鈕,復(fù)制 聊天記錄的文本到剪切板

一、原理分析

瀏覽器提供了 copy 命令 ,可以復(fù)制選中的內(nèi)容

document.execCommand("copy")

如果是輸入框,可以通過 select() 方法,選中輸入框的文本,然后調(diào)用 copy 命令,將文本復(fù)制到剪切板

但是 select() 方法只對 和 有效,對于就不好使

最后我的解決方案是,在頁面中添加一個(gè) ,然后把它隱藏掉點(diǎn)擊按鈕的時(shí)候,先把 的 value 改為的 innerText,然后復(fù)制 中的內(nèi)容

二、代碼實(shí)現(xiàn)

<style type="text/css">
? ?.wrapper {position: relative;}
? ?#input {position: absolute;top: 0;left: 0;opacity: 0;z-index: -10;}
</style>

<div class="wrapper">
? ?<p id="text">我把你當(dāng)兄弟你卻想著復(fù)制我?</p>
? ?<textarea id="input">這是幕后黑手</textarea>
? ?<button onclick="copyText()">copy</button>
</div>
<script type="text/javascript">
? ? function copyText() {
? ? ? var text = document.getElementById("text").innerText;
? ? ? var input = document.getElementById("input");
? ? ? input.value = text; // 修改文本框的內(nèi)容
? ? ? input.select(); // 選中文本
? ? ? document.execCommand("copy"); // 執(zhí)行瀏覽器復(fù)制命令
? ? ? alert("復(fù)制成功");
? ? }
? ? //或者
? ? function copyText(value) {
? ? ? ? // 創(chuàng)建元素用于復(fù)制
? ? ? ? var aux = document.createElement("input");

? ? ? ? // 設(shè)置元素內(nèi)容
? ? ? ? aux.setAttribute("value", value);

? ? ? ? // 將元素插入頁面進(jìn)行調(diào)用
? ? ? ? document.body.appendChild(aux);

? ? ? ? // 復(fù)制內(nèi)容
? ? ? ? aux.select();

? ? ? ? // 將內(nèi)容復(fù)制到剪貼板
? ? ? ? document.execCommand("copy");

? ? ? ? // 刪除創(chuàng)建元素
? ? ? ? document.body.removeChild(aux);

? ? ? ? //提示
? ? ? ? alert("復(fù)制內(nèi)容成功:" + aux.value);
? ? }
? </script>

三、一鍵復(fù)制

分享一個(gè)自己工作中用到的一鍵復(fù)制方法

/**
?* 一鍵粘貼
?* @param ?{String} id [需要粘貼的內(nèi)容]
?* @param ?{String} attr [需要 copy 的屬性,默認(rèn)是 innerText,主要用途例如賦值 a 標(biāo)簽上的 href 鏈接]
?*
?* range + selection
?*
?* 1.創(chuàng)建一個(gè) range
?* 2.把內(nèi)容放入 range
?* 3.把 range 放入 selection
?*
?* 注意:參數(shù) attr 不能是自定義屬性
?* 注意:對于 user-select: none 的元素?zé)o效
?* 注意:當(dāng) id 為 false 且 attr 不會空,會直接復(fù)制 attr 的內(nèi)容
?*/
copy (id, attr) {
? ? let target = null;

? ? if (attr) {
? ? ? ? target = document.createElement('div');
? ? ? ? target.id = 'tempTarget';
? ? ? ? target.style.opacity = '0';
? ? ? ? if (id) {
? ? ? ? ? ? let curNode = document.querySelector('#' + id);
? ? ? ? ? ? target.innerText = curNode[attr];
? ? ? ? } else {
? ? ? ? ? ? target.innerText = attr;
? ? ? ? }
? ? ? ? document.body.appendChild(target);
? ? } else {
? ? ? ? target = document.querySelector('#' + id);
? ? }

? ? try {
? ? ? ? let range = document.createRange();
? ? ? ? range.selectNode(target);
? ? ? ? window.getSelection().removeAllRanges();
? ? ? ? window.getSelection().addRange(range);
? ? ? ? document.execCommand('copy');
? ? ? ? window.getSelection().removeAllRanges();
? ? ? ? console.log('復(fù)制成功')
? ? } catch (e) {
? ? ? ? console.log('復(fù)制失敗')
? ? }

? ? if (attr) {
? ? ? ? // remove temp target
? ? ? ? target.parentElement.removeChild(target);
? ? }
}

實(shí)現(xiàn)效果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關(guān)文章

  • js實(shí)現(xiàn)點(diǎn)擊上傳圖片并設(shè)為模糊背景

    js實(shí)現(xiàn)點(diǎn)擊上傳圖片并設(shè)為模糊背景

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)點(diǎn)擊上傳圖片并設(shè)為模糊背景,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • ES6中Class類的靜態(tài)方法實(shí)例小結(jié)

    ES6中Class類的靜態(tài)方法實(shí)例小結(jié)

    這篇文章主要介紹了ES6中Class類的靜態(tài)方法,結(jié)合實(shí)例形式簡單總結(jié)分析了ES6中class類中靜態(tài)方法的使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-10-10
  • js獲取指定的cookie的具體實(shí)現(xiàn)

    js獲取指定的cookie的具體實(shí)現(xiàn)

    使用js獲取cookie或許你會,但是要獲取指定cookie,你會嗎?下面有個(gè)不錯(cuò)的示例,大家可以參考下
    2014-02-02
  • 分享一個(gè)自己寫的簡單的javascript分頁組件

    分享一個(gè)自己寫的簡單的javascript分頁組件

    這篇文章主要分享一個(gè)自己寫的簡單的javascript分頁組件,效果十分不錯(cuò),代碼也很詳盡,這里推薦給小伙伴們。
    2015-02-02
  • 最新評論