`
yiminghe
  • 浏览: 1460263 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

YUI2 RTE分析-1:核心函数

阅读更多

富文本编辑器(RTE)一直是浏览器兼容性的重灾区,不看YUI Editor源码之前还只停留在概念上,看完之后确实挺震撼,editor代码和yui关系已经不大了,很大一部分代码都在if-else判断浏览器,当然editor也有一个很好的架构来对付浏览器差异问题,这次说得是写一个 RTE 所需要的核心函数。


例子:

 

编辑区内容html代码:

 <h1>测试</h1>
			<div style="text-align:center">1,2,3,4,<span style="color:red;">5,6</span>,7,8</div>
		<img src="http://www.google.com.hk/intl/zh-CN/images/logo_cn.gif" alt="i love google"/>
			

 

渲染界面:

 

 

介绍

 

1.Range

   详细介绍就要看 PPk 的 Introduction To range ,简单来说就是提供了用户编辑选择某段内容的信息,比如对用户选择的文本进行高亮,加粗,加链接就很可能要用到这个功能,各个浏览器表现差异非常大,但是 yui editor 提供了最核心的 _getRange()方法很大程度上屏蔽了这个差异。

 

如下图:

选择了 3,4,5,6,7 ,则 range 可以告诉我们这个信息:

 

 

 

2.选择元素

 

实现为:_getSelectedElement()方法,内部调用了_getRange,这个是yui editor提出来的概念,为了判断选择或光标所在处文本是否高亮过,是否加粗过,是否曾经加过链接,则要知道当前所在的dom元素(element),然后再对dom element进行判断即可,用来更新编辑状态栏工具栏。


当前在红色字体(5,6)区域范围内,而这段红色字体的实现是用span来包裹,则可检查selectedElement的css属性即可知道当前区域状态。

 

 

 

演示:

 

基础库使用YUI3,别的库只需替换事件注册与浏览器判断语句亦可。


rte@yui3演示


rte核心代码



演示了 _getRange ,_getSelectedElement 的作用,可在html编辑框内输入代码同步到编辑区域,可在编辑区域内光标定位,选择内容,点击按钮可以查看 range,selectedElement的简单信息,详细信息可用firefox,chrome控制台查看。

 

 

参考资料:

 

References:(From kissy )

  1. Command Identifiers (MSDN)
  2. selection Object (MSDN)
  3. TextRange Object (MSDN)
  4. controlRange Collection (MSDN)
  5. Rich-Text Editing in Mozilla (MDC)
  6. Selection (MDC)
  7. range (MDC)
  8. execCommand Compatibility (让人佩服的 PPK)
  9. Introduction to Range (通俗易懂的 PPK)
  10. Range Compatibility Table (Range is EVIL)
  11. contentEditable Demo (PPK 的尝试)
  12. Firefox 3 – ContentEditable
  13. Midas Specification (MDC)
  14. Midas Demo
  15. Cross-Browser Rich Text Editor (RTE) Demo
  16. CKEditor (FCKEditor 的新一代产品,RTE 中的王者)
  17. TinyMCE (后起之秀,我接触的第一个 RTE)
  18. Google Docs (简单与复杂的权衡)
  19. YUI RTE (爱恨交加)
  20. NicEditor (采用 ContentEditable,跨域)
  21. 白社会编辑器 (简单够用,挺好)

补充参考

  1. Rich HTML editing in the browser ( Opera ) [ part1 , part2 ]
  • 大小: 29.8 KB
  • 大小: 52.2 KB
  • 大小: 48 KB
分享到:
评论

相关推荐

    yuicompressor-maven-plugin

    **yuicompressor-maven-plugin详解** `yuicompressor-maven-plugin`是一款强大的Maven插件,主要用于优化前端资源,特别是JavaScript和CSS文件。这个插件是基于YUI Compressor,一个由Yahoo开发的开源工具,它能...

    eclipse yuicompressor-maven-plugin

    &lt;linebreakpos&gt;-1 &lt;nomunge&gt;true ``` - **运行插件**:在Eclipse中,执行`mvn clean package`命令,插件将在打包阶段自动对指定的.js和.css文件进行压缩,并将结果存放到指定的输出目录。 ### 5. 插件优点...

    yuicompressor-maven-plugin, 用于压缩 (Minify/Ofuscate/Aggregate) Javascript文件和使用 YUI 压缩器的CSS文件的Maven 插件.zip

    yuicompressor-maven-plugin, 用于压缩 (Minify/Ofuscate/Aggregate) Javascript文件和使用 YUI 压缩器的CSS文件的Maven 插件 [[Flattr this git repo] ( http://api.flattr.com/button/flattr-badge-large.png)]...

    yui-yuidoc-yuidoc-50-529-gc631758

    【标题】"yui-yuidoc-yuidoc-50-529-gc631758" 指向的是一个关于 Yahoo User Interface Library (YUI) 和 YUIDoc 的特定版本或修订版。YUI 是一个开源的 JavaScript 库,提供了一系列模块化的工具,用于构建富有交互...

    tui.code-snippet:一组便于开发 javascript 应用程序的实用方法

    TOAST UI 工具:代码片段一组实用方法,可轻松开发 javascript 应用程序。 :triangular_flag: 目录 :hammer: 用法捆 :globe_showing_Asia-Australia: 浏览器支持 :wrench: 拉取请求步骤设置发展运行... Zakas,YUI 库)

    chosen-yui:选择 JS -- 转换为 YUI

    选择-yui 使用,请确保获取原生 js 文件... all ( '.yui-chosen' ) . each ( function ( ele ) { ele . plug ( Y . Chosen , { no_results_text : "Nothing found dummy." , disable_search_threshold : 4 , max_s

    Java程序员最全面的学习路线图

    - Struts2:一个基于MVC设计模式的Web应用框架。 - Spring:同样基于MVC的框架,提供了一个全面的编程和配置模型。 - iBatis:一个基于Java的持久层框架,简化数据库编程。 - SQL:结构化查询语言,是操作数据库...

    yui_2.9.0前端UI

    YUI 库,全称Yahoo! UI Library。是一组工具和控件,用JavaScript写成, 为的是用DOM 脚本,DHTML和AJAX等技术创建丰富的网页交互式应用程序。 YUI 基于BSD协议,对所有的使用方式都是免费的。YUI 项目包括YUI 库和两...

    YUI-CSS-compressor-PHP-port:YUI CSS压缩器PHP端口

    1.安装与要求 安装 使用将库包含到您的项目中: $ composer.phar require tubalmartin/cssmin 需要Composer的自动加载器文件: &lt;?php require './vendor/autoload.php' ; use tubalmartin\ CssMin \ Minifier ...

    jekyll-minifier:使用yui-compressor和htmlcompressor的Jekyll HTMLXMLCSSJS Minifier

    使用yui-compressor和htmlcompressor将HTML,XML,CSS,JSON和JavaScript内联化并分离为单独的文件。 这是由于先前的压缩器(jekyll-press)不兼容CSS3而创建的,这让我皱了皱眉。 注意:这是我正在学习的第一个...

    yui_2.6.0r2

    2. Event:事件处理是Web开发中的关键部分,YUI的Event模块提供了一套跨浏览器的事件处理机制,可以方便地监听和处理各种用户交互事件。 3. Connection Manager:此组件用于处理Ajax请求,提供了异步与服务器通信的...

    yuicompressor-2.4.8.jar

    1. 安装yuicompressor插件:在Idea的插件市场搜索并安装yuicompressor相关的插件。 2. 配置项目构建:在项目的构建配置中添加yuicompressor的任务,指定输入文件路径、输出文件路径以及压缩级别等参数。 3. 运行构建...

    yuicompressor-yui compressor

    C:\java -jar yuicompressor-2.4.2.jar editor.js -o editor2.js 参数说明: yuicompressor-2.4.2.jar 为工具包jar editor.js为要压缩的js -o editor2.js为压缩完成后的文件名 压缩率: 对resources下js...

    yui-compressor 2.4.6 2011-04-15发布YUI

    yui compressor 2.4.6 发布日期:2011-04-15 用例: java -jar yuicompressor-2.4.6.jar myfile.js -o myfile-min.js

    grunt-yui-compressor-源码.rar

    本文将深入探讨grunt-yui-compressor的源码,解析其工作原理和核心功能。 1. **Grunt与Grunt插件** Grunt是Node.js平台下的一个自动化任务运行器,开发者可以定义一系列的任务,如编译、测试、清理等,通过简单的...

    JavaScript中匿名函数的用法及优缺点详解_.docx

    - 函数式编程:匿名函数是JavaScript函数式编程的核心,例如高阶函数、闭包、柯里化等概念都离不开匿名函数。 5. 匿名函数的优缺点: - 优点:提高代码的封装性,减少全局变量,提高代码的安全性和可维护性,适用...

    js压缩工具.zip

    1. 压缩工具的作用: - 减小文件大小:通过删除空格、换行和不必要的字符,JS压缩工具能显著减小文件体积,加快网页加载速度。 - 代码混淆:压缩工具还可以将变量名和函数名转换为更短的形式,以进一步压缩文件,...

    yui-dl:我的GitHub个人资料的配置文件

    :waving_hand: 嗨,我是@ yui-dl :eyes: 我对人工智能感兴趣 :seedling: 我目前正在学习计算机科学 :revolving_hearts: 我希望在有关TTS,问答和其他有趣主题的深度学习项目中进行合作! :closed_mailbox_with_...

    Dag-YUI-Compressor:基于Nodejs的拖拽上传并压缩css和js文件小工具

    **JavaScript** 是Dag-YUI-Compressor的核心语言,它是一种广泛用于浏览器端和服务器端的编程语言,具有动态类型、原型继承和高度可移植性等特性。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它利用事件...

    wro4j-spring-boot-starter:Spring Boot启动器和wro4j的自动配置(http:alexo.github.iowro4j)

    它汇集了几乎所有现代Web工具:JsHint,CssLint,JsMin,Google Closure压缩器,YUI Compressor,UglifyJs,Dojo Shrinksafe,Css变量支持,JSON压缩,Less,Sass,CoffeeScript等。 介绍 该启动器为您执行以下自动...

Global site tag (gtag.js) - Google Analytics