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

自己理解的时候总觉得是输出空白文本节点,老师求帮助啊

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Document</title>

</head>

<body>

    <ul>

<li id="a">javascript</li>

<li id="b">jquery</li>

<li id="c">html</li>

</ul>

<ul>

<li id="d">CSS3</li>

<li id="e">PHP</li>

<li id="f">java</li>

</ul>

<script>

function get_nextSibling(n){//假设现在已经调用函数,传入参数a

var x=n.nextSibling;//x为a的下一个节点,即空白文本节点

while  ( x&&x.nodeType!=1){//判断条件x非空(x)且(&&)x的节点不是元素节点(x.nodeType!=1)。x是空白节点,非空条件不符,假;x是空白文本节点,不是元素节点条件符合,真。一假一真逻辑与为假,所以x为空白节点是不参加循环,返回空白节点。那这样就不对了?!!!

x=x.nextSibling;

}

return x;

}


var a=document.getElementById("a");

//a为id='a'的元素节点

document.write(a.nodeName+" = "+a.innerHTML+a.nodeValue);


var b=get_nextSibling(a);

if (b!=null) {

document.write("<br />nextSibling:"+b.nodeName+" = "+b.innerHTML);

}else{

document.write("<br />已经是最后一个节点");

}


</script>

</body>

</html>


正在回答

2 回答

x&&x.nodeType!=1 x为空白节点,为true,属于文本节点,文本节点类型 nodeType是3, !=1 ,为true,

什么情况为false呢,(当x为 0 ,-0 ,null,“”,false,undefinen,NaN时,为假,这个是固定的。)

为什么说x 为空节点是true呢,上面说到,空节点属于文本,nodeType为:#text,节点类型是3,他存在了,即为真, 那么何时为假呢, 当x为上面()括号中那句话时,为假。

换一种说法:当x.nextsibiling 的下一兄弟节点,不存在时即为假。

其实,这个问题也卡住了我4.5天,我是一个疑问一个疑问解决的,可能答得不够严谨,望广大兄长指点

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

x为空白文本节点返回是1,那样的话就就能理得通了,两个真,逻辑与为真。空白节点x参与循环后,x为li(id="b")的节点

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

举报

0/150
提交
取消

自己理解的时候总觉得是输出空白文本节点,老师求帮助啊

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