課程
/前端開發(fā)
/HTML/CSS
/DOM探索之基礎(chǔ)詳解篇
while((b=b.parentNode)){}是理解成b!==a; b=b.parentNode;!!?
2015-11-14
源自:DOM探索之基礎(chǔ)詳解篇 4-4
正在回答
判斷循環(huán)是否需要繼續(xù)進(jìn)行的條件并不一定是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>
控制臺運(yùn)行結(jié)果如下
可以看到HTMLDocument的父節(jié)點(diǎn)為null,在老師的代碼中,當(dāng)【b=HTMLDocument】時,再執(zhí)行while(? (b=b.parentNode) ),即執(zhí)行了while(null),此時循環(huán)條件不滿足,程序不進(jìn)入循環(huán)向下執(zhí)行return false
另外通過test的運(yùn)行結(jié)果可以看到對null使用parentNode會拋異常
所以你的問題while((b=b.parentNode)){}應(yīng)當(dāng)理解成 在不拋出異常的情況下,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的父元素是否存在,如果存在,繼續(xù)執(zhí)行下面的判斷:a==b,如果直至循環(huán)最后拋出異【null.parentNode不存在】a仍然不等于b,說明a不含b
舉報
要知道前端大牛都是從精通DOM開始的,全面講解DOM的基礎(chǔ)知識
2 回答什么叫屬性法容易被攻破,用功能法?
3 回答獲取二級或三級節(jié)點(diǎn)使用childNodes[0]數(shù)組法……
3 回答立即調(diào)用函數(shù)的使用
1 回答domready和jquery中的ready方法是一樣的?
3 回答自調(diào)用函數(shù)會執(zhí)行init方法,為什么還增加d.onreadystatechange呢,以下代碼有什么作用,
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2015-11-18
判斷循環(huán)是否需要繼續(xù)進(jìn)行的條件并不一定是b!==a 注意老師的代碼寫在了try catch塊中 這里我寫了個簡單的測試
控制臺運(yùn)行結(jié)果如下
可以看到HTMLDocument的父節(jié)點(diǎn)為null,在老師的代碼中,當(dāng)【b=HTMLDocument】時,再執(zhí)行while(? (b=b.parentNode) ),即執(zhí)行了while(null),此時循環(huán)條件不滿足,程序不進(jìn)入循環(huán)向下執(zhí)行return false
另外通過test的運(yùn)行結(jié)果可以看到對null使用parentNode會拋異常
所以你的問題while((b=b.parentNode)){}應(yīng)當(dāng)理解成 在不拋出異常的情況下,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的父元素是否存在,如果存在,繼續(xù)執(zhí)行下面的判斷:a==b,如果直至循環(huán)最后拋出異【null.parentNode不存在】a仍然不等于b,說明a不含b