富文本编辑器原理

富文本编辑器,Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器。

富文本编辑器不同于文本编辑器,比较好的文本编辑器有kindeditor,fckeditor等,百度推出的开源富文本编辑器UEditor算是其中的后起之秀。

对于支持富文本编辑的浏览器来说,其实就是设置 document
的 designMode 属性为 on 后,再通过执行 document.execCommand(‘commandName‘[, UIFlag[, value]]) 即可。commandName 和 value 可以在MSDN 上和MDC 上找到,它们就是我们创建各种格式的命令,比方说,我们要加粗字体,执行 document.execCommand(‘bold‘, false) 即可。很简单是吧?但是值得注意的是,通常是选中了文本后才执行命令,被选中的文本才被格式化。对于未选中的文本进行这个命令,各浏览器有不同的处理方式,比方
IE 可能是对位于光标中的标签内容进行格式化,而其它浏览器不做任何处理,这超出本文的内容,不细述。同时需要注意的是,UIFlag 这个参数设置为 true 表示 display any user interface triggered by the command (if any)

各浏览器之前的区别

1、Mozilla和IE在生成HTML时,Mozilla是生成span样式,而IE则使用HTML标签生成样式:

Mozilla


<span style="font-weight: bold;">I love geckos.</span>

<span style="font-weight: bold; font-style: italic; 

    text-decoration: underline;">Dinosaurs are big.</span>

IE


<STRONG>I love geckos.</STRONG>

<STRONG><EM><U>Dinosaurs are big.</U></EM></STRONG>

2、另外一个区别就是访问iframe中的document

Mozilla使用W3C标准方式 IFrameElement.contentDocument

IE使用 IFrameElement.document

或者直接使用 document.getElementById(aID).contentWindow.document 获取document

这里附上最简化的编辑器示例:

eidtor.html

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
  <title></title>
  <style type="text/css">
    .editorIframe {
      border: 1px solid #0000ff;
      width: 100%;
      height: 300px;
    }
  </style>

</head>
<body onload="onload()">
<div>
  自定义编译器
</div>
<div>
  <button onclick="doRichEditCommand('bold')" style="font-weight:bold; width: 25px">B</button>
  <button onclick="doRichEditCommand('italic')" style="font-weight:bold; width: 25px">I</button>
</div>
<div>
  <iframe id="editorIframe" class="editorIframe" src="editorIframe1.html"></iframe>
</div>

<script type="text/javascript">
  var editorDoc = getIFrameDocument('editorIframe');
  var editorEl = document.getElementById('editorIframe');

  function onload() {
    document.getElementById('editorIframe').contentWindow.focus();
  }

  function doRichEditCommand(cmd, arg) {
    //这里不能使用缓存对象,editorDoc
    cmd && getIFrameDocument('editorIframe').execCommand(cmd, false, arg);
    document.getElementById('editorIframe').contentWindow.focus();
  }

  function getIFrameDocument(aID) {

    return document.getElementById(aID).contentWindow.document;

    //不需要使用Mozilla写法
    // if contentDocument exists, W3C compliant (Mozilla)
//    if (document.getElementById(aID).contentDocument) {
//      return document.getElementById(aID).contentDocument;
//    } else {
//      // IE
//      return document.frames[aID].document;
//    }
  }
</script>
</body>
</html>

eidtorIframe.html

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
  <title></title>
  <style type="text/css">
    html,body{
      margin: 2;
    }
  </style>
  <script type="text/javascript">
    function onload() {
      window.document.designMode = "On";
      document.body.focus();
    }

  </script>
</head>
<body contentEditable="true" onload="onload()">

</body>
</html>

常用命令参考:https://developer.mozilla.org/en-US/docs/Web/API/document.execCommand

时间: 2024-08-05 19:08:03

富文本编辑器原理的相关文章

富文本编辑器开发原理

富文本编辑器的开发主要使用到东西如下: 1.iframe 2.将iframe的designMode设置为'on' 3.将iframe的contentEditable设置为true 4.获取iframe对象的contentDocument(注意兼容性) 5.使用contentDocument对象的write方法写入一个html文档,为解决兼容性问题需要再使用write方法之前使用open方法.之后使用close方法. 6.获取文档内容使用doc.body.innerHTML 7.实现加粗之类操作的

【实践】简洁大方的summernote 富文本编辑器插件的用发——实例篇

实例化后的summernote 是这样子的 很漂亮对吧,而我做成页面效果是这样的: 先说说实例化一个summernote 的方法把,其实也不难,jq 选择器选择一个要变成富文本编辑器的元素然后调用 summernote 方法传入一个对象作为参数便可,参数是一个对象,属性就是这个富文本的一些样式属性,如下: 上面的属性是一些比较常用的属性,更多属性可以查看官方文档.特别注意一点的是callbacks 属性,它的作用是summernote 编辑器里面的一些功能要实现的回调方法,这里我的需求只是上传图

TinyMCE(富文本编辑器)

[转]TinyMCE(富文本编辑器)在Asp.Net中的使用方法 官网演示以及示例代码:https://www.tinymce.com/docs/demo/image-tools/ 转自:http://www.cnblogs.com/hahacjh/archive/2010/07/24/1784268.html TinyMCE 在Asp.Net中的使用方法其实挺简单的,从官方网站下载TinyMCE),然后将里面的jscripts目录拷到你的网站目录 假设你的aspx页面中某一个地方需要用到编辑器

Android富文本编辑器RichEditor的使用

以前有个项目做一个笔记本类似的东西,觉得写的不太好,最近重新写,就发现了这个富文本编辑器他的效果是这样的 感觉有点厉害啊 废话不多说开始撸码 1先添加依赖 dependencies { compile 'jp.wasabeef:richeditor-android:1.2.0' } 2写布局 <jp.wasabeef.richeditor.RichEditor android:id="@+id/editor" android:layout_width="match_pa

商城项目整理(四)JDBC+富文本编辑器实现商品增加,样式设置,和修改

UEditor富文本编辑器:http://ueditor.baidu.com/website/ 相应页面展示: 商品添加: 商品修改: 前台商品展示: 商品表建表语句: 1 create table TEST.GOODS_TABLE 2 ( 3 gid NUMBER not null, 4 gname VARCHAR2(90), 5 gdetails CLOB, 6 gpicture VARCHAR2(100), 7 gprice NUMBER, 8 gleixing NUMBER, 9 gpi

关于富文本编辑器UEditor

2017.1.18,星期三?     关于富文本编辑器:     富文本编辑器,Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器. 富文本编辑器不同于文本编辑器,程序员可到网上下载免费的富文本编辑器内嵌于自己的网站或程序里(当然付费的功能会更强大些),方便用户编辑文章或信息.比较好的文本编辑器有kindeditor,fckeditor等. 关于UEditor:官网                           UEditor文档,我们的说明书

UEditor百度富文本编辑器--让编辑器自适应宽度的解决方案

UEditor百度富文本编辑器的initialFrameWidth属性,默认值是1000. 不能够自适应屏幕宽度.如图1: 刚开始的时候,我是直接设置initialFrameWidth=null的.效果如图2: 这样子UEditor百度富文本编辑器会在第一次加载的时候获取屏幕宽度,然后赋值给initialFrameWidth属性. 这样子确实是可以在第一次加载的时候适应屏幕宽度,但是却似乎宽度稍微过了一点点,超过上面的灰条了.而且这里还有一个问题: 当你改变浏览器大小时,会有个很严重的排版BUG

富文本编辑器UEditor的配置使用方法

将下载的富文本编辑器的文件解压后放到 webcontent 下 如果 文件中的jsp文件夹下的controller.java文件报错的话    就将jsp下的lib文件夹中的文件都复制到  web-inf 文件夹下的lib中,就可以解决报错的问题了 按理说 还需要修改config.js中的URL值  但是我没修改  运行也出来效果了 <%@ page language="java" contentType="text/html; charset=utf-8"

kindEditor 富文本编辑器 使用介绍

第一版:存放位置:  ---->把该创建的文件包放到javaWeb 过程的 WEB_INF 下:如图所示. 第二步:< kindEditor 插件的引用> :JS引用 1 <script type="text/javascript" charset="utf-8" src="/js/kindeditor-4.1.10/kindeditor-all-min.js"></script> 2 <scrip