有几处代码不懂 求教~~

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

叛逆春

2015-08-06 13:23

<script type="text/javascript">

    function get_nextSibling(n){

        var x=n.nextSibling;

        while (x && x.nodeType!=1){ // 第一处 为什么x的节点类型不为1的元素节点就能作为n的兄弟节点 

            x=x.nextSibling;// 第二处 x不是已经定义为n的下个节点了么,为什么又要重新赋值一次,重新赋值后的x不就是n的下下一个节点了么

        }

        return x;

    }


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

    document.write(x.nodeName);

    document.write(" = ");

    document.write(x.innerHTML);

    

    var y=get_nextSibling(x);

    

    if(y!=null){  //上面不是已经在(x && x.nodeType!=1)约束了n的下一个节点要存在么 为什么又要重新约束一次?

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

        document.write(y.nodeName);

        document.write(" = ");

        document.write(y.innerHTML);

    }else{

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

    }


写回答 关注

4回答

  • Y习惯你管
    2015-09-18 16:00:34

    第三处。IF可以省略。为了完整性。给上一个IF判断。如果null即后面没有元素。就输出 已经是最后一个节点!。

    就当作是为了输出一个  已经是最后一个节点!。 吧!

  • Y习惯你管
    2015-09-18 15:58:52

    第二处,并不是重复赋值。。而是不太好理解。function中的var仅作用与函数内。所以此X非彼X。。

  • Y习惯你管
    2015-09-18 15:57:10

     第一处 为什么x的节点类型不为1的元素节点就能作为n的兄弟节点 

        如果不等于1,即是把空白区域算成一个节点了。我们要忽略这个节点。所以它必须等于1,也就是元素节点。这是我们需要的东西。那不等于1呢? 取它后面的一个节点不就行了。  那要是等于1,也就是没有算上空白节点。直接获取自己后面的下一个节点就行了。

  • LeonardGrimm
    2015-08-08 17:24:40

    function get_nextSibling(n){

            var x=n.nextSibling;

            while (x && x.nodeType!=1){ // 第一处 为什么x的节点类型不为1的元素节点就能作为n的兄弟节点 

    //此处判断为X节点类型不为1时的节点不能作为N的兄弟节点,进而运行后面的X=X.nextSibling;去循环下一个节点能否作为N的兄弟节点,如果为1的话就不会运行while里的程序,直接去运行 return x 了;

                x=x.nextSibling;// 第二处 x不是已经定义为n的下个节点了么,为什么又要重新赋值一次,重新赋值后的x不就是n的下下一个节点了么

            //    即上提及的循环下一个节点;

            }

            return x;

        }

    //第三点没相通,推测是判断此节点不是最后一个节点,出于浏览器兼容问题做出的约束;

    初学,如有错误抱歉。


    叛逆春

    你这是完全忽略我问的问题 自己解释啊 亲...

    2015-08-10 09:22:30

    共 1 条回复 >

JavaScript进阶篇

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

468194 学习 · 21891 问题

查看课程

相似问题