日期:2014-05-16  浏览次数:20338 次

JS 在IE和FireFox中的区别(三)

(7)form表单提交问题
在jsp页面有一表单,如果表单里有两个按钮,两个按钮有不同事件方法,问题是 点击一个按钮会同时出发两个按钮的事件方法。
解决办法,看jsp页面中的两按钮标签周围是否被包含有<label>标签,如有删除<label>标签即可。
(8)DOM tree的小问题,
我就是想数一下这个table下有几个子nodes,就是body->table->tbody->然后是两个tr, 所以就应该是2啊,可是alert弹出来的是5,这么弄有什么不对吗
<script>
function p(n) {
var tablenode=n.getElementsByTagName("TABLE");
var tbodynode=tablenode[0].firstChild;
var urnode=tbodynode.childNodes;
for (var i=0;i<urnode.length;i++)
alert(urnode[i].nodeName)
alert(urnode.length);
}
</script>
<body>
<table><tbody>
<tr><td>cell 1</td></tr>
<tr><td>cell 2</td></tr>
</tbody></table>
<button onclick="p(document.body)">Press</button>
</body>
在ie中,只出现2个nodeName,都是TR,而在firefox中,出现5个nodeName,分别是: #text
TR #text TR #text

检查后,我将代码中的回车删除,代码如下:

<body>
<table><y><tr><td>cell 1</td></tr><tr><td>cell 2</td></tr></tbody></table>

<button onclick="p(document.body)">Press</button>

</body>

在firefox中,可以看到有2个TR了

?

在结构上,第一个表单和第二个表单不同的是第一个表单的子节点间有回车或者空格,而第二个表单则是一行写到尾。大家都应该想到了吧,IE是将一个完整标签作为一个节点。而 Firefox除了上述的的情况外,也把一个标签的结束符“>”到下一个标签的起始符“<”之间的内容(除注释外,包括任何的文字、空格、回 车、制表符)也算是一个节点了。而且这种节点也有它们自己独特的属性和值--nodeName="#text"。

?

在实际运用中,Firefox在遍历子节点时,在for循环里不妨加上:
if(childNode.nodeName=="#text") continue;
这样,便跳过不需要的操作,使程序运行的更有效率。

?

(9)不同浏览器javascript的getYear年份函数兼容问题

不同浏览器 JavaScript 的getyear年份函数兼容性问题

先举个例子
用 Firefox 上一些网站会看到这样的提示
现在时间是 106年8月8日

而用 ie 浏览器的话就显示正常的 2006年8月8日

原因就是 javascript 的兼容性问题

var today = new date();
var year = today.getYear();

在 Firefox 里面 getYear 返回的是 "当前年份-1900" 的值 (以前都如此)
而微软很NB的做了一个改动:
当today的年份大于等于2000的时候 直接把1900加上了 返回的 200X (而不是10X)
如:today年份是1999 返回99
??? today年份是2000 返回2000

一个简单的解决是加一个判断:
year = (year<1900?(1900+year):year);//此方法适用IE7?? 试了不能用

也有另外的方法
通过 getFullYear getUTCFullYear 去调用
var year = today.getFullYear();//IE7无效 此方法可用并在IE与Firefox都可得到

?

(10)交换两行:

DOM定义了swapNode方法:node1.swapNode(node2) , 但是仅有IE正常使用,Firefox无法工作

可用下面函数来实现(两者都可)

function swapNode(node1,node2)

{

var parent = node1.parentNode;//父节点

var t1 = node1.nextSibling;//两节点的相对位置

var t2 = node2.nextSibling;

if(t1) parent.insertBefore(node2,t1);

else parent.appendChild(node2);

if(t2) parent.insertBefore(node1,t2);

else parent.appendChild(node1);

}

(11)fireEvent在IE中能用但在 Firefox中不能用

??

var obj=document.getElementById(“loaddate”);

?

obj.fireEvent(“onclick”);.?? -------只能在IE可用

?

解决办法,都可用

????? if(document.all)

???????? {

??????????? obj.fireEvent("onclick");

???????? }

????? else

??????? {??? var?? evtObj?? =?? document.createEvent('MouseEvents');???

??????????? evtObj.initMouseEvent(?? "click",?? true,?? true,?? document.defaultView,?? 1,?? 0,?? 0,?? 0,?? 0,?? false,?? false,?? true,?? false,?? 0,?? null);???

??????????? obj.dispatchEvent(?? evtObj?? );

??? }

(12)Firefox不支持innerText,改成innerHTML就可以了

(13)FireFox中类似 obj.style.height = imgObj.height 的语句无效
解决方法:
obj.style.height = imgObj.height + 'px';

?

(14)有关table处理问题

1):用集合获得表格对象的方法:tabobj.rows[0].cells[0];

2):修改对象的背景图片方法:

???? obj.style.backgroundImage="url(图片路径)";

3):获得当前对象的下一个结点

?? obj.firstChild.firstChild.nodeValue

??? 不能用obj.children[0];有待继续研究。

4)table中的bordercolor在Firefox中不能实现功能,必须用CSS实现

(16) iframe两者浏览器都可实现:

<iframe src="child1.html" name="ifm1" id="ifm1"

??? allowtransparency="true" align="default" marginwidth="0