JavaScript之-compareDocumentPosition函数

Posted on 2007-09-17 08:36 puras 阅读(2439) 评论(4)  编辑  收藏 所属分类: JavaScript

作者:赫连紫軒(puras)

看了一下午的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方法

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 

posts - 47, comments - 124, trackbacks - 0, articles - 0

Copyright © puras