jquery.contains(a,b) 判斷元素 a中是否包含 b 元素:node
源碼:jquery
contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 )); } : function( a, b ) { if ( b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } } return false; };
isNative:瀏覽器
rnative = /^[^{]+\{\s*\[native code/, function isNative( fn ) { return rnative.test( fn + "" ); }
重點解釋:spa
a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
IE中是使用的 adown.contains( bup )來檢驗。
NodeA.compareDocumentPosition(NodeB) 返回的結果,包含你能夠獲得的信息。
Bits Number Meaning
000000 0 元素一致
000001 1 節點在不一樣的文檔(或者一個在文檔以外)
000010 2 節點 B 在節點 A 以前
000100 4 節點 A 在節點 B 以前
001000 8 節點 B 包含節點 A
010000 16 節點 A 包含節點 B
100000 32 瀏覽器的私有使用code
a.compareDocumentPosition( bup )的值只有是 16時,與 16進行 & 運算才爲真,其它的值與 16 進行 & 運算 都是 0.