以下的页面在ie下正常
在FF下无法点击上面的链接。然后我 将 alert("Clicked"); 依次放在每句语句中测试
结果卡在了这行。
var initDisplay = node.style.display;但是我不懂怎么改。谁能帮我改一下吗???  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>menu</TITLE>
<SCRIPT language=javascript>
    var req = null;
   if(window.XMLHttpRequest) {
    try {
     req = new XMLHttpRequest();
    } catch(e) {
     req = false;
    }
   // branch for IE/Windows ActiveX version
   } else if(window.ActiveXObject) {
    try {
     req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
     try {
      req = new ActiveXObject("Microsoft.XMLHTTP");
     } catch(e) {
      req = false;
     }
    }
   }
   
    var node; 
    function OnClickCate(What,CateID)
    {
      if(What == null) return
      node = document.getElementById("RssCate" + CateID)
      node = node.nextSibling
      while(node && node.tagName && node.tagName != "DIV")
      {
        node = node.nextSibling
      }
      if(node == null) return
      var initDisplay = node.style.display;
      var RssDIV = document.getElementsByTagName("DIV");
      if(RssDIV != null)
      {
        for(var i = 0;i<RssDIV.length;i++)
        {
          if(RssDIV[i].className == "RssDIV")
          RssDIV[i].style.display = "none";
         }
      }
      if(document.getElementById("RssCate" + CateID).getAttribute("status") != "ok")
      {
        if(req)
        {
           var str = null;
           node.innerHTML = "正在装载数据……";
           node.style.display="block";
         
          // surl ='http://site.com/ajaxmenulist.cgi?CateID='+ CateID+'CateIDxx='+CateIDxx;
           
           surl ='http://site.com//ajaxmenulist.cgi?CateID='+ CateID;
          
           req.open('GET', surl, true);
           req.onreadystatechange = alerttest;
           req.send(null);
        }
        document.getElementById('RssCate'+CateID).setAttribute('status','ok');
      }
      else
      {
        node.style.display=(initDisplay == "block"?"none":"block");
      }
      //node = null;
    }
function alerttest() 
{  
  if (req.readyState == 4) 
   {
      if (req.status == 200) 
       {
           node.innerHTML = req.responseText;
       } 
                                                
   }
}
    </SCRIPT>
<STYLE type=text/css>.CateDIV {
 BORDER-RIGHT: #808080 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ffffff 1px solid; PADDING-LEFT: 2px; FONT-SIZE: 9pt; PADDING-BOTTOM: 2px; BORDER-LEFT: #ffffff 1px solid; WIDTH: 300px; CURSOR: pointer; COLOR: #000000; PADDING-TOP: 3px; BORDER-BOTTOM: #808080 1px solid; HEIGHT: 22px; BACKGROUND-COLOR: #ddeeff; TEXT-ALIGN: left
}
.RssDIV {
 PADDING-RIGHT: 2px; DISPLAY: none; PADDING-LEFT: 2px; FONT-SIZE: 9pt; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; BACKGROUND-COLOR: transparent
}
A {
 FONT-SIZE: 9pt; COLOR: #000099; TEXT-DECORATION: none
}
A:visited {
 COLOR: red
}
A:active {
 COLOR: red
}
A:hover {
 COLOR: #0000ff
}
</STYLE>
<META content="MSHTML 6.00.3790.1830" name=GENERATOR></HEAD>
<BODY 
style="BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: auto; BORDER-LEFT: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: 0px" 
bgColor=#ffffff>
<DIV class=CateDIV id=RssCate1 onclick=OnClickCate(this,1)>Microsoft .NET 
技术站点</DIV>
<DIV class=RssDIV></DIV>
<DIV class=CateDIV id=RssCate2 onclick=OnClickCate(this,2)>ASP.NET 技术站点</DIV>
<DIV class=RssDIV></DIV>
<DIV class=CateDIV id=RssCate3 onclick=OnClickCate(this,3)>Visual C# 技术站点</DIV>
<DIV class=RssDIV></DIV>
<DIV class=CateDIV id=RssCate4 onclick=OnClickCate(this,4)>Visual Basic.NET 
技术站点</DIV>
<DIV class=RssDIV></DIV></BODY></HTML>

解决方案 »

  1.   

    node = node.nextSibling
    在FF中
    换行符也是nextSibling~~
      

  2.   

    谢谢liangws和ifandui不过我是菜鸟。提示了也不懂怎么改。能麻烦你们再具体点吗?
      

  3.   

    试试function getNextSibling(startBrother){
      var endBrother = startBrother.nextSibling;
      while(endBrother.nodeType!=1){
        endBrother = endBrother.nextSibling;
      }
      return endBrother;
    }var req = null;
       if(window.XMLHttpRequest) {
        try {
         req = new XMLHttpRequest();
        } catch(e) {
         req = false;
        }
       // branch for IE/Windows ActiveX version
       } else if(window.ActiveXObject) {
        try {
         req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
         try {
          req = new ActiveXObject("Microsoft.XMLHTTP");
         } catch(e) {
          req = false;
         }
        }
       }
       
        var node; 
        function OnClickCate(What,CateID)
        {
          if(What == null) return
          node = document.getElementById("RssCate" + CateID)
          node = node.nextSibling
          while(node && node.tagName && node.tagName != "DIV")
          {
            node = getNextSibling(node)
          }
          if(node == null) return
          var initDisplay = node.style.display;
          var RssDIV = document.getElementsByTagName("DIV");
          if(RssDIV != null)
          {
            for(var i = 0;i<RssDIV.length;i++)
            {
              if(RssDIV[i].className == "RssDIV")
              RssDIV[i].style.display = "none";
             }
          }
          if(document.getElementById("RssCate" + CateID).getAttribute("status") != "ok")
          {
            if(req)
            {
               var str = null;
               node.innerHTML = "正在装载数据……";
               node.style.display="block";
             
              // surl ='http://site.com/ajaxmenulist.cgi?CateID='+ CateID+'CateIDxx='+CateIDxx;
               
               surl ='http://site.com//ajaxmenulist.cgi?CateID='+ CateID;
              
               req.open('GET', surl, true);
               req.onreadystatechange = alerttest;
               req.send(null);
            }
            document.getElementById('RssCate'+CateID).setAttribute('status','ok');
          }
          else
          {
            node.style.display=(initDisplay == "block"?"none":"block");
          }
          //node = null;
        }
    function alerttest() 
    {  
      if (req.readyState == 4) 
       {
          if (req.status == 200) 
           {
               node.innerHTML = req.responseText;
           } 
                                                    
       }
    }
      

  4.   

    if(What == null) return;
          node = document.getElementById("RssCate" + CateID);
      node = (-[-1,])?this.nextSibling.nextSibling:this.nextSibling;
          if(node == null) return;
          var initDisplay = node.style.display;
          var RssDIV = document.getElementsByTagName("DIV");
    替换一下你之前那段~·把while循环改成下面这句
    node = (-[-1,])?this.nextSibling.nextSibling:this.nextSibling;
      

  5.   

    liangws你好。测试了一下。ff还是出错
    MuBeiBei你的方法FF和IE都出错了
      

  6.   

    liangws 你好总共有两处node = node.nextSibling
    你替换了一处。我也不懂原理 只是又将另一处node = node.nextSibling
    替换成了  node = getNextSibling(node)现在看起来可以运行。谢谢
        
      

  7.   

    我是加了
    function getNextSibling(startBrother){
      var endBrother = startBrother.nextSibling;
      while(endBrother.nodeType!=1){
        endBrother = endBrother.nextSibling;
      }
      return endBrother;
    }
    这个方法。兼容FF的nextSibling
      

  8.   


    谢谢liangws.你的方法是可以兼容的。现在还有个问题。我想绕过ajax缓存。
    因此我按别的帖子里介绍的加了时间戳
    surl ='http://site.com//ajaxmenulist.cgi?CateID='+ CateID;
    改为
    surl ='http://site.com//ajaxmenulist.cgi?CateID='+ CateID+'&time='+new Date().getTime();
    结果好像后台没接受到变量time.这是什么原因?
    改为这样。结果后台可以收到那么时间变量。说明时间变量是的格式是正确没错的。但是如果传递了两个变量
    则后一个时间变量就没传递到后台。????为什么。
    surl ='http://site.com//ajaxmenulist.cgi?CateID='+new Date().getTime();大家帮我看看。谢谢。
      

  9.   

    ajax缓存可以用get才会有缓存的,用post方法解决