JS 操作複製剪下粘貼

來源:互聯網
上載者:User

標籤:data   ...   query   簡單   代碼   .com   getattr   bsp   nbsp   

測試了很多次之後,雖然有點細碎的突破,但還是想說,麻辣隔壁...

 

眾所周知使用 oncut/oncopy/onpaste 監聽剪下板,採用 window.clipboardData 並不是適用於大多瀏覽器,

某天突然發現事件對象 e 中有個 clipboardData 屬性,也就是 e.originalEvent.clipboardData,於是才有了今天的嘗試,

然而,依舊問題重重呀...先看一段不太舒服的代碼。

$(‘.copy‘).on(‘beforecopy beforecut beforepaste copy cut paste‘, function(e){    var clipboardData  = window.clipboardData || e.originalEvent.clipboardData;    switch (e.type) {        case ‘copy‘:            clipboardData.setData(‘text‘, ‘複製我幹啥‘);            console.log(clipboardData.getData(‘text‘));            console.log(‘複製:‘+clipboardData.getData(‘text‘));            break;        case ‘beforecopy‘:            clipboardData.setData(‘text‘, ‘改個資料試試‘);            console.log(‘我就是在複製的前面,雖然並沒有卵用‘);            break;        case ‘cut‘:            clipboardData.setData(‘text‘, ‘剪下我幹啥‘);            console.log(‘剪下:‘+clipboardData.getData(‘text‘));            break;        case ‘paste‘:            clipboardData.setData(‘text‘, ‘粘貼我複製還有用嗎‘);            console.log(‘粘貼:‘+clipboardData.getData(‘text‘));            break;    }});

顯然這個操作很不友好,跟玩兒似的,

copy 或 beforecopy 時 setData 了新的內容,對 paste 並不會產生任何影響,

能夠在粘貼時對複製的文本進行一定的操作,但顯然也只是能在本網頁而已,

再者,copy 和 cut 時 getData 是為空白的,Firefox不支援 beforecopy 方法等...好吧,這特麼太雞肋了。

 

而對於當年流行的 zeroclipboard.swf 到了今日卻不得不放棄了,畢竟屏蔽 flash 小程式的瀏覽器越來越多。

再後來我就找到了 clipboard.js 這個外掛程式,雖然只有點擊才會生效,但我已然是知足的了。

<div class="box">    <textarea id="bar">複製點啥好呢</textarea>    <button class="btn" data-clipboard-action="copy" data-clipboard-target="#bar">Copy</button></div><div class="box">    <button class="btn2" data-clipboard-text="你猜我複製了什麼">Copy</button></div>
<script src="http://cdn.bootcss.com/clipboard.js/1.5.12/clipboard.min.js"></script><script>var x = new Clipboard(‘.btn‘, {  text: function(trigger) {    return document.querySelector(trigger.getAttribute(‘data-clipboard-target‘)).value + ‘\n\n\n複製來源於部落格園‘;  }});x.on(‘success‘, function(e){    // e 擁有三個屬性,     // action: 類型(‘copy‘|‘cut‘)     // text: 值(‘cut‘時有點小問題)     // trigger: dom元素    console.log(e);});x.on(‘error‘, function(e){    console.log(e);});var xx = new Clipboard(‘.btn2‘);</script>

應該還是很好理解的吧,不然那還是看官網吧。

 

原理好像很簡單的樣子,主要靠 getSelection 和 createRange 這類東西,

以後再開一章研究下這種複製粘貼的事件啟動問題,以及粘貼時自訂化,blabla...

JS 操作複製剪下粘貼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.