换成这样就可以了<ul class="ul2" id="ul2"><li><A HREF="">1</A></li><li><A HREF="">2</A></li><li><A HREF="">3</A></li><li><A HREF="">4</A></li><li><A HREF="">5</A></li><li><A HREF="">6</A></li><li><A HREF="">7</A></li><li><A HREF="">8</A></li><li><A HREF="">9</A></li></ul>
因为ff把标签之间的空白看作了一个text节点
例如
<ul class="ul2" id="ul2">      <li><A HREF="">1</A></li></ul>
实际上是2个节点一个是前面的空格一个是li

解决方案 »

  1.   

    谢谢cloudgamer,你的方法有效,再问一下,如果是以下的形式,怎么做到兼容firefox呢?
    <ul class="ul2" id="ul2">
    <li><A HREF="">1</A></li>
    <li><A HREF="">2</A></li>
    <li><A HREF="">3</A></li>
    <li><A HREF="">4</A></li>
    <li><A HREF="">5</A></li>
    <li><A HREF="">6</A></li>
    <li><A HREF="">7</A></li>
    <li><A HREF="">8</A></li>
    <li><A HREF="">9</A></li>
    </ul>
      

  2.   

    你可以加判断条件把if node.type==3(也就是text节点)给排除掉
      

  3.   

    如上面说的,要判断节点的nodeType,1是元素,3是text。firefox下,换行符、空白符这类都当成是一个text节点。
    IE下,只有input才会把换行符、空白符等当成是text节点,而其它元素都会忽略这类text节点。
      

  4.   

    试试=======
    function ulcolor(){
        obj=document.getElementById("ul2");
        count=obj.childNodes.length;    
        var Flag=0;
         for (i=0;i<count;i++ ){
            node=obj.childNodes[i];
            if(node.type==3) continue;//继续        if(Flag%2==0){//根据Flag取模,如果根据i的话有可能存在text节点
                node.style.background="#DDD";
            }else{
                node.style.background="#EEE";
            }
            Flag++;
        }
    }
      

  5.   

    更正下,借花献佛....function ulcolor(){
        obj=document.getElementById("ul2");
        count=obj.childNodes.length;    
        var Flag=0;
         for (i=0;i<count;i++ ){
            node=obj.childNodes[i];
            if(node.nodeType==3) continue;//继续        if(Flag%2==0){//根据Flag取模,如果根据i的话有可能存在text节点
                node.style.background="#DDD";
            }else{
                node.style.background="#EEE";
            }
            Flag++;
        }
    }