在IE中使用内置的contains 来判断节点是否在某容器中
ex:
document.documentElement.contains(document.body) === true
document.body.contains(document.documentElement) === false
但在FF下没有此属性,为了兼容FF推出compareDocumentPosition这个东西但这个只返回一个数值:
A.compareDocumentPosition(B)
详细数据列表( 出自url:http://apps.hi.baidu.com/share/detail/31239672 ):
Bits Number Meaning
000000 0 元素一致
000001 1 节点在不同的文档(或者一个在文档之外)
000010 2 节点 B 在节点 A 之前
000100 4 节点 A 在节点 B 之前
001000 8 节点 B 包含节点 A
010000 16 节点 A 包含节点 B
100000 32 浏览器的私有使用
ex:
1.
1>document.documentElement.compareDocumentPosition(document.body) === 20
2>document.body.compareDocumentPosition(document.documentElement) === 10
解释下:
1>body在html里面所以有16,然后html在body前面(我理解的是<html>..<body>)所以有4,故加起来就是20.
2>html在body里面所以有8,然后body在html后面(我理解的是<html>..<body>)所以有2,故加起来就是10.
2.
1>document.body.compareDocumentPosition(document.getElementsByTagName("head")[0]) === 2
2>document.getElementsByTagName("head")[0].compareDocumentPosition(document.body) === 4
解释下:
head和body没有包含关系(理解为同一级别)所以是0,而head在body的前面,所以有个2,故加起来就是2.
head和body没有包含关系(理解为同一级别)所以是0,而body在head的后面,所以就是4,故加起来就是4.