首页WEB开发脚本代码 → 在线编辑器原理

在线编辑器原理

日期:2006-3-22 23:11:58 出处:其他转载 作者:不详 人气:
看了现在网上流行的在线编辑器,也忍不住想了解一下原理.下了目前应用最广泛的eWebEdit,这个是我见到的最强的开源在线编辑器...研究了一天,终于知道了核心原理.

先解释一下在线编辑器的原理:首先需要IE5.0以上版本的支持.因为IE5.0以上版本有一个编辑状态,可以在一个iframe里面输入文字.然后通过 "document.body.innerHTML"可以获取iframe里面的html代码.这个就是关键。那怎么才能让ifrmae处于编辑状态呢,可以用

function document.onreadystatechange()
{
 HtmlEdit.document.designMode="On";
}

函数实现.

剩下的问题就是就是取得焦点和选种的值.

HtmlEdit.focus();
 var sel = HtmlEdit.document.selection.createRange();

以上2句可以获取选种的植的html代码.到了这里,基本原理搞清楚了,然后我们可以用 insertHTML("str")方法将html字符替换掉选种的值.以下就给出一个简单的demo来演示只有加粗效果的在线编辑器.我这里用了一个textarea来或得iframe里的html值,实际情况,可以将textarea的display设置成false,然后就可以将iframe的内容提交了.

demo代码如下:


<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<script language="javascript"> 
function getIframeData(){ 
 document.form1.test.value=HtmlEdit.document.body.innerHTML; 

function sentIframeData(){ 
 HtmlEdit.document.body.innerHTML=document.form1.test.value; 

function doB(){ 
 HtmlEdit.focus(); 
 var sel = HtmlEdit.document.selection.createRange(); 
 insertHTML("<b>"+sel.text+"</b>"); 

function insertHTML(html) { 
 if (HtmlEdit.document.selection.type.toLowerCase() != "none"){ 
  HtmlEdit.document.selection.clear() ; 
 } 
 HtmlEdit.document.selection.createRange().pasteHTML(html) ;  

function document.onreadystatechange() 

 HtmlEdit.document.designMode="On"; 

</script> 
</head> 

<body> 
<form action="test.asp?act=add" method="post" name="form1"> 
   
<IFRAME id=HtmlEdit style="WIDTH: 100%; HEIGHT: 296px" marginWidth=0 marginHeight=0> 
</IFRAME> 
<textarea name="test" rows="10" id="test" style="width:100%;"></textarea> 
<br> 
<input type="submit" name="Submit" value="提交"> 
<input type="button" value="iframe->textarea" onClick="getIframeData()"> 
<input type="button" value="textarea->iframe" onClick="sentIframeData()"> 
<input type="button" value="B" onClick="doB()"> 
</form> 
</body> 
</html>

关于本站 | 帮 助 | 广告服务 | 版权声明 | 业务合作 | 捐助本站 | 软件发布 | 联系我们
77资源下载 www.77zy.com ©2007-2008 版权所有
备案编号:赣ICP备07002641号  QQ:674648476