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

 if(y!=null) 这个是什么意思?

        while (x && x.nodeType!=1)

这里已经判断节点的上个兄弟节点存在了

那么为什么还要 if(y!=null)这句

y!=null是节点存在 还是 不为空节点 的意思

是不是首先判断节点存在再判断节点不是空节点我猜的

正在回答

3 回答

上面x!=null是提供了一个方法,只是确保函数一定运行,后面判断y!=null是判断var x=document.getElementsByTagName("li")[0];有没有前一个节点的,判断的内容不是同一个,我也是弄了两天才弄明白的,首先你要分开看,不要揉在一起想,把每一段为什么要这样写的目的搞清楚了,你就对这个代码有全新认识了。

第一段:

 function get_previousSibling(n){

        var x=n.previousSibling;

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

            x=x.previousSibling;

        }

        return x;

    }

第二段:

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

    document.write(x.nodeName);

    document.write(" = ");

    document.write(x.innerHTML);

第三段:

 var y=get_previousSibling(x);

    

    if(y!=null){

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

        document.write(y.nodeName);

        document.write(" = ");

        document.write(y.innerHTML);

    }else{

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

    }

把每段为什么这样写的目的弄清楚了就OK了

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

再码一段 提问者

懂了。谢了~
2017-03-23 回复 有任何疑惑可以回复我~
#2

再码一段 提问者

我是这样理解的 while (x && x.nodeType!=1),这里前半句x其实就等于x=true,但是这是&&条件,都为真才执行。所以存在一种可能,就是x=false,类型是一。那就直接返回元素节点了。 但是返回的x还可能是不存在的,也就是false 所以还需要单独再判断一次。 表述不准确,大概是这个意思吧?
2017-03-23 回复 有任何疑惑可以回复我~
#3

qq_北海道和风_0 回复 再码一段 提问者

我个人认为,如果x=false,应该也就没有必要判断类型了,个人认为
2017-03-23 回复 有任何疑惑可以回复我~

可以看成是x!=null,保证x一定存在,为了保证代码严谨

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

再码一段 提问者

所以啊就是这样,第二次执行函数时,最后返回给y的x,已经判断x一定存在了,y=x,还判断y!=null。这不是重复了吗?
2017-03-23 回复 有任何疑惑可以回复我~

其实你想多了,你仔细看看if    else这个判断语句,因为var y=get_previousSibling(x);是获得 var x=document.getElementsByTagName("li")[1];的向上一个节点,所以设var x=document.getElementsByTagName("li")[0];已经是第一个节点了,就不可能还有向上节点。就输出else这个语句了,你没有读懂这个代码的意思而已

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

再码一段 提问者

那句while (x && x.nodeType!=1)是什么意思?后半段判断类型不等于一,就继续往上找上一个元素。前半句x判断什么?
2017-03-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

 if(y!=null) 这个是什么意思?

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