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

YUI2 RTE分析-2:execCommand兼容性

阅读更多

承续,YUI2 RTE分析-1:核心函数 ,分析一下yui editor如何解决最头疼的execCommand兼容性问题,RTE的主要作用之一就是用户可以对自己输入的内容进行格式调整,而这一功能主要是通过浏览器提供的exeCommand来实现的,但是这个函数各个浏览器间的运行效果差异很大,详见:execCommand Compatibility    ,yui editor很多格式化功能实际上没有调用 execCommand的对应参数,而是通过自己产生包装标签来实现的。


解释:


格式化的关键在于合适的标签Tag与css的生成。


对于不直接采用execCommand处理格式化的情景,yui对应着的就是 _createCurrentElement 函数,参数为 (tagName,cssStyle) ,解释如下:


1。如果当前没有选中内容则在当前位置插入新dom结点,结点标签为tagName,css为cssStyle,并定位到新结点内,用户再输入即采用新格式。

2。如果当前有选中,则把当前选中元素包裹在新生成的结点中,该结点标签为tagName,css为cssStyle,当前选中内容立即采用新格式。


则完成了格式化的任务。


演示:


rte@yui3 createCurrentElement 演示@google code


输入合适的tagName以及json 格式的css描述,点击按钮进行相应的格式操作。


实现原理:


仔细观察execCommand Compatibility  可见,有两条参数情景各个浏览器还是达成了一致,即fontname与insertimage,yui editor即是利用了这点实现了上述1,2(若完全不用execCommand,又是要涉及range,尚不知如何实现)


1。若没有选中内容,调用 execCommand('insertimage', false, 'yui-tmp-img') 在当前位置插入 css class为yui-tmp-img的图片结点,然后再将该图片结点替换为格式要求的标签为tagName,css为cssStyle的新建节点。



2.若选中内容,调用 execCommand('fontname', false, 'yui-tmp') 生成 <span class="yui-tmp">选择内容</span> 结点替换当前选择内容。


注意: 这点非常巧妙,特别是对应跨越结点的内容选择,浏览器可以生成合适的包裹标签,而避免了自己分析超级复杂的跨边界选择问题。


最后同1:再将该span结点替换为格式要求的标签为tagName,css为cssStyle的新建节点,并把新建结点的innerHtml赋值为span结点的innerHTML。






1
1
分享到:
评论

相关推荐

    yuicompressor-maven-plugin

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

    eclipse yuicompressor-maven-plugin

    ### 2. YUI Compressor YUI Compressor是由雅虎开发的一款开源工具,用于压缩JavaScript和CSS代码,通过删除空格、注释和不必要的字符,从而减小文件大小,提升网页加载速度。它支持两种压缩模式:混淆(minify)和...

    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_2.9.0前端UI

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

    使用YUICompressor和DOS批处理脚本压缩JavaScript和CSS整理.pdf

    ### 使用YUICompressor与DOS批处理脚本压缩JavaScript和CSS详解 #### 一、引言 在现代Web开发中,JavaScript与CSS文件作为网页的重要组成部分,它们的加载速度直接影响着用户体验及网站的整体性能。当文件过大时,...

    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

    Ajax光盘资料

    - 挑战:浏览器兼容性问题,需要处理异步请求的复杂性,可能破坏SEO(搜索引擎优化)。 5. **jQuery与Ajax** jQuery简化了Ajax的使用,提供了$.ajax、$.get、$.post等方法,使得开发更高效。同时,它处理了浏览器...

    yui-yuidoc-yuidoc-50-529-gc631758

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

    EasyUI与EXTJS的对比分析.pdf

    EXTJS则是一个更为全面且强大的前端框架,它基于YUI库,不仅提供了丰富的UI组件,还包含了数据管理、图表、布局等功能。EXTJS的优点在于: - 功能强大:EXTJS的组件功能强大,可以实现复杂的数据展示和交互,适合...

    yuicompressor-2.4.8.jar

    2.4.8是其一个稳定版本,提供了更可靠的压缩效果和兼容性。 yuicompressor的核心功能在于代码压缩。对于JavaScript文件,它通过消除不必要的字符,如换行符、空格和注释,以及通过短变量名替换长变量名,达到减小...

    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...

    js压缩工具.zip

    - YUI Compressor:雅虎开发的工具,可以压缩JavaScript和CSS,具有较高的压缩率。 - Minify:一个PHP库,用于合并和压缩JavaScript和CSS。 3. 压缩过程: - 预处理:移除注释、空格和换行。 - 代码优化:如...

    js 压缩YUI

    雅虎的东西,简单的操作很好用 使用例子:java -jar D:\yuicompressor\yuicompressor\yuicompressor.jar E:\js\all.js -o E:\wap\wap2\js\all-min.js --charset utf-8 当然要装jdk了 不然就玩完了

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

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

    JSCSS压缩工具 YUI Compressor.7z

    2. **混淆变量名**:对于JavaScript代码,YUI Compressor 还可以将变量名转换为更短的形式,进一步压缩文件大小,但不影响代码执行。 3. **CSS优化**:在处理CSS时,YUI Compressor 会合并重复的属性值,优化选择器...

    generator-yui3:YUI3项目脚手架

    (尚未稳定)YUI3项目的Yeoman发电机安装sudo npm install -g generator-yui3建立专案yo yui3 awesomeProject.generator-yui3.json 允许您覆盖默认配置{ "project" : "awesomeProject", "lang" : ["fr", "en", "es",...

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

    该端口包含原始YUI压缩器中未提供的修复和功能。 目录 1.安装与要求 安装 使用将库包含到您的项目中: $ composer.phar require tubalmartin/cssmin 需要Composer的自动加载器文件: &lt;?php require './vendor...

    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

    yui_2.6.0r2

    此外,YUI一直致力于跨浏览器的兼容性,确保在多种主流浏览器上都能良好运行,包括IE6、Firefox、Chrome、Safari和Opera等。 总结来说,YUI 2.6.0r2是YUI库的重要里程碑,它提供的强大组件和工具集极大地推动了Web...

Global site tag (gtag.js) - Google Analytics