`
campaign
  • 浏览: 1238 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

编辑器(ckeditor篇)

阅读更多
最近一直超级忙,忙着研究编辑器,研究了一段时间,出来跟大家分享一下我的心得

ckeditor她太好了,因为他开源,并且做的很强大(源码不压缩7万多行),之所以研究她是因为,一般我们做编辑器基本都是靠execCommand命令来实现的
缺点不用说,兼容性不好,就是同个浏览器不同版本也有差别,所以ck她自己实现了execCommand的各个命令,当然在她的最新的truck中也稍微有一点是用的原生的,但他标志为todo,呵呵

如果你想研究ck编辑器,那让小弟先来介绍一下他的核心的几个类
_source下的dom是最基础的实现了
因为在编辑器的世界里,textNode 是你打交道最多的元素了,但是很多框架这个都是忽略的,而且如果你用那你杯具了肯定报错,比如contains,之类的
所以在ck中设计了一套底层的核心代码来做这个事情

基类domobject他是根,实现什么自定义事件绑定啦,触发了什么的
继承他的是node这个是包括element, text , document的类,他实现了一些公共的方法,比如getNext,getPrevious之类的
他之下就是
        element text document(因为编辑器都是iframe这个document是iframe中的document) window同左iframe中的window

range这个太重要了,做编辑器必须的,就跟你要上wc要有手纸一样,他的作用就是体现你现在选中了那,光标在哪,等等

walker  这个也很有用,看名字就是走,按着一定的规制便利编辑器中的dom树

dtd 这个也肥肠肥肠的重要,看了他的代码感觉他也是从别人那扒来的,所以都是a b c这样的,这个告诉你那个元素他是块结构的,那个是inline的,那个能放在那个下,那个不能
比如<b>能发在p下,但你不能把p放在b下

还有几个没在他的他的core,但也肥肠重要
放在了plugin下

selection这个是range的亲爹,没有他你就不能找到代表你选中的那个range,(当然range是可以new 的,但new的range是什么都不选的,就是跟你当前的页面的状态无关,就是Range类)

style 这个也老有用了,简单的说就是你想把选中的文字加粗,那么就是range.js里的方法,把你的选中的生成的相应的range对象给style,style负责对这个range进行分析和加粗


好了上边几个js就基本上是ck来实现execCommand的原生命令的核心代码了,如果你想搞编辑器,那上边的你必看(虽然觉得你是傻子,因为你要搞编辑器,编辑器这个东西基本就是bug满天飞的东西)

接下来跟大家说说当然你选中一段文字时,你点b她就加粗了,后台的实现机制,我先聊个大致的,以后在慢慢和大家分享,我了解的细节的东西,比如range.js里的每个方法是做什么的

当你选中一段文本后,通过得到selection在通过selection 得到range
这里细说一下range
在ie下range是只有一个,但在除了ie以外的浏览器中range是可以多个的

range有几个比较基本的属性(javascript高级编程这本书介绍过这个但说的有点晕)
startContainer 开始范围的容器
startOffset 开始在范围中的位置

比如哦
<p><b>xxxx[sxxx</b>xxxxx]exxxx</p>
这样一个选区
[]表示我选的位置

我的开始在一个文本的中间,那么我的startContainer就是b下的这个xxxxxxxx的文本节点
那我的startOffset是4因为是从4这个字符开始的

注意有时xxxx 和sxxx是两个节点,虽然我们在页面上看不出来,但在dom树下是有这样的情况的
那么我的startContainer/startoffset就可以变化了

startContainer可以是b 这个节点,startOffset是1
表示是从b下的第一个(就是sxxxx这个)文本节点开始

也可以是startContainer是sxxx这个文本节点,startOffset是0
表示的是sxxxx这个文本节点的第0个字符开始

累死了,不知道我说明白了没
同理endContainer/endOffset也是这个道理
上边的选区的结束是endContainer是p endOffset是2(假设 xxxxx]exxxx 已经是两个节点了,当然也可以是一个,那么就是endContainer是这个文本几点,endOffset是5 注意是选区后面的那个)

collapsed合并,这个书上说的晕死一大堆话
其实就是
xxxxxx|xxxxx这个就是合并
range对象的体现就是
startContainer==endContainer
startOffset == endOffset

好了range得到了,然后交给style,style根据你要加的操作(加粗)来判断你的这个range上的节点是否能发在b/strong里能就从dom树上扣下这些节点放在documentFragment里,然后创建一个b
在appendChild,在插回到dom树上,如果不行,那就从开始的位置上一点一点的细分range,等于是把range切成小块,然后再做上述操作,分别加b


基本的操作就是这样了,好了,这次,是个抛砖头,下次分别聊,跟大家分享,编辑器这个东东,要聊的太多了
分享到:
评论
1 楼 pinklover 2010-08-28  
你好,我想请教一下,我该如何使用js实现在一个页面点击ok后,把某个值填入到插入图片那个弹出框中的替代文本框中呢?那个页面时由图片插入框的某个按钮调用出来,用来选中某个图片,并返回url值的。

相关推荐

    ckeditor4.0自定义标签操作详细步骤及修改后编辑器jar包下载

    本篇文章将详细阐述如何在CKEditor 4.0中进行自定义标签操作,并提供经过修改的编辑器JAR包供下载。 CKEditor 4.0是一款开源的JavaScript富文本编辑器,它支持多种浏览器环境,提供丰富的功能和高度可定制性。...

    jsp中使用ckeditor

    2. **创建编辑器实例**:在JSP页面中,找到你想放置编辑器的地方,使用`&lt;textarea&gt;`标签创建一个文本区域,然后用CKEditor的JavaScript API将其替换为富文本编辑器。例如: ```html &lt;textarea id="myEditor"&gt;&lt;/...

    Ext中CKEditor应用事例

    你也可以通过CKEditor的API获取或设置编辑器的内容,如`CKEDITOR.instances['myEditor'].getData()`用于获取编辑器的当前内容,`CKEDITOR.instances['myEditor'].setData(html)`则用于设置编辑器的内容。 总的来说...

    ckeditor_sample__5.zip

    这篇博客文章的作者可能详细讲解了CKEditor的一些高级特性或者特定的使用场景,帮助开发者更好地理解和应用这款编辑器。 首先,CKEditor 5是CKEditor系列的最新版本,它提供了更加现代和用户友好的界面,支持多种...

    SSH+ExtJs完成CKEditor富文本编辑器整合

    CKEditor是一款功能丰富的富文本编辑器,常用于网页中的内容编辑。本篇文章将详细介绍如何在SSH框架中整合CKEditor与ExtJS,以实现高效、美观的前端文本编辑功能。 首先,我们需要理解SSH框架的运作原理。Spring...

    CKEditor 控制图片上传

    CKEditor 是一款强大的富文本编辑器,广泛应用于网站内容管理、博客系统和其他在线文本输入场景。它提供了丰富的功能,如格式化、链接插入、图片上传等,极大地提升了用户在网页上的文字编辑体验。本篇文章将重点...

    ckeditor_sample_blog_4.rar

    CKEditor,作为一个强大的富文本编辑器,广泛应用于各种在线内容创作平台,包括博客、论坛、CMS系统等。本教程将深入剖析“姜哥手把手教你用ckeditor系列博客第四篇”的源代码,帮助开发者更好地理解和运用CKEditor...

    ckeditor 和 ckfinder集成,并解决ckeditor和jquery dialog冲突问题

    在IT行业中,富文本编辑器CKEditor是一款广泛应用的开源编辑工具,它允许用户在网页上进行格式化的文本编辑。CKFinder则是一个与之配套的文件管理器,方便用户上传、下载和管理图片、文档等资源。这篇博客文章...

    CKEditor asp.net

    CKEditor 是一个强大的富文本编辑器,广泛应用于Web开发中,为用户提供类似Word的文本编辑体验。在ASP.NET框架下,CKEditor可以被整合到网页中,为用户提供在线编辑功能,比如格式化文本、插入图片、创建链接等。这...

    CKEditor config.js文件配置

    CKEditor是一款广泛使用的开源富文本编辑器,它允许用户在网页上进行文本格式化、插入图片、链接等操作,提供了一种与Word类似的编辑体验。`config.js`是CKEditor的核心配置文件,它决定了编辑器的外观和行为。这篇...

    wordpress编辑器插件

    本篇文章将深入探讨“WordPress编辑器插件”,特别是针对压缩包中提到的“ckeditor-for-wordpress”。 WordPress的默认编辑器是 Gutenberg,它采用模块化设计,允许用户通过添加区块来构建页面。然而,对于习惯于...

    ckeditor学习笔记

    而CKEditor作为一款强大的开源富文本编辑器,被广泛应用于各种Web应用中。对于初学者而言,掌握CKEditor的基本使用及一些高级功能是非常重要的。 #### 二、CKEditor基础介绍 CKEditor是一款基于JavaScript的富文本...

    flask-ckeditor-demo:Flask项目集成富文本编辑器CKeditor演示,实现了图片上传、文件上传、Flash上传等功能

    本篇将深入探讨如何在Python的Flask框架中集成富文本编辑器CKEditor,以实现图片、文件及Flash的上传功能。这个项目,名为"flask-ckeditor-demo",提供了一个全面的示例,帮助开发者了解如何在实际应用中使用...

    ckeditor_3.6.zip

    《ckeditor_3.6.zip:富文本编辑器 CKEditor 的深度探索》 CKEditor,一个在Web开发领域广泛使用的开源富文本编辑器,以其强大的功能和易用性赢得了开发者们的青睐。CKEditor 3.6版本是其历史上的一个重要里程碑,...

    编辑器,各种编辑器希望大家喜欢.qqmail编辑器,fck,新浪编器,discuz编辑器

    本篇文章将深入探讨几种常见的编辑器:QQMail编辑器、FCKeditor、新浪编辑器以及Discuz编辑器。 首先,QQMail编辑器是腾讯公司开发的一款用于撰写电子邮件的内置编辑工具。它提供了丰富的文本格式化选项,包括字体...

    在线编辑器 .net 版

    本篇文章将深入探讨“在线编辑器 .NET 版”的相关知识点,包括其工作原理、开发技术以及实际应用。 1. **在线编辑器概述** 在线编辑器的核心功能是提供一个富文本界面,用户可以通过这个界面输入、格式化文本,...

    C# html编辑器集合

    本篇文章将深入探讨C# HTML编辑器的相关知识点,包括它们的基本功能、设计原理、以及如何在C#项目中集成和扩展这些编辑器。 首先,C# HTML编辑器通常是一种图形用户界面组件,允许用户在应用程序内部创建和编辑HTML...

    Flash编辑器,类似网页文本编辑器.rar

    本篇将深入探讨一款名为“Flash编辑器”的软件,它允许用户在网页上实现类似网页文本编辑器的功能,如文本排版、字体样式设定及颜色调整等。 Flash编辑器的核心在于其强大的ActionScript编程语言,这是Flash开发中...

    CKEditor4配置与开发详细中文说明文档

    2. 升级:如果需要升级现有的 CKEditor 安装,首先将旧的编辑器文件夹更名为备份文件夹,然后从 CKEditor 官方网站下载最新版本的 CKEditor,并将下载的文件解压到原编辑器的目录中。最后,将已做过修改的配置文件从...

    redmine的CKEDITOR插件简体中文版脚本

    在 Redmine 中,CKEditor 是一个常用的文本编辑器插件,用于增强用户在创建和编辑问题、注释时的文本格式化能力。CKEditor 提供了一个丰富的富文本界面,使得输入内容时可以添加格式、插入图片、链接等。 这篇博客...

Global site tag (gtag.js) - Google Analytics