亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

講解哪里寫著:“判斷節點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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號