麻烦老师解释一下
来源:4-4 如何判断节点的包含关系contains
大白前端
2020-03-15 15:46:07
这里面为什么要用while循环 parentNode不是在低版本的时候会报错吗?那报错抛给catch输出fasle 那还怎么兼容低版本的游览器,请老师详细解释一下这个方法的执行过程
1回答
同学你好, 对于你的问题解答如下:
因为老师封装的这个方法,是用来判断a节点是否包含b节点的,由于a不一定是b的父元素,也可能是b的祖先元素,所以使用while循环,可以进行循环实现多次判断。
老师这里提及主要是针对IE6和IE8中,一些游离在DOM树外的文本节点使用parentNode方法就会报错,但是正常的文本节点使用parentNode时不会报错,所以可以起到兼容的作用。
游离在DOM树外的文本节点, 这是一种特殊的情况,老师给同学举个例子,同学简单了解下就可以了,示例:使用replaceChild(node, targetNode);方法用node替换targetNode,替换之后targetNode并没有被销毁,targetNode就变成了游离在DOM树外的文档碎片。
(b=b.parentNode)这是一个赋值操作,把b.parentNode赋值给b,然后判断(b=b.parentNode)这个整体,也就是b的父元素是否存在,如果存在,进入while循环, 判断a==b,如果a与b相等,说明a包含b,返回true,如果a与b不相等,会再次把b.parentNode赋值给b,进入循环进行比较,直至循环到最后抛出异常(null.parentNode不存在),说明a不含b,返回false。 可以结合如下代码注释理解:

这章节老师讲解的几个方法实际工作中用到的比较少,同学不用深究,简单了解下即可,如果真的遇到了要判断元素或者需要兼容低版本浏览器,可以直接使用老师封装好的方法。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题