91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

原生 js 實現點擊按鈕復制文本

發布時間:2020-04-24 17:15:20 來源:網絡 閱讀:7404 作者:wx5d40f0a9291c2 欄目:web開發

最近遇到一個需求,需要點擊按鈕,復制 <span> 標簽中的文本到剪切板

之前做過復制輸入框的內容,原以為差不多,結果發現根本行不通

嘗試了各種辦法,最后使了個障眼法,實現了下面的效果

原生 js 實現點擊按鈕復制文本

一、原理分析

瀏覽器提供了 copy 命令 ,可以復制選中的內容

document.execCommand("copy")
如果是輸入框,可以通過 select() 方法,選中輸入框的文本,然后調用 copy 命令,將文本復制到剪切板

但是 select() 方法只對 <input> 和 <textarea> 有效,對于 <p> 就不好使

最后我的解決方案是,在頁面中添加一個 <textarea>,然后把它隱藏掉

點擊按鈕的時候,先把 <textarea> 的 value 改為 <p> 的 innerText,然后復制 <textarea> 中的內容

二、代碼實現

HTML 部分

復制代碼
<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">我把你當兄弟你卻想著復制我?</p>
<textarea id="input">這是幕后黑手</textarea>
<button onclick="copyText()">copy</button>
</div>
復制代碼

JS 部分

復制代碼
<script type="text/javascript">
function copyText() {
var text = document.getElementById("text").innerText;
var input = document.getElementById("input");
input.value = text; // 修改文本框的內容
input.select(); // 選中文本
document.execCommand("copy"); // 執行瀏覽器復制命令
alert("復制成功");
}
</script>
復制代碼

親測,Firefox 48.0,Chrome 60.0,IE 8 都能用

三、一鍵復制

分享一個自己工作中用到的一鍵復制方法

復制代碼
/**

  • 一鍵粘貼
  • @param {String} id [需要粘貼的內容]
  • @param {String} attr [需要 copy 的屬性,默認是 innerText,主要用途例如賦值 a 標簽上的 href 鏈接]
  • range + selection
  • 1.創建一個 range
  • 2.把內容放入 range
  • 3.把 range 放入 selection
  • 注意:參數 attr 不能是自定義屬性
  • 注意:對于 user-select: none 的元素無效
  • 注意:當 id 為 false 且 attr 不會空,會直接復制 attr 的內容
    */
    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('復制成功')
    } catch (e) {
    console.log('復制失敗')
    }

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铁岭县| 东光县| 青河县| 革吉县| 徐水县| 大厂| 石家庄市| 类乌齐县| 潮州市| 西华县| 乌拉特前旗| 翁牛特旗| 金门县| 灯塔市| 澄城县| 乐陵市| 永济市| 成都市| 沙河市| 沙洋县| 白河县| 江孜县| 建平县| 开封县| 宽城| 马公市| 如皋市| 电白县| 仪陇县| 马山县| 麻城市| 平湖市| 南丰县| 临澧县| 黑河市| 巴马| 灵台县| 嘉峪关市| 慈利县| 太仆寺旗| 汉阴县|