代码之家  ›  专栏  ›  技术社区  ›  Simofy

选定文本上的JavaScript粘贴事件

  •  0
  • Simofy  · 技术社区  · 6 年前

    问题:

    我想通过粘贴设置传入文本的格式,但我所采用的方法只允许替换现有文本或添加到其中,因此 选定文本已插入

    那么如何在粘贴事件中获取选定的文本。

    我不喜欢跨浏览器支持。


    它应该是什么样子:

    • 文本区域内的文本:aa 1 2 56 99 <-所选文本
    • 剪贴板中的文本:56abccda6
    • 文本输出:aa 15 6a bc cda6

    JavaScript/jquery

    $(document).ready(function(){
        function isHex(h) {
            let a = parseInt(h,16);
            return (a.toString(16) ===h.toLowerCase())
        }
        function formatText(text) {
            if(isHex(text)){
                let splitedText = text.match(/[\s\S]{1,2}/g) || [];
                splitedText = splitedText.join(' ');
                return splitedText;
            }
            return text;
        }
        $('textarea[name=plainText]').on('paste', function(event) {
            let formatedText = formatText(event.originalEvent.clipboardData.getData('text'));
            $(this).val($(this).val() + formatedText);
            //or
            //  $(this).val(formatedText);
            return false;
          });
      });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <textarea placeholder="Message" name="plainText" id="plainText" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Message'"></textarea>
    1 回复  |  直到 6 年前
        1
  •  0
  •   Simofy    6 年前

    http://code.google.com/p/rangyinputs

    $(document).ready(function(){
            $('textarea[name=plainText]').on('paste', function(event) {
                let formatedText = 
            formatText(event.originalEvent.clipboardData.getData('text'));
            $("#plainText").replaceSelectedText(formatedText);
                return false;
            })
    });