zoukankan      html  css  js  c++  java
  • sizzle分析记录:属性选择器

    源码部分

    通过Sizzle.attr匹配出值

    然后通过表达式刷选计算

    "ATTR": function( name, operator, check ) {
        return function( elem ) {
            var result = Sizzle.attr( elem, name );
    
            if ( result == null ) {
                return operator === "!=";
            }
            if ( !operator ) {
                return true;
            }
    
            result += "";
    
            return operator === "=" ? result === check :
                operator === "!=" ? result !== check :
                operator === "^=" ? check && result.indexOf( check ) === 0 :
                operator === "*=" ? check && result.indexOf( check ) > -1 :
                operator === "$=" ? check && result.slice( -check.length ) === check :
                operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
                operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
                false;
        };
    },

    特殊的属性需要attrHandle单独处理

    "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",

    "type|href|height|width"

    "value"

    Sizzle.attr = function( elem, name ) {
        // Set document vars if needed
        if ( ( elem.ownerDocument || elem ) !== document ) {
            setDocument( elem );
        }
    
        var fn = Expr.attrHandle[ name.toLowerCase() ],
            // Don't get fooled by Object.prototype properties (jQuery #13807)
            val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
                fn( elem, name, !documentIsHTML ) :
                undefined;
    
        return val !== undefined ?
            val :
            support.attributes || !documentIsHTML ?
                elem.getAttribute( name ) :
                (val = elem.getAttributeNode(name)) && val.specified ?
                    val.value :
                    null;
    };

     

    CSS2.1

    [attribute]

    匹配包含给定属性的元素

    通过刷选出seed种子集合,然后遍历通过 elem.getAttribute( name ) 找到结果集即可

     

    [attribute=value]

    匹配给定的属性是某个特定值的元素

    先直接attribute的操作,匹配出来的值来匹配设定的attribute

     

    [name~="value"]

    [name|="value"]

     


    JQUERY自己实现的取反

    [attribute!=value]

    匹配所有不含有指定的属性,或者属性不等于特定值的元素。

    此选择器等价于:not([attr=value])<br>要匹配含有特定属性但不等于特定值的元素,请使用[attr]:not([attr=value])

     

     


    CSS3.1

    [attribute^=value]

    匹配给定的属性是以某些值开始的元素

     

    [attribute$=value]

    匹配给定的属性是以某些值结尾的元素

     

    [attribute*=value]

    匹配给定的属性是以包含某些值的元素

     


    [selector1][selector2][selectorN]

    复合属性选择器,需要同时满足多个条件时使用。

  • 相关阅读:
    Ajax调用asp.net后台代码
    浅谈Swift集合类型
    强大的swift字符串
    swift的运算符
    Swift的基本类型和流程控制
    Router和History (路由控制)-backbone
    jq里attr和prop的区别
    文本超出盒子的内容用省略号代替
    利用html5中的localStorage获取网页被访问的次数
    html5的本地存储localStorage和sessionStorage
  • 原文地址:https://www.cnblogs.com/aaronjs/p/3855346.html
Copyright © 2011-2022 走看看