问答详情
源自:9-11 访问兄弟节点

输出第一个元素的前一个元素,没有提示?

<script type="text/javascript">

   

    function get_previousSibling(n){

        var y=n.previousSibling;

        document.write(y.nodeType);

        while (y && y.nodeType!=1){

            y=y.previousSibling;

            document.write(y.nodeType);

        }

        return y;

    }

    var x=document.getElementsByTagName("li")[0];

    //document.write(x.nodeName);

    //document.write(" = ");

    //document.write(x.innerHTML);

    

    var y=get_previousSibling(x);

    

    if(y!=null){

        document.write("<br />nextsibling: ");

        document.write(y.nodeName);

        document.write(" = ");

        document.write(y.innerHTML);

    }else{

      document.write("<br>已经是第一个节点");      

    }


</script>

为啥没执行“这是第一个元素”的输出?

提问者:慕慕0159803 2018-05-21 21:44

个回答

  • 慕粉0913873
    2018-06-27 12:01:11

    function get_previousSibling(n){

            var y=n.previousSibling;//这里获取是前面的空格

            document.write(y.nodeType);//所以这个会打印一个3

            while (y && y.nodeType!=1){

                y=y.previousSibling;//在获取空格前边的节点,已经没有了,会返回null

                document.write(y.nodeType);//所以这里便是null,已经不是节点了  所以不存在节点类型的,

            }

            return y;//等于y是null  所以下边结果是已经是第一个节点了

        }


  • 慕慕0159803
    2018-05-22 20:03:19

    console.log(y);  没看懂呢

    但是我发现:我加的这   document.write(y.nodeType);  一行打印y类型的语句,没有运行;另外把这句注释里就正常了哎,什么情况呢?

  • 纸丶两面白
    2018-05-22 00:46:05

    报错了?

    while (y && y.nodeType!=1){            
        y=y.previousSibling;            
        console.log(y);  // 加上这行看看这个y是什么
        document.write(y.nodeType);        
    }

    如果你的li前面已经没有元素了,应该会报错才对。第一个li的previousSibling是#text,#text的previousSibling是null,null.nodeType自然就报错了。

    知道问题原因了,解决办法就自己想想吧~