parentNode這個屬性找到的父節(jié)點(diǎn)是哪個節(jié)點(diǎn)?
<div id="a-node">
? ? ???? <div id="b-node">
? ? ? ? ???????? <div id="c-node">子節(jié)點(diǎn)內(nèi)容部分</div>
? ? ? ? ??</div>
? ? </div>
將代碼改成如上述代碼所示? alert(fixContains(aNode,cNode));答案也是true,那么此處的c-node下的parentNode指代的是a-Node?還是b-Node?
2016-10-30
答案是:a-Node。
解釋如下:在自定義的fixContains函數(shù)中,賦值給變量的分別是aNode和cNode,與原來的區(qū)別是不再是cNode直接的父節(jié)點(diǎn),而是父節(jié)點(diǎn)b-Node的父節(jié)點(diǎn)a-Node。在fixContains函數(shù)中通過wihle循環(huán),直接將aNode和cNode,進(jìn)行了是否父類關(guān)系的判斷,結(jié)果alert的結(jié)果顯示是true,說明在此處c-node的parentNode指代的是a-Node,而不是b-Node。雖然b-Node本身也是c-node的父節(jié)點(diǎn)。
2016-10-30
剛剛又去試了下關(guān)鍵點(diǎn)在這:
while ((b = b.parentNode)){
? ? ? ? ? ?if (b === a){
? ? ? ? ? ? ? ?return true;
? ? ? ? ? ?}
? ? ? ?}
<div id="a-node">
? ? ???? <div id="b-node">
? ? ? ? ???????? <div id="c-node">子節(jié)點(diǎn)內(nèi)容部分</div>
? ? ? ? ??</div>
? ? </div>
在while循環(huán)中(①b = b.parentNode)將b的parentNode賦給b在和a進(jìn)行比較,若a!==b跳過if繼續(xù)執(zhí)行while循環(huán)此時b=b.parentNode相當(dāng)于①中的b.parentNode.parentNode,這時符合條件,進(jìn)入if并返回true,如果再不合適就會變成b.parentNode.parentNode.parentNode,直到找到對應(yīng)值或者null,如果為null,則返回false。