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