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 相关文章推荐
刷新页面实现方式总结(HTML,ASP,JS)
Nov 13 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
Oct 25 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
Oct 28 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
Apr 13 Javascript
详解React中的组件通信问题
Jul 31 Javascript
对vue v-if v-else-if v-else 的简单使用详解
Sep 29 Javascript
Vue 框架之动态绑定 css 样式实例分析
Nov 14 Javascript
微信小程序实现评论功能
Nov 28 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
Dec 14 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 Javascript
微信小程序遍历Echarts图表实现多个饼图
Apr 25 Javascript
vue获取data数据改变前后的值方法
Nov 07 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学习笔记 数组的常用函数
2011/06/13 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
2013/04/13 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Python文件和目录操作详解
2015/02/08 Python
python处理图片之PIL模块简单使用方法
2015/05/11 Python
python 系统调用的实例详解
2017/07/11 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
Python单元测试与测试用例简析
2019/11/09 Python
Python更换pip源方法过程解析
2020/05/19 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
python 如何对logging日志封装
2020/12/02 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
应用化学专业职业生涯规划书
2013/12/31 职场文书
网吧消防安全制度
2014/01/28 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
小组口号大全
2014/06/09 职场文书
实名检举信范文
2015/03/02 职场文书
高一军训口号
2015/12/25 职场文书
python not运算符的实例用法
2021/06/30 Python