一些疑问请大神交我

来源:9-11 访问兄弟节点

总角晏晏

2015-06-11 19:29

  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的时候,也就是空白,那么这个判断依然为假,不会执行循环内容啊。为什么程序是可以执行的呢,我的理解错在哪里,请大神教我。

写回答 关注

2回答

  • 品茗见南山
    2015-06-25 13:34:39

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

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

  • John001
    2015-06-14 00:48:23

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

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

    wengya...

    你好,我不太理解你这两句话的意思 ,请问是哪部分的知识呢,在哪里可以找到更深入的讲解?

    2015-07-20 12:12:23

    共 1 条回复 >

JavaScript进阶篇

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

468060 学习 · 21891 问题

查看课程

相似问题