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 全角转换实现代码
Jul 17 Javascript
js内置对象 学习笔记
Aug 01 Javascript
js replace 与replaceall实例用法详解
Aug 03 Javascript
Node.js中child_process实现多进程
Feb 03 Javascript
smartcrop.js智能图片裁剪库
Oct 14 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
Jan 07 Javascript
jQuery图片轮播实现并封装(一)
Dec 03 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
Jan 19 Javascript
详解Vue如何支持JSX语法
Nov 10 Javascript
对vux点击事件的优化详解
Aug 28 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
Apr 11 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函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
jquery选择器简述
2015/08/31 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
利用python批量检查网站的可用性
2016/09/09 Python
Python3实现购物车功能
2018/04/18 Python
Python正则表达式指南 推荐
2018/10/09 Python
使用python进行广告点击率的预测的实现
2019/07/04 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
新闻学毕业生自荐信
2013/11/15 职场文书
老公给老婆的道歉信
2014/01/10 职场文书
土木工程专业推荐信
2014/02/19 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
2016年父亲节寄语
2015/12/04 职场文书