JS實(shí)現(xiàn)內(nèi)容復(fù)制功能

復(fù)制是一個(gè)使用頻率特別高的操作,在網(wǎng)頁中,一般可以選中要復(fù)制的內(nèi)容,使用快捷鍵ctrl+c 將內(nèi)容復(fù)制到剪貼板。除了使用系統(tǒng)提供的快捷方式復(fù)制網(wǎng)頁內(nèi)容,我們還可以用JS實(shí)現(xiàn)復(fù)制,這得益于document的execCommand('copy') 命令。

實(shí)現(xiàn)整個(gè)復(fù)制功能,需要以下三個(gè)步驟:

  1. 返回需要復(fù)制的內(nèi)容:這個(gè)比較簡單,返回HTML元素的innerText屬性值就可以。

  2. 選中需要復(fù)制的內(nèi)容:選中的操作可以通過表單元素的select() 方法實(shí)現(xiàn)。

  3. 復(fù)制選中的內(nèi)容:使用document.execCommand('copy') 方法實(shí)現(xiàn)復(fù)制。

innerText返回內(nèi)容

大部分HTML元素都有innerText和innerHTML兩個(gè)屬性,innerText屬性返回文本內(nèi)容,innerHTML屬性返回標(biāo)簽元素。我們可以創(chuàng)建一個(gè)函數(shù),用于獲取需要返回的內(nèi)容:

/**
 * 返回當(dāng)前元素的文本內(nèi)容
 * @parm {DOM} element 當(dāng)前DOM元素
 */
function selectText(element){
    return element.innerText;
}

上面的selectText函數(shù)接收一個(gè)DOM元素,返回DOM元素的innerText屬性值。

表單元素select方法選中內(nèi)容

我們可以通過表單元素的select()方法選中內(nèi)容,表單元素因?yàn)閠extarea限制少于input,所以推薦使用textarea。我們可以動態(tài)創(chuàng)建一個(gè)textarea元素,將textarea的value屬性值設(shè)置為上面的innerText屬性值,再執(zhí)行textarea的select方法選中。

var textareaC = document.createElement('textarea');
textareaC.setAttribute('readonly', 'readonly'); //設(shè)置只讀屬性防止手機(jī)上彈出軟鍵盤
textareaC.value = selectText(element); //上面selectText函數(shù)返回值賦給textarea的value
document.body.appendChild(textareaC); //將textarea添加為body子元素
textareaC.select();

上面實(shí)現(xiàn)了選中,下面就可以實(shí)現(xiàn)復(fù)制功能了。

execCommand('copy')實(shí)現(xiàn)復(fù)制

最后一步就可以用execCommand('copy')實(shí)現(xiàn)復(fù)制了,它可以復(fù)制瀏覽器中選中的文本,比如說上面被textarea選中的文本,復(fù)制之后記得移除textarea。

var res = document.execCommand('copy');
document.body.removeChild(textareaC);//移除DOM元素
console.log("復(fù)制成功");
console.log(res);//res為復(fù)制結(jié)果,是一個(gè)布爾值

第二步和第三步可以優(yōu)化一下,創(chuàng)建一個(gè)copy函數(shù),函數(shù)參數(shù)設(shè)置為第一步需要復(fù)制的文本,返回值為復(fù)制的結(jié)果。

完整JS示例如下:

/**
 * 返回當(dāng)前元素的文本內(nèi)容
 * @parm {DOM} element 當(dāng)前DOM元素
 */
function selectText(element){
    return element.innerText;
}
/**
 * @param {String} text 需要復(fù)制的內(nèi)容
 * @return {Boolean} 復(fù)制成功:true或者復(fù)制失敗:false  執(zhí)行完函數(shù)后,按ctrl + v試試
*/
function copyText(text){
    var textareaC = document.createElement('textarea');
    textareaC.setAttribute('readonly', 'readonly'); //設(shè)置只讀屬性防止手機(jī)上彈出軟鍵盤
    textareaC.value = text;
    document.body.appendChild(textareaC); //將textarea添加為body子元素
    textareaC.select();
    var res = document.execCommand('copy');
    document.body.removeChild(textareaC);//移除DOM元素
    console.log("復(fù)制成功");
    return res;
}

如何使用

可以將上面的完整JS示例寫入一個(gè)JS文件,將JS文件引入HTML中,通過JS點(diǎn)擊事件來執(zhí)行復(fù)制函數(shù)。

<!DOCTYPE html>
<html lang="zh">
<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>JS復(fù)制內(nèi)容-demo</title>
 <style>
 h3{
   text-align: center;
 }
 </style>
</head>
<body>
 <h3 onclick="myFun(this)">點(diǎn)我選擇復(fù)制我的內(nèi)容1111</h3>
 <h3 onclick="myFun(this)">點(diǎn)我選擇復(fù)制我的內(nèi)容2222</h3>
 <script src="copy.js"></script><!--引入JS文件-->
 <script>
 function myFun(e) {
    copyText(selectText(e));
 }
 </script>
</body>
</html>

效果圖:

JS實(shí)現(xiàn)內(nèi)容復(fù)制
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容