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 数组实现一个类似ruby的迭代器
Oct 27 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
Jul 24 Javascript
固定网页背景图同时保持图片比例的思路代码
Aug 15 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
Dec 05 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
Oct 11 Javascript
javascript获取本机操作系统类型的方法
Aug 13 Javascript
javascript精确统计网站访问量实例代码
Dec 19 Javascript
jquery利用json实现页面之间传值的实例解析
Dec 12 Javascript
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
微信小程序代码上传、审核发布小程序
May 18 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
Sep 02 Javascript
JavaScript随机数的组合问题案例分析
May 16 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
mysql 全文搜索 技巧
2007/04/27 PHP
php中in_array函数用法探究
2014/11/25 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
jquery 3D球状导航的文章分类
2010/07/06 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
全面理解闭包机制
2016/07/11 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
Python中return self的用法详解
2018/07/27 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
python入门之基础语法学习笔记
2020/02/08 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
Python如何实现FTP功能
2020/05/28 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
小学生自我评价范文
2014/01/25 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
委托书样本
2014/04/02 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
Nginx快速入门教程
2021/03/31 Servers