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 相关文章推荐
兼容多浏览器的字幕特效Marquee的通用js类
Jul 20 Javascript
JavaScript.Encode手动解码技巧
Jul 14 Javascript
IE下使用cloneNode注意事项分享
Nov 22 Javascript
基于jQuery实现图片的前进与后退功能
Apr 24 Javascript
JS倒计时代码汇总
Nov 25 Javascript
Javascript复制实例详解
Jan 28 Javascript
bootstrap Table的一些小操作
Nov 01 Javascript
在Swiper内如何制作CSS3动画效果示例代码
Dec 07 Javascript
jQuery UI实现动画效果代码分享
Aug 19 jQuery
移动端吸顶fixbar的解决方案详解
Jul 17 Javascript
详解微信小程序图片地扯转base64解决方案
Aug 18 Javascript
vue导入.md文件的步骤(markdown转HTML)
Dec 31 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 全文搜索和替换的实现代码
2008/07/29 PHP
PHP代码优化之成员变量获取速度对比
2014/02/28 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
简单的php购物车代码
2020/06/05 PHP
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
什么是测试驱动开发(TDD)
2012/02/15 面试题
水污染治理专业毕业生推荐信
2013/11/14 职场文书
高一政治教学反思
2014/01/28 职场文书
幼儿园教师个人反思
2014/01/30 职场文书
《识字五》教学反思
2014/03/01 职场文书
小学教师师德整改措施
2014/09/29 职场文书
先进教师事迹材料
2014/12/16 职场文书