在线html编辑器的实现原理分析

如今,网站开发越来越推动用户体验,越来越多的工具为用户提供方便。在线HTML内容编辑器应该是其中之一,简单的功能可以为用户提供文本样式控制,如文本颜色、字体大小等,而复杂的功能甚至可以提供与Word类似的强大功能。

当今,互联网上的编辑大都有着强大的功能。相对来说,他们也需要大量的配置使用,当然,代码会变得臃肿。如果我们不需要一个强大的编辑器,你可以实现一个自己,因为代码并不复杂。以下是一点个人的体验仅供参考(以HtmlEditor ExtJS作为例)。

1。初始化时加载页面,添加一个iframe(可选)的页面,这里要注意的是页面的状态进行判断,当页面完全加载,操作将被执行以防止错误,无法找到一些元素。

2。打开编辑功能。设置iframe是可编辑的(下面的代码从ExtJS的HtmlEditor):

复制代码代码如下所示:

iframe / /窗口得到

建文:函数(){

返回ext.isie this.iframe.contentwindow:窗口框架{这个iframe的名字};

},

iframe / /文件获取

GetDoc:函数(){

返回ext.isie this.getwin(文件):(这个iframe。contentdocument)| | this.getwin(文件);

},

打开文档对象以编写初始化,与Firefox兼容

doc = this.getdoc();

Doc.open();

doc.write(<—!

体{边界:0;保证金:0;padding: 3px;身高:98%;光标:文本;}

>>);

打开文档对象编辑模式

doc.designmode = ;

Doc.close();



这允许您将内容写入简单编辑器。



3,获取编辑器的内容,代码如下所示:

复制代码代码如下所示:

获取主体对象编辑器

VaR的身体= doc.body doc.documentelement | |;

获取/编辑内容。

无功量= body.innerhtml;

用于处理,如替换某些特殊字符等。

一些代码

返回内容

返回内容;



4。添加样式设置。编辑以上已经实现了基本的功能,但它有点太简单的添加一些简单的方式实现。文档execcommand方法使这个想法成为可能。

复制代码代码如下所示:

命令/统一方法

功能execcmd(CMD,值){

对以上代码的访问

/ /电话execcommand方法执行命令

doc.execcommand(CMD,虚假,undefined值空值);

};

选定的字体为粗体/ ctrl-b.

execcmd('bold);

下划线 / / ctrl-u.

execcmd('underline);

/ /斜体,Ctrl-I

execcmd('italic);

设置文本颜色

execcmd('forecolor ',Ext.isSafari | | ext.isie# +颜色:颜色);

在光标下插入内容

功能insertatcursor(文本){

对以上代码的访问对象

如果(ext.isie){

Win.focus();

VAR r = doc.selection.createrange();

如果(r){

r.collapse(真的);

R.pasteHTML(文本);}

} else if(ext.isgecko | | ext.isopera){

Win.focus();

execcmd('inserthtml,文本);

} else if(ext.issafari){

execcmd('inserttext,文本);

}

}



5。而且,现在我们可以改变风格了。如果编辑工具栏(这是必要的),我们也希望工具栏上的按钮被高亮显示或显示自动根据光标的位置,querycommandstate()方法的文档使这个想法成真。

复制代码代码如下所示:

对与此相反的对象访问

光标是粗体的/

VaR是勇敢= doc.querycommandstate('bold);

如果(大胆){

粗体按钮来更改样式

}

当然,上面的代码可以合并,只有一个。



下划线

doc.querycommandstate('underline);

斜体

doc.querycommandstate('italic);



本文仅对编辑器的实现一个简单的想法了,其中一些可以直接使用。建议朋友们想实现编辑可以参考下ExtJS的HtmlEditor代码,既简单明了,并且可以扩展它。

最后,我想提醒您,我们必须注意浏览器兼容性,不要等到测试结束时测试兼容性。对于如此大量的Javascript代码,调整是相当痛苦的。