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

一直捋不顺方法里对X的赋值,为什么要两次赋值呢?在IE中不会变成下两个节点么?

 function get_nextSibling(n){

        var x=n.nextSibling;

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

            x=x.nextSibling;

        }

        return x;

    }


提问者:慕盖茨2022422 2016-09-02 17:51

个回答

  • Airly
    2016-09-12 15:28:46
    已采纳

     function get_nextSibling(n){

            var x=n.nextSibling; ------------> 这里是检测又没有下一个兄弟节点,无则赋null值

    【说明下:1.这个x有可能返回的是空格符即为文本节点,nodeTpye=3;2.这个x有可能是返回null】

            while (x && x.nodeType!=1){ ----------> 当有下一个兄弟节点但他的兄弟节点不是元素节点

                x=x.nextSibling;  -------->则继续读一下个子节点,并赋值给x

            }

            return x;----------->返回第一次调用函数的值(可能是文本节点,nodeType=3,也可能是null)

        }


  • 慕粉3941282
    2016-09-28 11:39:13

    首先,我们是需要确定x为n这个参数的下一个兄弟元素,并且要求它为元素节点,这样可以避免因为浏览器问题导致的空白文本节点,因此,用了while循环,x && x.nodeType!=1,是判断x是否存在,并且type是不是“不是1”

    如果是“不是1”,则执行下面语句,x=x.nextSibling;,目的是跳过“不是1”的空白文本节点


    如果是“是1”,则确定它为元素节点,不需要跳过,返回值为最初赋值的var x=n.nextSibling;,因为经过了while的判断,此时的x.nodeType肯定是1,因而肯定是元素节点

  • qq_Mark单_0
    2016-09-06 08:18:18

    我想我们是被判断节点nodeType是否为1, 如是为元素节点,跳过这句话搞错了,我个人认为这句话是错的,因为我们的n是一个元素节点,所以它的下一个兄弟节点肯定也是一个元素节点,而元素节点的类型是1,while(x&&x.nodeType!=1){x=x.nextSibling;}这句话是当x的nextSibling不是元素节点的话,他就继续往下遍历,直至到最后一个兄弟节点。

  • 慕盖茨2022422
    2016-09-05 09:06:10

    谢谢,我还想再问一下既然X存在且不是元素那为什么还要让它的值为下一个值呢?

  • joyboy0405
    2016-09-02 23:31:38

    这不是第二次赋值,只是覆盖了之前的变量的值。