慕粉3988711
2016-10-30 03:40
<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?
答案是: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的父节点。
刚刚又去试了下关键点在这:
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。
DOM探索之基础详解篇
98372 学习 · 238 问题
相似问题