飘遥的Blog

C/C++/.NET
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

写UBB编辑器心得--编写浏览器兼容的 JavaScript 代码

Posted on 2007-12-08 20:26  Zzx飘遥  阅读(699)  评论(0编辑  收藏  举报
  最近刚刚完成了一个简单的UBB编辑器,就是本博客评论、留言用的编辑器。编写 javascript 过程中遇到不少浏览器兼容问题,在此记录,以备查阅。
  JavaScript 编写过程中尽量使用ECMAScript标准中的方法、属性。
1.获得文本框中选中的文本:
if(document.selection && document.selection.type == "Text") //IE
{
SelectedStr
= document.selection.createRange().text;
}
else if(window.getSelection && this.TextBox.selectionStart > - 1) //FF
{
var st = this.TextBox.selectionStart;
var ed = this.TextBox.selectionEnd;
SelectedStr
= this.TextBox.value.substring(st, ed) ;
}
2.捕获事件:
menuFontSize.onclick = function(e)
{
var evt
= (window.event || e);
...
3.停止事件冒泡:
f(evt.preventDefault) //IE
{
evt.preventDefault();
evt.stopPropagation();
}
else //FF
{
evt.cancelBubble
= true;
evt.returnValue
= false;
}
4.注册事件:
if(document.attachEvent) //IE
{
document.attachEvent(
"onclick", hideeve);
}
else FF
{
document.addEventListener(
"click", hideeve, false);
}
5.获取iframe中元素的值:
document.getElementById("ZxjayUBBEditor").contentWindow.document.getElementById('txt').value;
6.获取div元素中的文本:
IE支持innerText
FF支持textContent,但FF的textContent连空格、换行都获取了,用正则去掉
$(objId).innerText //IE
$(objId).textContent.replace(/\ \ /g,"").replace(/(^\n+)|(\n+$)/g,"") //FF
7.用面向对象方法写JavaScript程序,思路清晰,冗余代码少,值得提倡。

补充!
后台获得iframe中的元素的值方法为:
在表单提交的时候,执行JavaScript代码,用javascript取得iframe中元素的值并写到隐藏控件,在后台程序Request就行了。

为防止提交不成功,写入的信息丢失,在iframe加载时执行onload()事件,将隐藏控件的值写到iframe控件里。
由于还有Bug尚未解决,不能开源,修正后发布源码。
本文因时间原因,写的比较乱,演示地址:往下看