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

解决方案 »

  1.   

    下面是代码:
    var child = document.all[event.srcElement.getAttribute("child",false)];
    alert("test");
    if (null != child){
    //alert(child.className);
    if(child.className == "expanded")
    {
    event.srcElement.src="images/plus.gif"
    child.className = "collapsed";
    return;
    }
    if(child.className == "collapsed")
    {
    event.srcElement.src="images/minus.gif"
    child.className = "expanded";
    return;
    }取出child属性,下面去比对,结果ie是可以继续下执行,但是firefox不可以向下面执行拉,页就是不会弹出对话框test谢谢关注
      

  2.   

    放弃firefox 我说了 算吗 其实我早打算放弃了 
    dom 什么呢 
    可以说明白一点吗 谢谢
      

  3.   

    楼主的方法太老套了,document.all..... 都已经是出土文物了。
    用document.getElementById()吧。如果在3、4年前,你完全可以说,放弃firefox,但现在你不能了。
    不仅是firefox,还有opera,safari....
    放弃“IE only”的东西,走标准化的路线,才是正道。
      

  4.   

    以前没有碰到过这样的问题,请问
    var child = document.all[event.srcElement.getAttribute("child",false)];
    这句话如果我用document.getElementById()来替换改怎么写呢  谢谢了
      

  5.   

    要兼容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));