• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >网页编辑器 > 自己打造HTML在线编辑器的实现难点分析

自己打造HTML在线编辑器的实现难点分析

作者: 字体:[增加 减小] 来源:互联网 时间:2017-06-05

本文主要包含html难点,html5难点,html编辑器,html在线编辑器,html5编辑器等相关知识, 希望在学习及工作中可以帮助到您

HTML在线编辑器实际上是什么

其实有好几种实现方式,目前用得最多、兼容性最好的还是iframe方式。

<iframe src="" frameborder="0"></iframe>

只有这个空iframe是不行的,还要用Javascript把它设成可编辑:

iframe.contentWindow.document.designMode = "on";
iframe.contentWindow.document.contentEditable = true;

换而言之,HTML在线编辑器就是一个可编辑的iframe。

加粗、斜体、下划线、加链接等功能如何实现

浏览器已经提供了实现这些功能的接口execCommand:

iframe.contentWindow.document.execCommand(cmd, isDefaultShowUI, value);

这三个参数的意思分别是:

  • cmd:命令文本,有好多,IE的可以看这里,Firefox的可以看这里。
  • isDefaultShowUI:是否默认显示交互界面,比如加链接的时候,可以通过界面填入链接。不过这个参数存在兼容性问题,一般设为false将其禁用,并另外制作交互界面。
  • value:传入的值,某些命令可以省略。

execCommand的问题是,生成的代码可能不标准,比如在IE下,文字加粗用的是b标签而不是strong标签。

交互问题

用户不可能总是在编辑器中输入,比如加粗、插入图片等功能是通过按钮操作的。假设用户要加粗一段选中的文字,当他按了加粗按钮后,选区以及焦点也会跟着跑到那去,因此选区(选中的文字)丢失,操作也就无法完成;同理,插入图片时插入位置也会丢失。

也就是说,要保存最后出现在编辑器中的选区。我采取的方案是,当焦点在编辑器内的时候,用一个定时器(setInterval)定时获取当前选区。选区编程平时很少用,做起来也有很多兼容性问题,主要是参考微软的MSDN(TextRange ControlRange)和Mozilla的MDC(Range Selection)了。

回车问题

在IE下,按回车是换段落,生成<p>,但在Firefox下是换行,生成的是<br>。要解决这个问题,就要监听keydown事件,如果检测到按键是回车,就插入“<p></p>”。

获取标准的代码

如何获取编辑的内容呢?这个问题很简单,只要获取iframe页面body中的innerHTML就可以了:

var content = iframe.contentWindow.document.body.innerHTML;

然而,IE下的innerHTML非常不标准:标签名是大写的,属性没有引号包起来,单标签也没有结束符……即便是Firefox下获取的代码,也有少量瑕疵。这个时候就要用正则表达式对代码进行标准化处理。

总结

不多说了,做一遍HTML编辑器,你就会知道CKEditor是多么强大。

</div>

您可能想查找下面的文章:

  • 自己打造HTML在线编辑器的实现难点分析

相关文章

  • 2017-06-05autogrow 让FCKeditor高度随内容增加的插件
  • 2017-06-05ThinkPHP中FCKeditor编辑器的使用方法
  • 2017-06-05百度编辑器二次开发常用手记整理小结
  • 2017-06-05FCKeditor + SyntaxHighlighter 让代码高亮着色插件
  • 2017-09-27wangEditor使用AJAX异步上传图片
  • 2017-06-05Js FCKeditor的值获取和修改的代码小结
  • 2017-06-05针对PHP环境下Fckeditor编辑器上传图片配置详细教程
  • 2017-06-05fckeditor在ie9中无法弹出对话框的解决方法(弹出层兼容问题)
  • 2017-06-05fckeditor 修改记录添加行距功能插件
  • 2017-06-05SyntaxHighlighter配合CKEditor插件轻松打造代码语法着色

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 让IE8和IE9支持eWebEditor在线编辑器的方法
    • Ewebeditor 不能粘贴或复制的解决方法
    • wangEditor使用AJAX异步上传图片
    • 百度编辑器Ueditor增加字体的修改方法
    • 使用ZeroClipboard解决跨浏览器复制到剪贴板的问题
    • FCKeditor 2.6 编码错误导致修改的内容出现乱码的解决方法
    • FCKEDITOR 的高级功能和常见问题的解决方法
    • FCKeditor 在chrome中不显示问题
    • CKEDITOR二次开发之插件开发方法
    • UEditor 编辑器跨域上传解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有