问答详情
源自:9-11 访问兄弟节点

为什么 申明了x,而且给x赋值了,var x=n.nextSibling; 在while循环中又赋值一次,岂不是为兄弟节点的兄弟节点了??

为什么   申明了x,而且给x赋值了,var x=n.nextSibling;  在while循环中又赋值一次,岂不是为兄弟节点的兄弟节点了??难道我理解错了?

    function get_nextSibling(n){
        var x=n.nextSibling;
        while (x && x.nodeType!=1){
           x=x.nextSibling;
        }
        return x;
    }


提问者:DaWang 2015-08-13 17:04

个回答

  • Polly的遮阳伞
    2015-09-02 14:39:30

    在while之前是为了获得下一个兄弟节点,【因为Internet Explorer 会忽略节点间生成的空白文本节点(例如,换行符号),而其它浏览器不会忽略。】并不知道是元素节点,还是文本节点,所以在while循环中只筛选出了元素节点,只是排除了不是元素节点的情况,并没有再次给x赋值。

  • qq_仰望摩天轮_0
    2015-08-18 09:32:31

    这里在函数里 var x,代表x是局部变量,只在函数体内部有效。出了函数体外就不起作用了。或者你先这样理解

    把函数体里的x换成其他字母。

    function get_nextSibling(n){

            var a=n.nextSibling;

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

               a=a.nextSibling;

            }

            return a;

        }

    只是想说,函数里的x因为在函数体内var了,所以和函数体外的x是完全不同的变量。你可以看一下全局变量和局部变量的内容。

    PS。本人也是菜鸟,说的不对,敬请谅解。

    加油