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

来源:9-11 访问兄弟节点

weibo_张家泳Gawin_0

2017-11-01 10:02

讲解哪里写着:“判断节点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回答

  • qq_差不多先生_1
    2018-06-22 14:42:42

    这个答案原理是对的,利用逻辑操作符来进行判定。但是需要注意一点, 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 的情况。


  • web_bin
    2018-05-20 17:44:14

    &&为逻辑操作符,!=为比较操作符,比较操作符等级高于逻辑操作符,所以先进行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值。                   

    幕布斯025... 回复思进行

    n是形参

    2019-03-15 20:46:14

    共 2 条回复 >

  • feng520
    2018-03-21 19:58:04

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

    feng52...

    这里没有错,x是元素节点是x.nodeType=1,while循环不再执行

    2018-03-21 19:59:50

    共 1 条回复 >

  • 阿宅娘
    2018-03-21 16:16:14

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

  • 日久弥新
    2018-01-24 15:23:37

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


    日久弥新

    搞错了

    2018-01-24 15:25:26

    共 1 条回复 >

  • 惊悚的窝窝头
    2017-11-03 16:43:55

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

  • 慕九州7387338
    2017-11-01 16:28:29

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

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

467398 学习 · 21877 问题

查看课程

相似问题