wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析

 更新时间:2015年05月06日 09:30:47   投稿:hebedich  
本文给大家带来的是一款非常不错的富文本编辑器WangEditor,他最大的特点是它在ie6,7,8上都可以做到失去焦点后仍然可以在原位置插入图片,而且代码量很少,下面我们就来分析下他是如何实现的呢

昨天在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注释掉

一次插入两张图片

这次严谨点,ie6

ie7

ie8

解决方法是如果是ie6,7,8的话,currentRange.pasteHTML(html); 。插入html,也就是把上面的if注释去掉.当然插入的不再是图片地址了,现在是包含图片地址的整个img标签

ie6

ie7

ie8

最后附上例子下载

以上所述就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • 简易的投票系统以及js刷票思路和方法

    简易的投票系统以及js刷票思路和方法

    这篇文章主要介绍了简易的投票系统以及js刷票思路和方法,文章十分的详尽,思路也很清晰,是篇非常不错的文章,这里推荐给大家,有需要的小伙伴可以参考下。
    2015-04-04
  • JSON.parse损坏大数字的原因解析及解决方案

    JSON.parse损坏大数字的原因解析及解决方案

    从10多年前JSON在线编辑器的早期开始,用户经常反映编辑器有时会破坏他们JSON文档中的大数字的问题,这篇文章主要介绍了为什么JSON.parse会损坏大数字,如何解决这个问题,需要的朋友可以参考下
    2022-10-10
  • 微信小程序日历插件代码实例

    微信小程序日历插件代码实例

    这篇文章主要介绍了微信小程序日历插件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Javascript前端UI框架Kit使用指南之kitjs事件管理

    Javascript前端UI框架Kit使用指南之kitjs事件管理

    本文详细介绍了Kitjs的事件管理功能,包括普通的Dom事件、Kit如何解决问题、代码解析、注销事件等。需要的朋友可以参考下。
    2014-11-11
  • webpack 3.X学习之多页面打包的方法

    webpack 3.X学习之多页面打包的方法

    这篇文章主要介绍了webpack 3.X学习之多页面打包的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • javascript 动态创建表格的2种方法总结

    javascript 动态创建表格的2种方法总结

    本文给大家总结了2种使用javascript动态创建表格的方法,非常简单实用,小伙伴们自己对比下看看哪种更适合你呢,一般本人是使用第一种的。
    2015-03-03
  • JS简单实现禁止访问某个页面的方法

    JS简单实现禁止访问某个页面的方法

    这篇文章主要介绍了JS简单实现禁止访问某个页面的方法,涉及基本的页面跳转操作技巧,需要的朋友可以参考下
    2016-09-09
  • js怎么只刷新当前页面一次

    js怎么只刷新当前页面一次

    Javascript刷新页面的几种方法:location.reload()、location.replace(location)、history.go(0)、location=location、location.assign(location)、document.execCommand('Refresh')、window.navigate(location)、document.URL=location.href,js怎么只刷新当前页面一次呢
    2023-09-09
  • 很不错的两款Bootstrap Icon图标选择组件

    很不错的两款Bootstrap Icon图标选择组件

    这篇文章主要介绍了不容错过的两款Bootstrap Icon图标选择组件,支持自定义的图标,拿出来分享下,绝对的干货,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • JS按回车键实现登录的方法

    JS按回车键实现登录的方法

    这篇文章主要介绍了JS按回车键实现登录的方法,在web程序设计中非常实用的技巧,可用于表单提交的情况,具有很好的用户体验,需要的朋友可以参考下
    2014-08-08

最新评论