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]

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


本文转自艾伦 Aaron博客园博客,原文链接:http://www.cnblogs.com/aaronjs/p/3855346.html,如需转载请自行联系原作者

相关文章
|
7月前
|
JavaScript
jQuery 筛选选择器
jQuery 筛选选择器
25 0
|
7月前
|
JavaScript
jQuery 基本过滤选择器
jQuery 基本过滤选择器
19 0
|
8月前
|
JavaScript 前端开发 索引
JQuery全部过滤选择器详细介绍上
JQuery全部过滤选择器详细介绍上
46 0
|
8月前
|
JavaScript 索引 AI芯片
JQuery全部过滤选择器详细介绍下
JQuery全部过滤选择器详细介绍下
41 0
|
JavaScript
JQUERY选择器--筛选选择器
JQUERY选择器--筛选选择器
50 0
|
JavaScript 前端开发 索引
jQuery选择器之过滤选择器
jQuery选择器之过滤选择器
163 11
|
JavaScript
jquery的筛选选择器-10
jquery的筛选选择器-10
64 0
jquery的筛选选择器-10
|
前端开发
CSS选择器的一些记录
在css3.info网站上面可以测试当前浏览器对CSS选择器的兼容程度。测试不包括:hover,:active, :focus,:selection,:visited,:link。
CSS选择器的一些记录
|
JavaScript 数据安全/隐私保护 索引
jQuery选择器总结(选择器+元素筛选)
jQuery选择器总结(选择器+元素筛选)
208 0