成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

clipboard.js代碼分析(1)-select

li21 / 851人閱讀

摘要:下面對它的實(shí)現(xiàn)一一分析??梢允褂毛@取選中的內(nèi)容也可以使用獲取一個(gè)用戶選擇的范圍。在這里完成了對用戶選中內(nèi)容的一些操作,而且在不是表單無法觸發(fā)事件的時(shí)候,也可以在指定區(qū)域監(jiān)聽事件來實(shí)時(shí)獲取選中的內(nèi)容完成復(fù)制等功能。

項(xiàng)目中用到了選中復(fù)制功能

就是點(diǎn)擊按鈕,復(fù)制左側(cè)的內(nèi)容到剪切板,原來一直用的方法是創(chuàng)建一個(gè)隱藏的textarea,把內(nèi)容填進(jìn)去,每次都執(zhí)行select方法,在使用document.execCommand("copy")方法,這次嘗試了一下clipboard.js這個(gè)庫感覺還是非常的好用,
還是本著弄懂原理的原則,就讀了一下它的實(shí)現(xiàn)代碼,做一下梳理,首先對它引入的select進(jìn)行了一番分析,這個(gè)select是一系列的選中方法,主要針對表單元素和非表單元素進(jìn)行了不同的處理。下面對它的實(shí)現(xiàn)一一分析。
每一種情況都寫了一個(gè)實(shí)例,放到了文章最后。

如果是 select

這里的select是表單元素下拉框
直接對元素進(jìn)行focus就可以將其設(shè)置為選中狀態(tài)

inputDom.focus()
如果是 input 或者 textarea

那么只需要執(zhí)行select 或者 setSelectionRange即可
直接調(diào)用select方法是選中所有文本,如果想要知道用戶選中的文本的內(nèi)容可以使用dom對象的select事件且配合selectionStart, selectionEnd獲取用戶選擇的部分內(nèi)容

inputDom.value.substring(inputDom.selectionStart,inputDom.selectionEnd);
inputDom.addEventListener("select", function() {
    inputDom.value.substring(inputDom.selectionStart,inputDom.selectionEnd);
})

配合復(fù)制的功能,就可以實(shí)現(xiàn)選中即復(fù)制的效果了,復(fù)制的功能后面文章會說。
也可以直接選擇部分文本,這就要使用setSelectionRange方法,這個(gè)方法可以接收起始位置,終止位置,和方向
要看到選擇的文本, 必須在調(diào)用 setSelectionRange()之前或之后立即將焦點(diǎn)設(shè)置到文本框

inputDom.focus();
inputDom.setSelectionRange(2,5); // 選擇特定部分
inputDom.setSelectionRange(0, -1); // 全選 
inputDom.setSelectionRange(0, input.value.length); // 全選

為了在直接選中的時(shí)候文本不是在可編輯狀態(tài),可以增加保護(hù),在執(zhí)行select或者setSelectionRange的時(shí)候,使得文本處于只讀狀態(tài)

var isReadOnly = element.hasAttribute("readonly");
if (!isReadOnly) {
  element.setAttribute("readonly", "");
}
element.select();
element.setSelectionRange(0, element.value.length);
element.removeAttribute("readonly");
其他DOM元素

如果不是表單元素,就需要使用getSelection 和 createRange方法了
getSelection 返回一個(gè) Selection 對象,表示用戶選擇的文本范圍或光標(biāo)的當(dāng)前位置。
可以使用document.getSelection().toString()獲取選中的內(nèi)容,也可以使用document.getSelection().getRangeAt()獲取一個(gè)用戶選擇的范圍。當(dāng)然還有很多API,可以參考MDN鏈接。在這里完成了對用戶選中內(nèi)容的一些操作,而且在不是表單無法觸發(fā)select事件的時(shí)候,也可以在指定區(qū)域監(jiān)聽keyup事件來實(shí)時(shí)獲取選中的內(nèi)容完成復(fù)制等功能。
但是還不能處理瀏覽器主動選中,有的時(shí)候,我們需要點(diǎn)擊按鈕去復(fù)制指定區(qū)域或者元素的內(nèi)容,就是本文剛開始說的情況,這就需要createRange方法了,createRange返回一個(gè)Range對象,Range表示包含節(jié)點(diǎn)和部分文本節(jié)點(diǎn)的文檔片段。在這里常用的是對DOM的文本進(jìn)行一個(gè)Range片段的設(shè)置,可以使用Range.selectNodeContents()方法,最后使用Selection提供的addRange方法將創(chuàng)建的Range添加進(jìn)去,為了保證選擇的區(qū)域唯一,可以使用selection.removeAllRanges()

 var selection = window.getSelection();
 var range = document.createRange();
 range.selectNodeContents(element);
 selection.removeAllRanges();
 selection.addRange(range);
 selectedText = selection.toString();
簡單復(fù)制

最后只需要執(zhí)行document.execCommand("copy")就可以復(fù)制內(nèi)容了,當(dāng)然clipboard.js封裝了很多有用的方法,后續(xù)會接著分析。
所有的演示案例在這里
實(shí)例

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89976.html

相關(guān)文章

  • clipboard.js代碼分析(2)-emitter

    摘要:用于在同一主模塊下的不同子模塊以及不同主模塊之間的通信,支持動態(tài)綁定作用域。如果用過的父子組件事件通信以及,對事件管理器應(yīng)該不會陌生的。而且支持指定作用域,可以遠(yuǎn)程調(diào)用任意模塊的函數(shù)。 上一篇文章介紹了clipboard.js這個(gè)工具庫中的第一個(gè)依賴select這個(gè)工具庫主要完成了對任意DOM元素的復(fù)制到粘貼板的功能。這次介紹一下clipboard.js源碼中的第二個(gè)依賴的輕型工具庫t...

    MoAir 評論0 收藏0
  • JavaScript復(fù)制內(nèi)容到剪貼板

    摘要:原文鏈接最近一個(gè)活動頁面中有一個(gè)小需求,用戶點(diǎn)擊或者長按就可以復(fù)制內(nèi)容到剪貼板,記錄一下實(shí)現(xiàn)過程和遇到的坑。完整代碼如下復(fù)制成功總結(jié)以上就是關(guān)于如何實(shí)現(xiàn)復(fù)制內(nèi)容到剪貼板,附上幾個(gè)鏈接兼容性 原文鏈接:https://github.com/axuebin/ar... 最近一個(gè)活動頁面中有一個(gè)小需求,用戶點(diǎn)擊或者長按就可以復(fù)制內(nèi)容到剪貼板,記錄一下實(shí)現(xiàn)過程和遇到的坑。 常見方法 查了一下...

    ideaa 評論0 收藏0
  • 移動端復(fù)制文本到粘貼板,clipboard.js的使用,移動端與PC端復(fù)制粘貼兼容寫法

    摘要:首先引用文本文檔要用復(fù)制按鈕要用去掉文字檢查,不可編輯,插件自帶的屬性樣式代碼至此,兼容移動端和端的復(fù)制粘貼功能完美實(shí)現(xiàn),感謝作者作者來源原文版權(quán)聲明本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接 1.首先引用clipboard.js 2.html 文本文檔要用textarea,復(fù)制按鈕要用button 9999999 spellcheck=false去掉文字檢查,readonly不可編輯...

    legendmohe 評論0 收藏0
  • 移動端復(fù)制文本到粘貼板,clipboard.js的使用,移動端與PC端復(fù)制粘貼兼容寫法

    摘要:首先引用文本文檔要用復(fù)制按鈕要用去掉文字檢查,不可編輯,插件自帶的屬性樣式代碼至此,兼容移動端和端的復(fù)制粘貼功能完美實(shí)現(xiàn),感謝作者作者來源原文版權(quán)聲明本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接 1.首先引用clipboard.js 2.html 文本文檔要用textarea,復(fù)制按鈕要用button 9999999 spellcheck=false去掉文字檢查,readonly不可編輯...

    Caicloud 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<