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

讲解哪里写着:“判断节点nodeType是否为1, 如是为元素节点,跳过。”这点是不是不对啊?

讲解哪里写着:“判断节点nodeType是否为1, 如是为元素节点,跳过。”这点是不是不对啊?

    function get_nextSibling(n){

        var x=n.nextSibling;

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

            x=x.nextSibling;

        }

        return x;

1为元素节点,上面这段代码解读应该是:x存在,且x不等于元素节点的时候x等于下一个节点在进行判断,否则直接返回x。也就是说x为元素节点的时候则返回想x,而不是“跳过”。如果我的理解是对的,那讲解那里就有误导嫌疑了。

正在回答

7 回答

这个答案原理是对的,利用逻辑操作符来进行判定。但是需要注意一点, x=document.getElementsByTagName("li"),得到的结果是一个关于   "li"元素的数组。 这个数组里面并不包含 空白节点。也不会出现 空白节点nodeType 为3。


当x=document.getElementsByTagName("li")[5]的时候,指示的节点是<li id="f">java</li> 里面的li元素。此时,把x带入get_nextSibling(n)函数,进行 x=x.nextSibling;运算,此时变量x会返回一个 null 值。便无法进行下面几部的操作。


因此,利用逻辑操作符&&排除掉 x=null 的情况。


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

&&为逻辑操作符,!=为比较操作符,比较操作符等级高于逻辑操作符,所以先进行x.nodeType!=1,判断此事件是否为真,然后判断x是否存在,如果存在也为真,最后当两个事件同时为真时,则进行while循环,即进行 x=x.nextSibling此语句操作,如果其中一个事件为假,那直接跳出循环,返回。

针对此判断有两种情况:

1)当x为元素节点时,nodeType为1,等于1,所以x.nodeType!=1此事件为假,两事件中其中一个为假,&&判断后为假,则跳出while循环,返回数值。
  2)当x为空白节点时,nodeType为3,不等于1,所以x.nodeType!=1此事件为真,而x为空白节点,也为真,则&&判断后为真,进行while循环,执行x=x.nextSibling语句,然后再次判断,
       如果x为元素节点,循环1)。

      如果运行到最后一个空白节点后,没有下一个同级节点,则x.nextSibling返回null,此时x不存在,事件为假,进而 &&判断为假,则跳出循环,返回null值。                   

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

思进行

可以说一下为什么function get_nextSibling(n)要有个n嘛
2019-02-12 回复 有任何疑惑可以回复我~
#2

幕布斯0251103 回复 思进行

n是形参
2019-03-15 回复 有任何疑惑可以回复我~

跳过指的是  x=x.nextSibling;不在查找下一个了

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

feng520

这里没有错,x是元素节点是x.nodeType=1,while循环不再执行
2018-03-21 回复 有任何疑惑可以回复我~

确实感觉挺误导的,但翻了下其他答案,发现跳过也可以理解为,当x是元素节点时,跳过while循环体,直接输出x。

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

应该是吧“!”这个去了吗


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

日久弥新

搞错了
2018-01-24 回复 有任何疑惑可以回复我~

是这样子的,讲解不对。我也迷糊了好一会

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

li的节点类型是1,他这里判断的应该是节点是li才执行

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

举报

0/150
提交
取消

讲解哪里写着:“判断节点nodeType是否为1, 如是为元素节点,跳过。”这点是不是不对啊?

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