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