H5富文本编辑器原理解析:

核心属性:

    1、contentEditable="true"; //属性规定是否可编辑元素的内容

  2、window.document.designMode = "On";//让整个页面都可以编辑,通常会把要编辑的文档放在一个<iframe>元素中,而这个元素就充当了一个超级的编辑框.

3、iframeWindow.document.execCommand(sCommand,false,value);

当一个HTML文档切换到设计模式 designMode时,文档对象暴露 execCommand方法,该方法允许运行命令来操纵可编辑区域的内容。

   大多数命令影响文档的选择(粗体,斜体等),而其他命令插入新元素(添加链接)或影响整行(缩进)。当使用contentEditable时,调用
execCommand() 将影响当前活动的可编辑元素
我使用的是闭包 的方式实现的一个简易的富文本编辑器  组件。只对外开放一个全局变量 editorIframe 避免内部变量被污染。

var editorIframe=(function(){function extend(target, source) {for (var objin source) {target[obj] = source[obj];}return target;}function addEvent(element,eventName,fn){(element.attachEvent)? (element.attachEvent('on' + eventName,fn)): (element.addEventListener(eventName,fn,false));}function removeEvent(element,eventName,fn){(element.detachEvent)? (element.detachEvent('on' + eventName, fn)): (element.removeEventListener(eventName,fn,false));}
function editorIframe(options){var defaultoptions={operate:{'backColor':'red','bold':'true','copy':'','delete':'true','italic':'true','underline':'',},//*.....操作功能
        //editBox:1,
        iframeElementStyle:"width:400px;height:300px;border:1px solid #999",//编辑器样式
        buttonElementStyle:"",//按钮样式
        iframeSrc:"about:blank", //iframe 链接
        placeholder:"请输入",//placeholder
        parentContainer:document.body,//父容器
    };this.options=extend(defaultoptions,options)||{};this.render();
}
editorIframe.prototype={render:function(){//渲染页面
        var _this=this;// 编辑框渲染
        var iframeElement= document.createElement('iframe');iframeElement.setAttribute("id","iframe1");iframeElement.style.cssText = this.options.iframeElementStyle;iframeElement.src = this.options.iframeSrc;addEvent(iframeElement,'load',function(){removeEvent(iframeElement,'load',arguments.callee);var iframeWindow= iframeElement.contentWindow;iframeWindow.document.open();iframeWindow.document.writeln('<p><span>'+_this.options.placeholder+'</span></p>');iframeWindow.document.close();(iframeWindow.document.designMode)?(iframeWindow.document.designMode = 'On'):(iframeWindow.document.body.contentEditable = true);//按钮渲染
            var sCommands=_this.options.operate;var divElement= document.createElement('div');for (var iin sCommands){var buttonElement= document.createElement('button');buttonElement.style.cssText = _this.options.buttonElementStyle;buttonElement.onclick = (function(sCommand,value){return function(){(function(sCommand,value){try{var returnValue= iframeWindow.document.execCommand(sCommand,false,value);}catch(e){}})(sCommand,value);};})(i,sCommands[i]);buttonElement.appendChild(document.createTextNode(i));divElement.appendChild(buttonElement);}var firstEl=_this.options.parentContainer.firstChild;//得到页面的第一个元素
            _this.options.parentContainer.insertBefore(divElement,firstEl);});_this.options.parentContainer.appendChild(iframeElement);},value:function(str){var iframeElement= document.querySelector('#iframe1');if(!str){return iframeElement.contentDocument.body.innerHTML;}else{iframeElement.contentDocument.body.innerHTML=str;}}
};return editorIframe;
})();
调用方法也很简单:
var defaultoptions={operate:{'bold':'true','copy':'','delete':'true','italic':'true','underline':''
    },//*.....操作功能
    //editBox:1,
    iframeElementStyle:"width:400px;height:300px;border:1px solid #999;margin:12px 0",//编辑器样式
    buttonElementStyle:"",iframeSrc:"about:blank", //iframe 链接
    placeholder:"placeholder",//placeholder
    parentContainer:document.querySelector("#container")//父容器
};
var edit=new editorIframe(defaultoptions);
edit.value("这是我写的第一个富文本编辑器");//赋值方法与jquery类似 传值为赋值 反之为获取
***更多属性请参照

document.execCommand 属性



												

原生手写富文本编辑器组件相关推荐

  1. 微信小程序 富文本编辑器组件 editor

    微信小程序 富文本编辑器组件 editor <view class="container"><view class="titlebox"> ...

  2. 自己写富文本编辑器jss_JSS选择器和语法规则

    自己写富文本编辑器jss JSS is a JavaScript library that allows you to create objects that follow a CSS-like sy ...

  3. tui-editor富文本编辑器组件

    tui-editor富文本编辑器 记录项目中使用富文本编辑器 安装 npm init & npm install --save tui-editor 创建组件文档 tuieditor 在 de ...

  4. 小程序editor 富文本编辑器组件

    效果: 关于editor 富文本编辑器组件 复制到组件common 里面.json 引用即可 链接:https://pan.baidu.com/s/1_QIp28IOVuyVFfKfFZwxKQ 提取 ...

  5. vue中使用kindeditor编辑器_vue富文本编辑器组件vue-quill-edit使用教程

    这篇文章主要为大家详细介绍了vue富文本编辑器组件vue-quill-edit使用教程,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 之前使用的 ...

  6. 使用微信小程序 富文本编辑器组件 editor

    先看下官方文档 https://developers.weixin.qq.com/miniprogram/dev/component/editor.html 富文本组件文档 文档上的代码比较少建议在开 ...

  7. uniapp微信小程序富文本编辑器组件

    前言 最近需要实现一个微信小程序的富文本编辑器,由于使用的是uniapp框架开发的小程序,因此就改造了一下微信小程序官方案例,并封装成了一个组件. uniapp-editor gitee仓库 实现效果 ...

  8. 小程序富文本编辑器组件

     效果图只是功能的一部分 话不多说,先上代码 html部分: <page-container show="{{showPage}}" z-index="999999 ...

  9. Vue2 封装的 Quill 富文本编辑器组件 Vue-Quill-Editor

    1.安装 npm install vue-quill-editor --save 2.使用 import { quillEditor } from 'vue-quill-editor' 3.组件中 & ...

最新文章

  1. nginx域名配置非80端口的301跳转
  2. 使用MEF实现通用参数设置
  3. 交换机出现err-disable的原因及解决方法
  4. (转)elasticsearch6.0版本安装head插件
  5. 如何在android模拟器中安装apk软件
  6. openssl-1.0.0b - libssl 移植到ARM Linux
  7. mysql 删除重复数据_日常答疑|MySQL删除重复数据踩过得坑
  8. python 日历查询系统_python 日历
  9. 如何使用Linux重置Windows密码
  10. 操作系统实验 文件复制/复制文件
  11. 十天学会php之第九天
  12. ZigBee--CC2530单片机--按键控制LED灯
  13. 生鲜电商的“7年之谎”
  14. 『杭电1982』Kaitou Kid - The Phantom Thief (1)
  15. rosdep update 使用小鱼fishros解决ros1/ros2问题 2022
  16. 13.华为秋招一二面
  17. android电子书小程序,小程序安卓手机无法打开pdf(解决)
  18. maven js css 压缩,使用wro4j和maven在编译期间压缩js和css文件(经典)
  19. 70道android面试题汇总
  20. 英语文字转语音的软件有哪些?推荐三款文字转语音真人发声软件

热门文章

  1. html+css+js之20个练手小项目(一)
  2. 指一批掌握计算机知识技能,文献检索考试题库
  3. verilog的代码片段在GVIM/VIM中的使用——:ab 配置使用(定制自己的coding)
  4. 偏微分方程(Partial Differential Equation III)
  5. HDU - 5965
  6. 红包封面发货平台 卡密系统 全新红包封面平台 可搭建分站 独立后台的源码
  7. STM32MP157驱动开发——蜂鸣器设备驱动
  8. kali------kali更新源
  9. 从0到1 CTFer成功之路》XSS---学习笔记
  10. Pycharm打包可执行文件exe/mac