为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2019-02-16 19:19:24
首先,书中说:要模仿contains()方法则要关注掩码16,这个是因为contains()方法就是检测参考节点是否包含指定节点。而掩码16正是代表了节点的包含关系,因此要关注掩码16。问题:1.为何这里的说“对compareDocumentPosition()的结果执行按位与,以确定参考节点是否包含指定节点”?直接判断该方法返回的掩码数值不就OK了吗,为何要进行的这个按位与操作,也就是最下面的代码段:alert(!!(result &16))
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-02-26
  • 1 回答
  • 0 关注
  • 461 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信