JavaScript 实现复制到剪贴板的总结

在官网看到以下代码,原生JS把input输入的内容复制到剪贴板

<p>点击复制后在右边textarea CTRL+V看一下</p>
<input type="text" id="inputText" value="测试文本"/>
<input type="button" id="btn" value="复制"/>
<textarea rows="4"></textarea>
<script type="text/javascript">
    var btn = document.getElementById('btn');
    btn.addEventListener('click', function(){
        var inputText = document.getElementById('inputText');
        var currentFocus = document.activeElement;
        inputText.focus();
        inputText.setSelectionRange(0, inputText.value.length);
        document.execCommand('copy', true);
        currentFocus.focus();
    });
</script>

 总结一下

1. createTextRange() 方法

很遗憾,只有IE支持这个方法。

2.  createRange()  似乎都不支持,是XML DOM的Range对象的方法

3. setSelectionRange() 方法 

  • 只受用于一些含有value属性的HTML控件,例如单行文本框、多行文本域;
  • 后面两个参数表示起始字符位置与结束的字符位置,如果位置值为空,或是非数值,则会(从头或至尾或全部)选择字符;
  • 支持负值,负值表意与js中的slice属性一致,负值表示的含义就是负值与字符总长度的和,也可以理解为从末尾开始选择;
  • 如果数值范围超过字符总长,则无内容选择;
  • 支持单参数,省略第三个参数表示一致到字符结束都要选中。

4. select()  同样只适用于 input 或者 textarea 文本框

5. textContent 属性 

属性设置或返回指定节点的文本内容,以及它的所有后代。

如果您设置了 textContent 属性,会删除所有子节点,并被替换为包含指定字符串的一个单独的文本节点。

提示:有时,此属性可用于取代 nodeValue 属性,但是请记住此属性同时会返回所有子节点的文本。

6. text()方法。设置或返回被选元素的文本内容。可选参数可以是文本,也可以是函数,使用函数设置所有被选元素的文本内容。

7. document.execCommand() 方法允许运行命令来操纵可编辑区域的内容。又是可编辑区域...

8. document.activeElement 属性返回文档中当前获得焦点的元素。这个属性是只读的。document.activeElement.tagName 获得焦点的元素的标签名。官网的这行代码,阻止了焦点元素被选中的默认行为?

9. window.clipboardData: 只有IE支持这个属性。

10. Node.innerText/ innerHtml/ textContent

innerHtml 获取节点下包含的内容,包括节点下的子节点html标签。

innerText 则不包含节点下html标签。

textContent 属性表示一个节点及其后代的文本内容。

  • textContent 会获取所有元素的内容,包括 <script> 和 <style> 元素,然而 innerText 不会。
  • innerText意识到样式,并且不会返回隐藏元素的文本,而textContent会。
  • 由于 innerText 受 CSS 样式的影响,它会触发重排(reflow),但textContent 不会。
  • 与 textContent 不同的是, 在 Internet Explorer (对于小于等于 IE11 的版本) 中对 innerText 进行修改, 不仅会移除当前元素的子节点,而且还会永久性地破坏所有后代文本节点(所以不可能再次将节点再次插入到任何其他元素或同一元素中)。
  • textContent通常具有更好的性能,因为文本不会被解析为HTML。此外,使用textContent可以防止  XSS 攻击。

 jQuery ZeroClipboard实现复制到剪贴板功能

需引用两个文件:

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.zclip.js"></script>

需要搭建服务器环境,并且这个要求支持Flash. 出于安全方面的考虑,Flash即将在2020年停止开发和运行。

另外一个插件:clipboard.js

提供selection和execCommand这两个接口。

Github:
https://github.com/zenorocha/clipboard.js

感兴趣可以搜一下,这个插件用法很简单,但是execCommand这个API,实际上还是只能复制可编辑区域的内容

posted @ 2017-07-31 09:45  kiera  阅读(9375)  评论(0编辑  收藏  举报