为了账号安全,请及时绑定邮箱和手机立即绑定

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

function get_nextSibling(n){

        var x=n.nextSibling;

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

            x=x.nextSibling;

        }

        return x;

    }

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

正在回答

6 回答

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

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

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

1 回复 有任何疑惑可以回复我~

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

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

0 回复 有任何疑惑可以回复我~

楼上回答是对的

0 回复 有任何疑惑可以回复我~

因为有的浏览器不会忽略标签之间的空白符(浏览器的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行就没问题了(但是这样代码格式看起来就很难看)。

1 回复 有任何疑惑可以回复我~
#1

长路漫浩浩 提问者

请看完我的问题,我问的是为什么会有“x!=1”。
2017-08-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信