jquery中的 jquery.contains(a,b)

 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.
相關文章
相關標籤/搜索