富文本web在线编辑器实现关键技术pasteHTML-InsertHTML

本文介绍HTML富文本编辑器的实现原理,包括如何利用iframe和contentEditable属性创建可编辑区域,以及通过execCommand和pasteHTML方法实现在光标位置插入内容。
先简要介绍一下HTML富文本编辑器实现原理,如果是非所见即所得,那么用 textarea就可以搞定了,如果要实现所见即所得,尤其是你想插入图片之类的,那么就要考虑用其他方式来替换 textarea了,毕竟textarea不能实现“实时预览”。
目前发布的HTML富文本编辑器比如:FCKeditor, TinyMCE等,实现方法基本上都是基于iframe
,在IE浏览器下的标签有一个 contentEditable属性,设置其值为 true就可以实现对其内部元素编辑了,例如 <div contenteditable="true">123</div> 或者 <p contenteditable="true">dds</p>
按照网上的说法是不支持Firefox的,不过我测试了一下,很不幸,Firefox下也可以用的,而且不仅如此,我测试了一下,连 safari 4.0 , Opera9.6 , google chrome , Firefox 3.10 都可以用,有可能是这些高版本的浏览器才加入的吧?或许早期的Firefox不支持呢? 这个就不知道了,不过,建议那些写技术博客的同仁们,如果自己没有经过测试,最好写清楚了,不要总把别人的博客粘来粘去,即使粘过来,自己也要测试一下!

如果要自己实现一个简单的HTML富文本编辑器,用系统自带的 execCommand(); 来修改,
这是document的一个方法,最先由IE实现,Firefox以及后来的浏览器都支持这个方法了。
尽管如此,这个方法在IE和FF下调用的参数和产生的结果并不一样!
详情请参考execCommand();在IE和FF下的详细参数,

好,切入正题,我们最想做的是什么?
第一步把一个iframe变为可写模式
第二步,在当前光标处插入内容!
有了这两步,就可以实现一个功能不错的编辑器了,我们也无须去考虑复杂的execCommand(); 参数了,
比如你要想把字体加大:只要插入一段 <p style="font-size: 24px;">sddsds</p>就可以了
如果要插入一张图片: <img src="">代码既规范又简洁!


<iframe src="" name="editor" id="editor" style="border: 1px solid rgb(204, 204, 204);" frameborder="0" height="200" width="400"></iframe>

这是一个iframe , 
现在我们用js来修改使得其 document.designMode 为 "On" ,默认为"Off",这样就打开了 iframe 的可写模式

下面借助JQuery来实现,如果您没有JQuery,可能要另做判断了,因为不同的浏览器 要获取 iframe的document并不相同!
<script>
_win=$('#editor')[0].contentWindow; // 我们用 _win 变量代替 iframe window 
_doc=_win.document;                        // 用 _doc 变量代替 iframe的document 
_doc.designMode = 'On';
</script>
测试一下吧!,看看是不是可写了呢?
以上的代码并没有判断不同的浏览器,按照网上流传的说法:对于IE要用 : _doc.contentEditable='true'; 来设置。而我测试了,并不需要,只要上面的代码就可以运行了!
测试浏览器: IE6,7,8 Firefox3.10,Opera9.6, Safari 4.0 , google chrome 好,一般我们在打开可写模式后通常要写点东西进去比如 _doc.write('');


下面的代码在IE6下报告没有权限,不知道是不是我哪里设置的不对,open()和close()函数报告没有权限,其他浏览器都正常,如果FF下没有这两个函数,会显示浏览器一直处于刷新状态而IE不会,所以如果没有办法的话可以试着用代码判断一下:

if( $.browser.msie ){
   _doc.write('<img src="ui/images/info.gif"> <h1>haha</h1>');
}else{
     _doc.open();
     _doc.write('<img src="ui/images/info.gif"> <h1>haha</h1>');
     _doc.close();
}
不知道有没有可能是我的浏览器问题!
$.browser.msie这是Jquery用来检测浏览器是否为IE!

好,下面来实现最最关键的技术:
在当前的光标处插入HTML代码:

非IE等浏览器支持 _doc.execCommand('InsertHtml','',html); 第一个参数为:'InsertHtml' 第二个参数留空,第三个参数为插入的值
而IE不支持这个方法,但是IE支持 _doc.selection.createRange().pasteHTML(html); 方法
所以下面来实现:


function insertHTML( sHtml )
{
           _win.focus(); 
           if(   $.browser.msie ){
                  _doc.selection.createRange().pasteHTML( sHtml ) ;
           }else{ 
                  _doc.execCommand( 'InsertHtml' , '' , sHtml );
           }
           
}
_win.focus(); // 这一句很关键,如果当前的焦点不在 iframe上面,插入的时候就会插到页面里!而不是iframe里面,至于为什么,还没研究明白!因为_doc明明是iframe的!实在想不通!

好,有了这个方法,下面要实现什么就畅通无阻了!

比如插入一个图片: insertHTML( '<img src="example.png">' );
试试吧!

引用:http://hi.baidu.com/smallchicken/blog/item/d11908447d6de18ab3b7dc43.html

另一篇:
在线编辑器的大部分功能使用javascript的execCommand函数都可以实现,但是有个问题在实现任意修改文字大小时使用execCommand('FontSize', false, value)只是7种大小可选,编辑器切换为源代码方式看<font size="7"> </font>的方式。呵呵,太笨的方式了,要改为<font style="font-size: 12px;"></font>方式就好了。那就要用到pasteHTML函数了,可是该方法除ie外其他浏览器都不支持。网上很多文章都抱怨其他的浏览器不支持pasteHTML函数。呵呵,其实不是ie浏览器实现更方便,使用execCommand('insertHTML', false, value)(注意该函数使用'insertHTML'参数ie不支持)。因此判断是ie使用pasteHTML方法非ie使用execCommand('insertHTML', false, value)方法,使用它就可以把指定的文字段替换为你想要的文字了。呵呵有了它不管是插入图片,生成链接(使用execCommand方法直接实现的话就不能带参数了比如你<img>内要带alt, <a>内要带target)你都能玩转了。其他也可以方便实现,比如插入带颜色的横线,插入块</a><div></div><a>带上你喜欢的样式。 
(以上方法我只测试了firefox可行,其他浏览器有待证实)。
内容概要:本文档聚焦于“基于粒子群算法(PSO)的路径规划问题研究”,结合Matlab代码实现,系统阐述了PSO算法在路径规划中的应用原理与实践方法。文档不仅提供了详细的算法实现流程,还拓展介绍了智能优化算法、机器学习、信号处理、电力系统、无人机路径规划等多个前沿科研方向的技术服务内容,涵盖多种复杂优化问题的建模范例与仿真案例。特别强调在科研过程中“借力”的重要性,提倡借助成熟算法与仿真工具推动创新研究。文档附有多个网盘链接,便于读者获取完整的代码、模型及复现资料,支持对高水平论文(如博士/硕士论文、EI/SCI期刊)的算法复现与技术延伸。; 适合人群:具备一定Matlab编程基础,从事自动化、电气工程、控制科学、计算机、通信工程、机械电子等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入学习粒子群算法在路径规划中的建模与实现过程;②掌握多种智能优化算法(如GWO、PSO、DWA等)与机器学习模型在复杂工程问题中的集成应用;③复现高水平学术论文中的算法模型,提升科研创新能力与仿真实践水平。; 阅读建议:建议按照文档结构顺序系统阅读,优先关注与自身研究方向紧密相关的技术模块,结合提供的Matlab代码与Simulink仿真模型进行动手实践,充分利用网盘资源开展算法调试、模型优化与论文复现工作,以实现从理论到应用的有效转化。
内容概要:本文聚焦于光伏并网逆变器与虚拟同步发电机(VSG)在弱电网条件下的正负序阻抗建模与稳定性分析,基于Simulink平台构建详细的系统仿真模型。研究通过扫频法对两类并网系统的序阻抗特性进行辨识与验证,深入探讨其在弱电网环境中的交互作用与稳定裕度差异。重点剖析了光伏逆变器与VSG的控制结构对其阻抗特性的影响,对比两者在正负序阻抗建模中的动态响应特征,揭示其潜在的宽频带振荡风险。研究成果为新能源高比例接入背景下并网系统的稳定性评估、振荡机理分析及控制策略优化提供了理论依据与技术支撑,具有较强的工程应用价值。; 适合人群:具备电力电子、自动控制及电力系统分析基础知识,从事新能源并网、微电网控制、逆变器建模与稳定性研究的研究生、科研人员及电力系统相关领域的工程技术人员。; 使用场景及目标:①掌握光伏并网逆变器与虚拟同步发电机的正负序阻抗建模方法;②理解基于扫频法的阻抗特性辨识与稳定性判据(如奈奎斯特判据)的应用;③深入分析弱电网条件下并网系统的交互稳定性问题;④为相关科研项目、学位论文撰写或工程实践中的模型搭建与仿真验证提供参考与技术支持。; 阅读建议:建议结合文中提供的Simulink仿真模型与代码资源(可通过指定公众号及网盘链接获取),在学习理论的同时动手复现仿真过程,重点关注扫频激励信号的设计、阻抗数据的提取与处理、以及稳定性判据的图形化分析,从而深化对并网系统小信号稳定性的理解,并可进一步拓展至构网型变流器或多机并网等复杂场景的研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值