jquery中的 jquery.contains(a,b)


 jquery.contains(a,b) 判斷元素 a中是否包含 b 元素:

源碼:

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 + "" );
}

重點解釋:

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             瀏覽器的私有使用

 

a.compareDocumentPosition( bup )的值只有是 16時,與 16進行 & 運算才為真,其它的值與 16 進行 & 運算 都是 0.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM