9.11为什么
为什么while(x&&x.nodeType!=1)不能用while(x.nodeType!=1)替换?
求大佬指教
为什么while(x&&x.nodeType!=1)不能用while(x.nodeType!=1)替换?
求大佬指教
2018-05-19
添加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,所以不会输出“最后一个节点的文本”
添加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值
这个答案原理是对的,利用逻辑操作符来进行判定。但是需要注意一点, 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 的情况。
举报