wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析


Posted in Javascript onMay 06, 2015

昨天在github上发现了一个很好的富文本编辑器wangEditor,一看名字就是中国人写的。这个编辑器好在支持ie6+,另外最重要的一点,它在ie6,7,8上都可以做到失去焦点后仍然可以在原位置插入图片,而且代码量很少。于是很好奇的看看它是怎么做的,裁剪了一下,就这些

var currentRange,_parentElem,supportRange = typeof document.createRange === 'function';
  function getCurrentRange() {
    var selection,
    range,
    txt = $('editor');
    if(supportRange){
      selection = document.getSelection();
      if (selection.getRangeAt && selection.rangeCount) {
        range = document.getSelection().getRangeAt(0);
        _parentElem = range.commonAncestorContainer;
      }
    }else{
      range = document.selection.createRange();
      _parentElem = range.parentElement();
    }
    if( _parentElem && (avalon.contains(txt, _parentElem) || txt === _parentElem) ){
      parentElem = _parentElem;
      return range;
    }
    return range;
  }
  function saveSelection() {
    currentRange = getCurrentRange();
  }
  function restoreSelection() {
    if(!currentRange){
      return;
    }
    var selection,
    range;
    if(supportRange){
      selection = document.getSelection();
      selection.removeAllRanges();
      selection.addRange(currentRange);
    }else{
      range = document.selection.createRange();
      range.setEndPoint('EndToEnd', currentRange);
      if(currentRange.text.length === 0){
        range.collapse(false);
      }else{
        range.setEndPoint('StartToStart', currentRange);
      }
      range.select();
    }
  }

这可比上一篇里面的那个从kindeditor扒下来的封装少太多了,而且看起来也是一目了然。

怎么用呢

function insertImage(html){
    restoreSelection();
    if(document.selection)
      currentRange.pasteHTML(html); 
    else
      document.execCommand("insertImage", false,html);
    saveSelection();
  }
  avalon.bind($('post_input'),'mouseup',function(e){
    saveSelection();
  });
  avalon.bind($('post_input'),'keyup',function(e){
    saveSelection();
  });

和上一篇里面一样,必须要对编辑器的div进行keyup,mouseup绑定,以便保存selection,range,方便在失去焦点后仍然可以在原来位置插入图片。调用的时候直接insertImage(html)就可以了。这里用的不是iframe,是div contenteditable=true.

wangEditor里面的例子是插入外链图片,一次只能插入一张图片。wangEditor源码统一用的是document.execCommand("insertImage", false,html);。但是这个方法有个问题,就是在ie6,7,8中,如果要插入多张图片的话,只会在原来位置插入一张图片。

先把if注释掉

wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析

一次插入两张图片

wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析

这次严谨点,ie6

wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析

ie7

wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析

ie8

wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析

解决方法是如果是ie6,7,8的话,currentRange.pasteHTML(html); 。插入html,也就是把上面的if注释去掉.当然插入的不再是图片地址了,现在是包含图片地址的整个img标签

ie6

wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析

ie7

wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析

ie8

wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析

最后附上例子下载

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
Sep 26 Javascript
面向对象的编程思想在javascript中的运用上部
Nov 20 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
jquery调整表格行tr上下顺序实例讲解
Jan 09 Javascript
jQuery实现的跨容器无缝拖动效果代码
Jun 21 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
Aug 29 Javascript
Angular5集成eventbus的示例代码
Jul 19 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
Apr 11 Javascript
vue组件间的参数传递实例详解
Apr 26 Javascript
JavaScript RegExp 对象用法详解
Sep 24 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
Oct 31 Javascript
让IDE识别webpack的别名alias的实现方法
May 06 Javascript
完美实现仿QQ空间评论回复特效
May 06 #Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
May 06 #Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
May 06 #Javascript
JS实现CheckBox复选框全选全不选功能
May 06 #Javascript
javascript使用avalon绑定实现checkbox全选
May 06 #Javascript
js实现滑动触屏事件监听的方法
May 05 #Javascript
JS根据生日算年龄的方法
May 05 #Javascript
You might like
php使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
php显示页码分页类的封装
2017/06/08 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
json 入门基础教程 推荐
2009/10/31 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
python正则表达式re模块详解
2014/06/25 Python
Python变量赋值的秘密分享
2018/04/03 Python
使用Python机器学习降低静态日志噪声
2018/09/29 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
工程质量月活动方案
2014/02/19 职场文书
工伤赔偿协议书
2014/04/15 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
南京南京观后感
2015/06/02 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
为Centos安装指定版本的Docker
2022/04/01 Servers
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL