最近刚刚完成了一个简单的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尚未解决,不能开源,修正后发布源码。
本文因时间原因,写的比较乱 ,演示地址:往下看
↓