为了账号安全,请及时绑定邮箱和手机立即绑定

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

<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>

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

正在回答

3 回答

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  所以下边结果是已经是第一个节点了

    }


0 回复 有任何疑惑可以回复我~

console.log(y);  没看懂呢

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

0 回复 有任何疑惑可以回复我~

报错了?

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自然就报错了。

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信