• javascript 点点滴滴 富文本编辑器的学习2


    hello world:

    1.   今天继续昨天没有总结完的富文本编辑器的学习点滴...昨天已经聊过了 这次学习的富文本编辑器 主要是用iframe来做的 。所以我们来看看 有哪些兼容 和难点 。
    2.   第一个 要说的就是 iframe 的兼容性 还有 命令  所有字体特效只是使用execComman()就能完成。 
    3.   在 w3c的浏览器下 iframe 是不能挂载任何事件的 所有对于iframe的 事件操作 全部被放到了 iframe.contentWindow上面来了。
    4.   在使用iframe编辑我们的内容以前 我们要这样写:

      

    var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
    iframeDocument.designMode = 'on';
    iframeDocument.open();
    iframeDocument.write('<html><head><style type="text/css">body{ font-family:arial; font-size:13px;background:#DDF3FF;border:0; }</style></head></html>');
    iframeDocument.close();
      现在已经为编辑准备 好了容器 ,可以开始干了哦!!!
      

      这里面的几个难点:
      1.光标记录和激活
      
    var _insertHTML = function(html){
      iframe.contentWindow.focus();
      if(!+"v1"){   // IE
        /****这里需要解决IE丢失光标位置的问题,详见核心代码四**************/
        iframeDocument.selection.createRange().pasteHTML(html);
        //获得选区对象
        //粘贴到选区的html内容, 会替换选择的内容.
      }else{
        
        //非IE浏览器
        var selection = iframe.contentWindow.getSelection();
        var range;
        if (selection) {
          range = selection.getRangeAt(0);
        }else {
          range = iframeDocument.createRange();
        }
        var oFragment = range.createContextualFragment(html),
        oLastNode = oFragment.lastChild ;
        range.insertNode(oFragment) ;
        range.setEndAfter(oLastNode ) ;
        range.setStartAfter(oLastNode );
        selection.removeAllRanges();//清除选择
        selection.addRange(range);
      }
    }
      这里面 有很多api 是平常 没有在见过的 更别说用过了
      

      相关知识:

    1. setSelectionRange
    2. document.selection  IE/Opera支持 Firefox/Safari/Chrome不支持
    3. createRange()  IE/Opera支持 Firefox/Safari/Chrome不支持
    4. createTextRange()  IE支持 Firefox/Safari/Chrome/Opera不支持
    5. window.getSelection()  Firefox/Safari/Chrome/Opera支持 IE不支持
      
      
    /*当光标离开iframe再进入时默认放在body的第1个节点上了,所以要记录光标的位置***/
    if (!+"v1") {
      var bookmark;
      // 记录IE的编辑光标的位置
      $.addEvent(iframe, "beforedeactivate", function(){// 在文档失去焦点以前
        var range = iframeDocument.selection.createRange();
        bookmark = range.getBookmark();
      });
      // 恢复Ie的编辑光标
      $.addEvent(iframe, "activate", function(){
        if (bookmark) {
          var range = iframeDocument.body.createTextRange();
          range.moveToBookmark(bookmark);
          range.select();
          bookmark = null;
        };
      });
    };

    主要就是兼容问题比较难搞 感觉
    这些 api 还是得自己看看 回头研究透彻了 再来补一章吧 !!! 
  • 相关阅读:
    linux 计划任务
    linux 进程管理
    PHP中global与$GLOBALS['']的区别
    php预定义变量
    linux 强制终止进程命令
    mysql取某表中数据的随机的方法
    mysql 连接 选库 查询
    Python 的异步 IO:Asyncio 简介
    并发和并行的区别
    asyncio模块中的Future和Task
  • 原文地址:https://www.cnblogs.com/hfdj/p/7518487.html
Copyright © 2020-2023  润新知