JavaScript之-compareDocumentPosition函數

          Posted on 2007-09-17 08:36 puras 閱讀(2465) 評論(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

          主站蜘蛛池模板: 布尔津县| 平湖市| 西平县| 梁平县| 循化| 兰西县| 礼泉县| 柳林县| 伊通| 丰宁| 新宾| 湖南省| 花垣县| 宜兴市| 东乡| 龙山县| 综艺| 大竹县| 抚远县| 措勤县| 长泰县| 灵石县| 罗江县| 淮安市| 高陵县| 屏东市| 丹东市| 进贤县| 慈利县| 囊谦县| 天祝| 敦煌市| 甘孜| 岐山县| 织金县| 云阳县| 唐河县| 襄汾县| 广河县| 秭归县| 阜新市|