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 相关文章推荐
JS和Jquery获取和修改label的值的示例代码
Jan 15 Javascript
javascript实现禁止右键和F12查看源代码
Dec 26 Javascript
本人自用的global.js库源码分享
Feb 28 Javascript
JavaScript评论点赞功能的实现方法
Mar 13 Javascript
JS简单实现数组去重的方法示例
Mar 27 Javascript
JavaScript字符串检索字符的方法
Jun 23 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
Jul 10 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
Oct 23 Javascript
Vue父组件调用子组件事件方法
Feb 23 Javascript
vue.js实现的绑定class操作示例
Jul 06 Javascript
如何使用puppet替换文件中的string
Dec 06 Javascript
微信小程序全局变量功能与用法详解
Jan 22 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下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
平面设计自荐信
2013/10/07 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
个人作风建设心得体会
2014/10/22 职场文书
鲁迅故居导游词
2015/02/05 职场文书
清洁工岗位职责
2015/02/13 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
2016年中学清明节活动总结
2016/04/01 职场文书
检讨书格式
2019/04/25 职场文书