日期:2014-05-20  浏览次数:20711 次

关于javascript的document.all函数的一点问题
var   child   =   document.all[event.srcElement.getAttribute( "child ",false)];
这句话再ie下是没有问题可以正确的得到结果但是如果再firefox下就出现错误,请各位说说这个为什么或者提个思路也好   谢谢

------解决方案--------------------
要兼容Firefox不是替换一两句代码就能解决的,Firefox是一个很好地支持标准的浏览器。所以,先要对DOM标准有一个全面的了解。同时,要兼顾像IE这样的非标准浏览器,又不得不对一些IE-only的东西有所了解。

楼主的代码应该是写在一个事件处理函数中的,对于事件处理,IE和标准就有很大的不同。IE中存在一个全局对象event,标准不支持这个全局对象event,而是把它当作事件处理函数的参数来传入的。

所以,你首先要修改事件处理函数。如下:

function eventHandler(e) {
if (isIE()) e = event;
}

function isIE() {
// 在这里对浏览器是否是IE进行判断
}


这样,就把事件对象统一为函数的局部变量e。后面要访问事件对象就不再访问event了,而是访问e。

接下来,标准中的事件对象是没有srcElement这个属性的,取而代之的是target属性。而不幸的是,IE不支持target属性。所以,这里又要做处理。

在上面函数的基础上继续修改如下:

function eventHandler(e) {
if (isIE()) e = event;
var targetObj;
if (isIE()) targetObj = e.srcElement;
else targetObj = e.target;
}

这样,又把事件的源统一在targetObj变量中。


接下来的问题就容易解决了,因为IE也支持标准的document.getElementById(),所以,访问元素的方法已经统一了。

这样,得到你的代码中的child,就可以写成:

var child = document.getElementById(targetObj.getAttribute( "child ",false));