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

一些疑问请大神交我

  function get_previousSibling(n)

{

        var a=n.previousSibling;

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

    {

        a=a.previousSibling;

    }

    return a;

}


 var z=get_previousSibling(x);

     if(z!=null){

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

        document.write(z.nodeName);

        document.write(" = ");

        document.write(z.innerHTML);

    }else{

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

    }

这两段是我写的,我发现当在函数中把循环条件改为while (a.nodeType!=1)时程序的执行是不完整的,也就是说必须满足while (a&&a.nodeType!=1)才能正常运行,我是一个初学者,我下面的想法请大神看一下:第一个条件的意思是当a的类型不是1就跳过继续找查上一个元素,但是如果已经是第一个元素,那么条件就成立了,那么就进入了无限循环,函数也不会给一个返回值,那下面这段代码就无法显示,因为函数无法正常调用。而后面这个条件的意思是两个条件同时满足才行,第一个条件a,当已经是第一个元素再向前查找的时候,a这个元素是没有的,那么a的值为假,也就是说条件为假,不执行。直接返回a的值,这个返回值不存在所以a==null,所以输出最后一句话。如果上一个元素存在,则a的值为真,同时满足a.nodeType!=1,所以返回一个不为null的值。可以进行下面的输出命令。但是照这么理解当上一个元素的nodeType为1的时候,也就是空白,那么这个判断依然为假,不会执行循环内容啊。为什么程序是可以执行的呢,我的理解错在哪里,请大神教我。

正在回答

3 回答

如果是第一个元素。再取上一个元素,var a=n.previousSibling;这步a得到的是文本nodetype=3,

进入循环后,得到最后一个文本后 a=n.previousSibling;这一步a的值就是null了。a为null进入不了while(a)这个条件,直接return a了。就是return了个null值给我们。

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

while (a && a.nodeType != 1) 当 a 是 null 时,如你所说,条件为假,退出循环。

while (a.nodeType != 1) 当 a 是 null 时,a.nodeType 会抛异常,程序运行失败。

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

wengyaqiang

你好,我不太理解你这两句话的意思 ,请问是哪部分的知识呢,在哪里可以找到更深入的讲解?
2015-07-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468045    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

一些疑问请大神交我

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