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

9.11为什么

为什么while(x&&x.nodeType!=1)不能用while(x.nodeType!=1)替换?

求大佬指教

正在回答

3 回答

  1. 添加while(x.nodeType!=1)后
         因为当y为最后一个<li id="c">html</li>时,然后输出里边内容之后,输完赋给x,再次运行get_nextSibling(n)函数后,x变为最后一个空白节点,它的nodeType为3,然后进行while循环,再次运行x=x.nextSibling;此时输出的x为null,它的nodeType也是!=1的,所以就会无限在while循环,不会出来,不会去赋给y,所以不会输出“最后一个节点的文本”

  2. 添加while(x&&x.nodeType!=1)后

       &&为逻辑操作符,!=为比较操作符,比较操作符等级高于逻辑操作符,所以先进行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语句,然后再次判断,
          a) 如果x为元素节点,循环1)。

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

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

慕虎2691697

厉害啊!
2018-07-20 回复 有任何疑惑可以回复我~
#2

小熊猫33

大佬说得好啊!
2018-10-18 回复 有任何疑惑可以回复我~
#3

FivePen

牛写得很好
2019-01-25 回复 有任何疑惑可以回复我~

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


1 回复 有任何疑惑可以回复我~
x 不是 var x = document.getElementsTagName('li')[0] ?为什么还要再判断它是否为元素节点或空白节点?var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];var x=document.getElementsByTagName("li")[0];
0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468191    人
  • 解答问题       21891    个

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

进入课程

9.11为什么

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