http://classjs.com/2013/03/05/js%E8%8E%B7%E5%8F%96%E7%B2%98%E8%B4%B4%E5%86%85%E5%AE%B9/

思路:在编辑环境中,粘贴时先记录光标在编辑器中的位置,再创建一个空的div,并且设置为可编辑的(contenteditable=”true”),让光标聚焦其中,聚焦的技巧是div.focus(),此时光标粘贴操作是在刚才新创建的那个div里,那内容自然也就在该div里,利用setTimeout取到div的内容,最后重新定位光标到粘贴前位置并插入内容。

哈哈,这种思路挺讨巧的,不过其中的技巧并不是那么容易发现的。比如div.focus和setTimeout的技巧,但是我试了下,在iframe模式下是无效的,被卡在了focus那一步,因为iframe下的body是一个contenteditable=”true”环境,即focus状态,它的子元素也是处于这样一种状态,所以没法再次focus();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
onBeforePaste: function(target, e)
    {
        // ie浏览器下,如果选中了文字,则不执行粘贴前处理;保证鼠标右键的正确行为。
        if (__BROWSER.msie)
        {
            var range = document.selection.createRange();
            if (range.text.length >0)
            {
                return true;
            }
        }
         
        var self = this;
         
        // 记住容器滚动条位置
        target.style.position = "static";
        this.saveScrollTop();
         
        // 光标占位
        var caretHolder = __addCaretHolder(target);
        var tmpDiv = document.createElement("div");
        tmpDiv.contentEditable = true;
        tmpDiv.style.position = "absolute";
        tmpDiv.style.top = caretHolder.offsetTop + "px";
        tmpDiv.style.left = caretHolder.offsetLeft + "px";
        tmpDiv.style.width = "1px";
        tmpDiv.style.height = "1px";
        tmpDiv.style.overflow = "hidden";
        this.container.appendChild(tmpDiv);
        tmpDiv.focus();
        // 执行粘贴操作
        __setTimeoutEx(0, function(){
            var txt = tmpDiv.innerHTML;
           
            caretHolder.innerHTML = txt;
            __setCaret(caretHolder, -1);
            __removeCaretHolder();
            if (tmpDiv.parentNode)
            {
                tmpDiv.parentNode.removeChild(tmpDiv);
            }
             
            // 粘贴时容器的滚动条会自动滚动,此处需要复原
            target.style.position = "relative";
            self.restoreScrollTop();   
        });
         
        return true;
    },

JS获取粘贴内容的更多相关文章

  1. JS获取标签内容的方法

    JS获取标签内容的方法 测试代码 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  2. JS获取元素内容属性以及修改

    1.通过document对象

  3. js获取浏览器内容宽高(小计)

    <SCRIPT LANGUAGE="JavaScript">var  s = "";s += "\r\n网页可见区域宽:"+ d ...

  4. js获取上传文件内容(未完待续)

    js 获取上传文件的字节数及内容 <div> 上传文件 : <input type="file" name = "file" id = &qu ...

  5. 为什么不能用 JS 获取剪贴板上的内容?

    为什么不能用 JS 获取剪贴板上的内容? 为什么不能用 JS 获取剪贴板上的内容? 发一串口令给朋友朋友复制这串口令,然后访问你的网站你在网站上用 JS 读取朋友剪贴板上的口令根据不同的口令,显示不同 ...

  6. js获取select选中的内容

    ### 获取select选中的内容 js获取select标签选中的值 var obj = document.getElementById("selectId");//获取selec ...

  7. JQ和Js获取span标签的内容

    JQ和Js获取span标签的内容 html: 1 <span id="content">‘我是span标签的内容’</span> javascript获取: ...

  8. js获取子节点和修改input的文本框内容

    js获取子节点和修改input的文本框内容 js获取子节点: $("#"+defaultPVItemId).children().eq(3); //获取某个选择器下的第四个子节点 ...

  9. JS正则表达式获取分组内容实例

    JS正则表达式获取分组内容. 支持多次匹配的方式: var testStr = "now test001 test002"; var re = /test(\d+)/ig; var ...

随机推荐

  1. (四)python自带解释器(IDLE)的使用

    什么是IDE? Integrated Development Environment(集成开发环境) 打个不恰当的比方,如果说写代码是制作一件工艺品,那IDE就是机床.再打个不恰当的比方,PS就是图片 ...

  2. Brush (IV) LightOJ - 1018

    题意:平面上有一些点,每刷一次可以把同一条直线上的点都刷光,问最少几次把所有点刷光. 方法: 显然是一个状态压缩dp.ans[S]表示把S集合中点刷掉的最少次数.最开始想到的方法是如果S中只有一个或两 ...

  3. 学习JavaScript数据结构与算法 (一)

    学习JavaScript数据结构与算法 的笔记, 包含一二三章 01基础 循环 斐波那契数列 var fibonaci = [1,1] for (var i = 2; i< 20;i++) { ...

  4. django 相关问题

    和数据库的连接 session的实现 django app开发步骤 python环境准备 数据库安装 model定义 url mapping定义 view定义 template定义 如何查看数据库里的 ...

  5. 150 Evaluate Reverse Polish Notation 逆波兰表达式求值

    求在 逆波兰表示法 中算术表达式的值.有效的运算符号包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰计数表达.例如:  ["2", "1&quo ...

  6. hadoop-0.20.2伪分布式安装简记

    1.准备环境 虚拟机(redhat enterprise linux 6.5) jdk-8u92-linux-x64.tar.gz hadoop-0.20.2.tar.gz 2.关闭虚拟机的防火墙,s ...

  7. PHP的加密方式

    1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str  --  原始字符串. raw_output  --  ...

  8. SpringBoot 2.x (8):模板引擎

    SpringBoot中有很多的starter:本质是多个JAR包集合 比如我们常用的: <dependency> <groupId>org.springframework.bo ...

  9. java的学习方向

    在我身边有很多初学者,或者想入门的门外汉问我该如何的去学习一门新的技术,如果你是一窍不通的门外汉,我给你的建议是,报一个可靠的基础培训班.当然培训班的方向也分为很多,有前端的培训课程.有java的培训 ...

  10. H+后台主题UI框架---整理(一)

    本篇文章是对H+这种框架进行整理,顺便了解一下标准的代码规范的写法. 一.表单: 1).下面是一个基本表单: 现在来看这个表单的结构: 1.整个表单的外框结构是一个div,至于padding和marg ...