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