JavaScript之-compareDocumentPosition函数
看了一下午的ExtJS的源码
在判断一个节点是否是另一个节点的祖先时
发现有compareDocumentPosition这么个函数
程序里的写法是:return !!(p.compareDocumentPosition(c) & 16);
开始对为什么要&上个16感到奇怪
因为以前没有用过compareDocumentPosition
所以也不知道它返回的值是什么
经过查询资料
以及测试
总结了下compareDocumentPosition返回值的结果
这个方法是用来判断一个节点是另一个节点的后代(10-01010)还是祖先(20-),在前面(4-00100)还是后面(2-0),同一节点为0(00000)
五位的二进制的各个位置表示不同的值:
第五位:祖先
第四位:后代
第三位:前面
第二位:后面
第一位:本身
相匹配的值为1,反之为0
这样对应五种情况,值分别是:10100(20), 01010(10), 00100(4), 00010(2), 00000(0)
即然知道了这些值
前面为什么要&上16
就一目了然了
只有第五位为1的时候,才会返回True,证明一个节点是另一个节点的祖先.
另外提一点,这个函数在IE中不支持,但文档上却写在在FF中原本为4的结果,在IE中为2,没看明白是怎么回事.
Feedback
# re: JavaScript之-compareDocumentPosition函数 回复 更多评论
2007-09-17 09:53 by 千里冰封
就是因为两者浏览器对JS的支持度不太一样,才会这样
# re: JavaScript之-compareDocumentPosition函数 回复 更多评论
2007-09-18 08:32 by 赫连紫軒(puras)
@千里冰封
嗯.我知道是因为两个浏览器的不同造成的值不同
我没明白的为什么我测试的时候,IE里是不支持这个方法
而在W3C上又给出了两者的值......
# re: JavaScript之-compareDocumentPosition函数 回复 更多评论
2008-04-21 14:25 by llinzzi
我也看过w3c上的那个文章,他们是指在操作xml的时候,ff下,xml的操作可以用在html的dom上,ie下是分开的,是用activeX来创建的xml操作对象,那个对象是支持的该方法的 :)
# re: JavaScript之-compareDocumentPosition函数 回复 更多评论
2008-04-21 14:27 by llinzzi
比如IE下的XMLDOC对象 ie下不用xml对象操作的话 可以用contains方法
在判断一个节点是否是另一个节点的祖先时
发现有compareDocumentPosition这么个函数
程序里的写法是:return !!(p.compareDocumentPosition(c) & 16);
开始对为什么要&上个16感到奇怪
因为以前没有用过compareDocumentPosition
所以也不知道它返回的值是什么
经过查询资料
以及测试
总结了下compareDocumentPosition返回值的结果
这个方法是用来判断一个节点是另一个节点的后代(10-01010)还是祖先(20-),在前面(4-00100)还是后面(2-0),同一节点为0(00000)
五位的二进制的各个位置表示不同的值:
第五位:祖先
第四位:后代
第三位:前面
第二位:后面
第一位:本身
相匹配的值为1,反之为0
这样对应五种情况,值分别是:10100(20), 01010(10), 00100(4), 00010(2), 00000(0)
即然知道了这些值
前面为什么要&上16
就一目了然了
只有第五位为1的时候,才会返回True,证明一个节点是另一个节点的祖先.
另外提一点,这个函数在IE中不支持,但文档上却写在在FF中原本为4的结果,在IE中为2,没看明白是怎么回事.
Feedback
# re: JavaScript之-compareDocumentPosition函数 回复 更多评论
2007-09-17 09:53 by 千里冰封
就是因为两者浏览器对JS的支持度不太一样,才会这样
# re: JavaScript之-compareDocumentPosition函数 回复 更多评论
2007-09-18 08:32 by 赫连紫軒(puras)
@千里冰封
嗯.我知道是因为两个浏览器的不同造成的值不同
我没明白的为什么我测试的时候,IE里是不支持这个方法
而在W3C上又给出了两者的值......
# re: JavaScript之-compareDocumentPosition函数 回复 更多评论
2008-04-21 14:25 by llinzzi
我也看过w3c上的那个文章,他们是指在操作xml的时候,ff下,xml的操作可以用在html的dom上,ie下是分开的,是用activeX来创建的xml操作对象,那个对象是支持的该方法的 :)
# re: JavaScript之-compareDocumentPosition函数 回复 更多评论
2008-04-21 14:27 by llinzzi
比如IE下的XMLDOC对象 ie下不用xml对象操作的话 可以用contains方法
加支付宝好友偷能量挖...