Mozilla和IE之间最令人恼火的区别就是Web页面中对DOM(Document Object Model,文档对象模型)的处理。大多数函数的工作方式是一样的(至少在DOM Level 2上),但是仍然有很多值得注意的地方。下面给出两个例子。
innerHtml与innerText的使用当使用新的动态内容更新<div>标签时,IE用户有两个选择:可以更新节点的innerText或innerHTML。二者的区别很细微,但是却能在信息的显示方面造成很大的差别,尤其是当要显示的文本是XML格式或者包含HTML实体(比如尖括号或&符号)时。使用innerHTML时假定内容与标签是一起放入的(不管内容是什么)。假设我们试着把以下文本放入一个节点中:
var txt = <b>This is a test</b>
document.getElementById('mydivtext').innerText = txt;
document.getElementById('mydivhtml').innerHTML = txt;<div id="mydivhtml">部分在浏览器中看起来如下:
This is a test<div id="mydivtext">部分看起来则是下面这样:
<b>This is a test</b>基本上,innerText节点对输入字符串进行转义,这样显示在用户面前的就是内容原来的样子。但是Mozilla在DOM节点上不支持innerText属性,所以更好的方法是用户亲自对文本进行转义,并始终使用innerHTML。Sarissa有一个帮助器函数用于实现这一项功能:
document.getElementById('mydivtext').innerHTML =
Sarissa.escape("<b>This is a test</b>")我们将得到同样的结果,如下:
document.getElementById('mydivtext').innerText =
"<b>This is a test</b>")在门户中使用独有名称当某个门户页面由WebLogic Portal(或任何门户)进行解析时,每个portlet均作为完整的Web页面放在HTML文档中,包括<body>标签(有时甚至包括<html>标签)。因此,如果在每个portlet中始终以相同的ID来命名<div>标签(理论上来说,这似乎是使编程标准化的一种良好方法),那么将获得不正确的结果。考虑如果有两个ID为“result_data”的元素,那么解析后的门户页面将会是什么样子。
// Outer portal shell
<html>
// First portlet
...
<div id="result_data"></div>
...
// Second portlet
...
<div id="result_data"></div>
...
</html>现在,进行一次如下的调用: