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

这里为什么是(x && x.nodeType!=1) ?

function get_nextSibling(n){

        var x=n.nextSibling;

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

            x=x.nextSibling;

        }

        return x;

    }

这里括号里的 &&  x!=1      有必要吗?为什么?

提问者:长路漫浩浩 2017-08-19 16:21

个回答

  • Ace礼拜贰ace
    2017-10-24 10:11:43

    操作符之间的优先级(高到低):

    算术操作符 → 比较操作符 → 逻辑操作符 → "="赋值符号

    所以这里并没有上面所说的x !=1,因为逻辑操作符的优先级是低于比较操作符的,也就是先比较在判断逻辑关系的

  • 破旧的时光机3662066
    2017-09-09 17:50:18

    元素节点nodetype是1 如果不是就跳过 如果是就返回值。

    加上x!=1判断X这个节点是否存在的意思

  • nice编程
    2017-08-19 18:45:48

    楼上回答是对的

  • Charles3477936
    2017-08-19 18:24:31

    因为有的浏览器不会忽略标签之间的空白符(浏览器的JavaScript解析器会把空白符也当节点去处理),空白符相当于字符串,字符串(Text)的nodeType类型是3.

    加上这个x.nodeType!=1判断如果nodeType不是元素(Element)的话,就继续查找到正确的节点。

    <li id="a">javascript</li>   

    <li id="b">jquery</li>   

    <li id="c">html</li>

    像li标签这样换行的话就有些浏览器就会认为有空白符存在,所以把这些标签都挪成1行就没问题了(但是这样代码格式看起来就很难看)。