当通过element.select()选择文本时,document.getSelection()。toString()返回空字符串

时间:2017-01-17 12:14:17

标签: javascript jquery

我正在尝试实现以下两个功能:

  1. 用户可以通过点击按钮在textarea中复制内容。
  2. 我可以通过收听copy事件来了解用户复制的内容(用户是否使用按钮,Ctrl-C或上下文菜单进行复制)。
  3. 这是我的代码(您也可以在https://jsfiddle.net/hjtswedm/3/中看到它):

    <html>
    
    <head>
    </head>
    <script src='https://code.jquery.com/jquery-2.2.4.min.js'></script>
    <script>
        $(window).bind("copy", function (e) {
            alert(document.getSelection().toString());
        });
    
        var copyText = function () {
            var txt = document.createElement("textarea");
            txt.textContent = $('#data').val();
            txt.style.position = "fixed";
            document.body.appendChild(txt);
            txt.select();
            try {
                return document.execCommand("copy");
            } catch (ex) {
                return false;
            } finally {
                document.body.removeChild(txt);
            }
        }
    </script>
    
    <body>
        Lorem Ipsum
        <textarea id="data">test copy</textarea>
        <button onclick="copyText()">
        Copy Text
        </button>
    </body>
    
    </html>
    

    此代码适用于Chrome。但是,对于Firefox,Internet Explorer和Edge,当我单击复制按钮时,document.getSelection().toString()始终返回空字符串。这是设计,还是我错过了什么?

    提前致谢。

1 个答案:

答案 0 :(得分:1)

Working fiddle

尝试:

 try {
    var range = document.createRange();
    range.selectNodeContents(txt);
    window.getSelection().addRange(range);
    return document.execCommand("copy");
  }