猿问

DOM中的compareDocumentPostion()和contains()的疑惑

首先,
书中说:要模仿contains()方法则要关注掩码16,这个是因为contains()方法就是检测参考节点是否包含指定节点。而掩码16正是代表了节点的包含关系,因此要关注掩码16。

问题:
1.为何这里的说“对compareDocumentPosition()的结果执行按位与,以确定参考节点是否包含指定节点”?直接判断该方法返回的掩码数值不就OK了吗,为何要进行的这个按位与操作,也就是最下面的代码段:
alert(!!(result &16))

慕码人2483693
浏览 464回答 1
1回答

DIEA

其实compareDocumentPostion()返回的是20。因为HTML是包含BODY并且BODY是在HTML的节点后,因此掩码的计算是:16+4=20。至于为什么要使用按位与来做判断其实是: 20 & 16 = 10100 & 10000=10000=16。所以使用按位与就可以判断得出掩码是16。目的就是为了排除其他掩码对16掩码的影响。仅此。还有一点就是:既然是要检测是否是参考节点的后代,返回true时必定是等于20的。因为“给定节点都被参考节点包含了,表明给定节点是参考节点的后代,此时掩码=16,并且给定节点必定是在参考节点后,此时掩码=4”。最后就是,可以不用按位与操作,判定数值也可以,但判定的数值是==20,而不是单纯的16。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答