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学习笔记(十七)js 优化
Feb 04 Javascript
jQuery EasyUI API 中文文档 - Form表单
Oct 06 Javascript
js 连接数据库如何操作数据库中的数据
Nov 23 Javascript
js复制到剪切板的实例方法
Jun 28 Javascript
实现图片预加载的三大方法及优缺点分析
Nov 19 Javascript
jquery彩色投票进度条简单实例演示
Jul 23 Javascript
javascript类型系统——undefined和null全面了解
Jul 13 Javascript
Angular2表单自定义验证器的实现
Oct 19 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
Sep 07 Javascript
JS为什么说async/await是generator的语法糖详解
Jul 11 Javascript
vue 遮罩层阻止默认滚动事件操作
Jul 28 Javascript
Vue——前端生成二维码的示例
Dec 19 Vue.js
完美实现仿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使用递归函数实现数字累加的方法
2015/03/16 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
bootstrap响应式工具使用详解
2017/11/29 Javascript
基于js文件加载优化(详解)
2018/01/03 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
python 运算符 供重载参考
2009/06/11 Python
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
Python实现控制台中的进度条功能代码
2017/12/22 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
护理学毕业生自荐信
2013/10/02 职场文书
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
好人好事事迹材料
2014/02/12 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
法人授权委托书
2014/09/16 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
实习证明模板
2015/06/16 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
canvas绘制折线路径动画实现
2021/05/12 Javascript
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技