博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript 点点滴滴 富文本编辑器的学习2
阅读量:4973 次
发布时间:2019-06-12

本文共 2174 字,大约阅读时间需要 7 分钟。

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.   IE/Opera支持 Firefox/Safari/Chrome不支持
  2. ()  IE/Opera支持 Firefox/Safari/Chrome不支持
  3. ()  IE支持 Firefox/Safari/Chrome/Opera不支持
  4. ()  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 还是得自己看看 回头研究透彻了 再来补一章吧 !!! 

转载于:https://www.cnblogs.com/hfdj/p/7518487.html

你可能感兴趣的文章
IOS 第三方管理库管理 CocoaPods
查看>>
背景色渐变(兼容各浏览器)
查看>>
Redis中7种集合类型应用场景
查看>>
MariaDB 和 MySQL 比较
查看>>
MYSQL: 1292 - Truncated incorrect DOUBLE value: '184B3C0A-C411-47F7-BE45-CE7C0818F420'
查看>>
Java JPA @Transient 在Hibernate中应用
查看>>
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
查看>>
springMVC Controller 参数映射
查看>>
JDK1.8源码分析02之阅读源码顺序
查看>>
java使用jsp servlet来防止csrf 攻击的实现方法
查看>>
缓存穿透/击穿/雪崩/降级
查看>>
我的作品
查看>>
【bzoj题解】2186 莎拉公主的困惑
查看>>
Protocol Buffer学习笔记
查看>>
Update 语句
查看>>
HBuilder打包Android apk 支付不了问题解决
查看>>
poj2594——最小路径覆盖
查看>>
程序员口述:我是如何工作三年后跳槽到美团的?
查看>>
欧拉函数
查看>>
关于SQL2008 “不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了‘阻止保存要求重新创建表的更改’” 解决方案...
查看>>