zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    Apache Struts 2.3.12 GA?
    emacs配置《转》
    vim配置
    vim插件
    git使用
    ubuntu常用设置
    Eclipse如何关联已经clone的Git项目
    变量名、对象引用(指针)与堆栈
    Web项目转换为groovy项目的步骤
    日志 20071208(SvcUtil.exe,高并发网站架构)
  • 原文地址:https://www.cnblogs.com/huaan011/p/7153836.html
Copyright © 2011-2022 走看看