源码部分

通过Sizzle.attr匹配出值

然后通过表达式刷选计算

  1. "ATTR": function( name, operator, check ) {
  2. return function( elem ) {
  3. var result = Sizzle.attr( elem, name );
  4.  
  5. if ( result == null ) {
  6. return operator === "!=";
  7. }
  8. if ( !operator ) {
  9. return true;
  10. }
  11.  
  12. result += "";
  13.  
  14. return operator === "=" ? result === check :
  15. operator === "!=" ? result !== check :
  16. operator === "^=" ? check && result.indexOf( check ) === 0 :
  17. operator === "*=" ? check && result.indexOf( check ) > -1 :
  18. operator === "$=" ? check && result.slice( -check.length ) === check :
  19. operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
  20. operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
  21. false;
  22. };
  23. },

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

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

"type|href|height|width"

"value"

  1. Sizzle.attr = function( elem, name ) {
  2. // Set document vars if needed
  3. if ( ( elem.ownerDocument || elem ) !== document ) {
  4. setDocument( elem );
  5. }
  6.  
  7. var fn = Expr.attrHandle[ name.toLowerCase() ],
  8. // Don't get fooled by Object.prototype properties (jQuery #13807)
  9. val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
  10. fn( elem, name, !documentIsHTML ) :
  11. undefined;
  12.  
  13. return val !== undefined ?
  14. val :
  15. support.attributes || !documentIsHTML ?
  16. elem.getAttribute( name ) :
  17. (val = elem.getAttributeNode(name)) && val.specified ?
  18. val.value :
  19. null;
  20. };

 

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]

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

sizzle分析记录:属性选择器的更多相关文章

  1. sizzle分析记录:词法分析器(tokenize)

    词法分析器(tokenize)? 词法分析器又称扫描器.词法分析是指将我们编写的文本代码流解析为一个一个的记号,分析得到的记号以供后续语法分析使用. sizzle引入了tokenize这个概念,意义? ...

  2. sizzle分析记录:分解流程

    <form> <label>Name:</label> <input name="name" /> <fieldset> ...

  3. sizzle分析记录: 自定义伪类选择器

    可见性 :hidden :visible 隐藏对象没有宽高,前提是用display:none处理的 jQuery.expr.filters.hidden = function( elem ) { // ...

  4. sizzle分析记录:关于querySelectorAll兼容问题

    querySelector和querySelectorAll是W3C提供的新的查询接口 目前几乎主流浏览器均支持了他们.包括 IE8(含) 以上版本. Firefox. Chrome.Safari.O ...

  5. sizzle分析记录:getAttribute和getAttributeNode

    部分IE游览器下无法通过getAttribute取值? <form name="aaron"> <input type="text" name ...

  6. CSS3 选择器——属性选择器

    上一节在<CSS3选择器——基本选择器>中主要介绍了CSS3选择器的第一部分,这节主要和大家一起来学习CSS3选择器的第二部分——属性选择器.属性选择器早在CSS2中就被引入了,其主要作用 ...

  7. python 全栈开发,Day47(行级块级标签,高级选择器,属性选择器,伪类选择器,伪元素选择器,css的继承性和层叠性,层叠性权重相同处理,盒模型,padding,border,margin)

    一.HTML中的行级标签和块级标签 块级标签 常见的块级标签:div,p,h1-h6,ul,li,dl,dt,dd 1.独占一行,不和其他元素待在同一行2.能设置宽高3.如果不设置宽高,默认为body ...

  8. PostgreSQL的基础数据类型分析记录-转

    src:http://www.codeweblog.com/postgresql%E7%9A%84%E5%9F%BA%E7%A1%80%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E ...

  9. id选择器、类选择器、属性选择器

    在网页编辑时,通常要对样式进行各种设置.我们借助CSS样式设计中的选择器,就能很好很方便的对它们进行管理和设置了. 今天,跟大家分享一下几个常用的选择器:id选择器.类选择器.属性选择器. id选择器 ...

随机推荐

  1. [RxJava^Android]项目经验分享 --- RxLifecycle功能实现分析(一)

      最近在研究RxJava自定义操作符的实现原理,发现成型的项目案例较少.突然想起在项目中应用的RxLifecycle是使用自定义操作符,便拿来研究了一下.分析之前,跟大家了解一些相关操作符和RxLi ...

  2. JS转换数字金额为大写

    function DX(n){ if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) return ""; var unit = "仟佰拾亿仟佰拾 ...

  3. NFSv4的引用,迁移和备份(用户手册 v0.2)

    RFC3530 定义了NFS文件系统迁移和引用的管理机制.文件系统定位功能通过fs_location属性向客户端提供文件系统的位置信息.fs_location属 性是一个包含有位置信息的列表,位置信息 ...

  4. Oozie_初识

    Oozie 任务调度框架(基于工作流) oozie运行于hadoop集群,对hive,mr,flume,Soop,spark,shell等框架进行任务流调度 如: job1-->job2 &am ...

  5. CF2.C

    C. Vladik and fractions time limit per test 1 second memory limit per test 256 megabytes input stand ...

  6. 网站中使用中文个性字库字体--@font-face解决方案探索 l(转)

    最近的项目有用到特别中文字体,最终效果如下图: 红线标记处均为字体,可选中,交互起来,比图片方便太多了. 解决思路就是将体积巨大的中文字库,取子集,只包涵要使用的那部分文字,因此体积就很小了(包含10 ...

  7. 百度编辑器ueditor的简单使用

    最近刚被分配了以个消息发布的任务,其中用到了富文本编辑器.以前也用过,不过这次我选择的是百度富文本编辑器ueditor1_4_3-utf8-jsp版的. 其实看ueditor功能很强大,不过百度的设计 ...

  8. shared_ptr

    省去对象指针的显示delete typedef tr1::shared_ptr<int> IntPtr; IntPtr fun() { IntPtr p = new int(3); ret ...

  9. 从viewport发现小米手机参数不一致

    想要在移动web领域有所深造的小伙伴,第一关要过的就是逻辑像素与设备像素之间的关系. 初入移动web,一定要搞懂的几个单位(DPI.PPI.DP.PX 的详细计算方法及算法来源是什么?): dip(d ...

  10. .Net开发笔记(二十一) 反射在.net中的应用

    反射概念在网上到处都有,但是讲到的具体的应用很少,一个重要的原因是现实中真的很少用得到它.引用msdn上对“反射”的解释: "通过 System.Reflection 命名空间中的类以及 S ...