Posted on 2007-09-17 08:36
puras 閱讀(2464)
評論(4) 編輯 收藏 所屬分類:
JavaScript
作者:赫連紫軒(puras)
看了一下午的ExtJS的源碼
在判斷一個節(jié)點是否是另一個節(jié)點的祖先時
發(fā)現有compareDocumentPosition這么個函數
程序里的寫法是:return !!(p.compareDocumentPosition(c) & 16);
開始對為什么要&上個16感到奇怪
因為以前沒有用過compareDocumentPosition
所以也不知道它返回的值是什么
經過查詢資料
以及測試
總結了下compareDocumentPosition返回值的結果
這個方法是用來判斷一個節(jié)點是另一個節(jié)點的后代(10-01010)還是祖先(20-),在前面(4-00100)還是后面(2-0),同一節(jié)點為0(00000)
五位的二進制的各個位置表示不同的值:
第五位:祖先
第四位:后代
第三位:前面
第二位:后面
第一位:本身
相匹配的值為1,反之為0
這樣對應五種情況,值分別是:10100(20), 01010(10), 00100(4), 00010(2), 00000(0)
即然知道了這些值
前面為什么要&上16
就一目了然了
只有第五位為1的時候,才會返回True,證明一個節(jié)點是另一個節(jié)點的祖先.
另外提一點,這個函數在IE中不支持,但文檔上卻寫在在FF中原本為4的結果,在IE中為2,沒看明白是怎么回事.