課程
/前端開發
/HTML/CSS
/DOM探索之基礎詳解篇
while((b=b.parentNode)){}是理解成b!==a; b=b.parentNode;!!?
2015-11-14
源自:DOM探索之基礎詳解篇 4-4
正在回答
判斷循環是否需要繼續進行的條件并不一定是b!==a 注意老師的代碼寫在了try catch塊中 這里我寫了個簡單的測試
<!DOCTYPE?html> <html> <head?lang="en"> ????<meta?charset="UTF-8"> ????<title>null?or?exception?test</title> </head> <body> ????<h1?id="header">Test</h1> </body> <script> ????var?node?=?document.getElementById("header"); ?while(true){ ????????try{ ????????????console.log(node?=?node.parentNode); ?}catch(e){ ????????????console.log(e); ?break; ?} ????} ????console.log("-------------end------------"); </script> </html>
控制臺運行結果如下
可以看到HTMLDocument的父節點為null,在老師的代碼中,當【b=HTMLDocument】時,再執行while(? (b=b.parentNode) ),即執行了while(null),此時循環條件不滿足,程序不進入循環向下執行return false
另外通過test的運行結果可以看到對null使用parentNode會拋異常
所以你的問題while((b=b.parentNode)){}應當理解成 在不拋出異常的情況下,if( b || (b!==a) ) ; b=b.parentNode;
Siio 提問者
總覺得a,b寫反了,難道不是while((a=a.parentNode)),再判斷b===a,如果相等則true =>b包含a,,,,不懂,如果老師的是對的,那就是我理解錯了,但是這里理解不了啊,求解答,謝謝
suiye1202
很簡單,(b=b.parentNode)這是一個賦值操作,把b.parentNode賦值給b,而不是判斷語句,先賦值,然后判斷(b=b.parentNode)這個整體,也就是b的父元素是否存在,如果存在,繼續執行下面的判斷:a==b,如果直至循環最后拋出異【null.parentNode不存在】a仍然不等于b,說明a不含b
舉報
要知道前端大牛都是從精通DOM開始的,全面講解DOM的基礎知識
2 回答什么叫屬性法容易被攻破,用功能法?
3 回答獲取二級或三級節點使用childNodes[0]數組法……
3 回答立即調用函數的使用
1 回答domready和jquery中的ready方法是一樣的?
3 回答自調用函數會執行init方法,為什么還增加d.onreadystatechange呢,以下代碼有什么作用,
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-11-18
判斷循環是否需要繼續進行的條件并不一定是b!==a 注意老師的代碼寫在了try catch塊中 這里我寫了個簡單的測試
控制臺運行結果如下
可以看到HTMLDocument的父節點為null,在老師的代碼中,當【b=HTMLDocument】時,再執行while(? (b=b.parentNode) ),即執行了while(null),此時循環條件不滿足,程序不進入循環向下執行return false
另外通過test的運行結果可以看到對null使用parentNode會拋異常
所以你的問題while((b=b.parentNode)){}應當理解成 在不拋出異常的情況下,if( b || (b!==a) ) ; b=b.parentNode;
2016-04-06
總覺得a,b寫反了,難道不是while((a=a.parentNode)),再判斷b===a,如果相等則true =>b包含a,,,,不懂,如果老師的是對的,那就是我理解錯了,但是這里理解不了啊,求解答,謝謝
2015-11-22
很簡單,(b=b.parentNode)這是一個賦值操作,把b.parentNode賦值給b,而不是判斷語句,先賦值,然后判斷(b=b.parentNode)這個整體,也就是b的父元素是否存在,如果存在,繼續執行下面的判斷:a==b,如果直至循環最后拋出異【null.parentNode不存在】a仍然不等于b,說明a不含b