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 特殊字符
Apr 05 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
Feb 28 Javascript
一个JavaScript防止表单重复提交的实例
Oct 21 Javascript
node.js中的fs.closeSync方法使用说明
Dec 17 Javascript
学习JavaScript设计模式(多态)
Nov 25 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
基于Cookie常用操作以及属性介绍
Sep 07 Javascript
微信小程序上传图片功能(附后端代码)
Jun 19 Javascript
vue项目环境变量配置的实现方法
Oct 12 Javascript
vue项目前端知识点整理【收藏】
May 13 Javascript
layui多图上传实现删除功能的例子
Sep 23 Javascript
element-ui封装一个Table模板组件的示例
Jan 04 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
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
2018/08/13 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
解决Python传递中文参数的问题
2015/08/04 Python
python 网络爬虫初级实现代码
2016/02/27 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Python语言的变量认识及操作方法
2018/02/11 Python
Pandas标记删除重复记录的方法
2018/04/08 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
wxPython多个窗口的基本结构
2019/11/19 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
大学生就业自荐信
2013/10/26 职场文书
工会换届选举方案
2014/05/21 职场文书
工伤私了协议书范本
2014/11/24 职场文书
车间质检员岗位职责
2015/04/08 职场文书
关于五一放假的通知
2015/08/18 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
python_tkinter事件类型详情
2022/03/20 Python