【jQuery源码】preFilter

  1 preFilter: {
  2         "ATTR": function( match ) {
  3             //属性名解码
  4             match[1] = match[1].replace( runescape, funescape );
  5
  6             // Move the given value to match[3] whether quoted or unquoted
  7             //属性解码
  8             match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
  9
 10             //若判断符为~=,则在属性值两边加上空格
 11             if ( match[2] === "~=" ) {
 12                 match[3] = " " + match[3] + " ";
 13             }
 14
 15             //返回前4个元素
 16             return match.slice( 0, 4 );
 17         },
 18
 19         "CHILD": function( match ) {
 20             /* matches from matchExpr["CHILD"]
 21                 1 type (only|nth|...)
 22                 2 what (child|of-type)
 23                 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
 24                 4 xn-component of xn+y argument ([+-]?\d*n|)
 25                 5 sign of xn-component
 26                 6 x of xn-component
 27                 7 sign of y-component
 28                 8 y of y-component
 29             */
 30             //match[1]:(only|first|last|nth|nth-last)
 31             //match[2]: (child|last-child|of-type|last-of-type)
 32             //match[3]: (even|odd)
 33             //match[4]、match[5]: an+b中的a,b
 34
 35             //match[1]变成小写
 36             match[1] = match[1].toLowerCase();
 37
 38             //如果match[1]是"nth"
 39             if ( match[1].slice( 0, 3 ) === "nth" ) {
 40                 // nth-* requires argument
 41                 //若选择器括号内没有有效参数,则抛出异常
 42                 if ( !match[3] ) {
 43                     Sizzle.error( match[0] );
 44                 }
 45
 46                 // numeric x and y parameters for Expr.filter.CHILD
 47                 // remember that false/true cast respectively to 0/1
 48                 /*
 49                      * 下面先以nth-child()为例介绍一下语法,以便更好的理解下面代码的作用
 50                      * nth-child允许的几种使用方式如下:
 51                      *    :nth-child(even)
 52                      *    :nth-child(odd)
 53                      *    :nth-child(3n)
 54                      *    :nth-child(+2n+1)
 55                      *    :nth-child(2n-1)
 56                      * 下面代码中赋值号左侧的match[4]、match[5]用于分别记录括号内n前及n后的数值,包括正负号
 57                      * 对于:nth-child(even)和:nth-child(odd)来说,match[4]为空,
 58                      *     所以返回 2 * (match[3] === "even" || match[3] === "odd")的计算结果
 59                      *     因为在js中true=1,false=0,所以(match[3] === "even" || match[3] === "odd")等于1
 60                      *     因此,2 * (match[3] === "even" || match[3] === "odd")的计算结果为2
 61                      *
 62                      * 等号右侧的“+”的作用是强制类型转换,将之后的字符串转换成数值类型
 63                  */
 64                 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
 65                 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
 66
 67             // other types prohibit arguments
 68             //若非nth起头的其它CHILD类型选择器带有括号说明,则抛出异常
 69             } else if ( match[3] ) {
 70                 Sizzle.error( match[0] );
 71             }
 72
 73             return match;
 74         },
 75
 76         "PSEUDO": function( match ) {
 77             var excess,
 78                 unquoted = !match[6] && match[2];
 79
 80             if ( matchExpr["CHILD"].test( match[0] ) ) {
 81                 return null;
 82             }
 83
 84             // Accept quoted arguments as-is
 85             if ( match[3] ) {
 86                 match[2] = match[4] || match[5] || "";
 87
 88             // Strip excess characters from unquoted arguments
 89             } else if ( unquoted && rpseudo.test( unquoted ) &&
 90                 // Get excess from tokenize (recursively)
 91                 (excess = tokenize( unquoted, true )) &&
 92                 // advance to the next closing parenthesis
 93                 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
 94
 95                 // excess is a negative index
 96                 match[0] = match[0].slice( 0, excess );
 97                 match[2] = unquoted.slice( 0, excess );
 98             }
 99
100             // Return only captures needed by the pseudo filter method (type and argument)
101             return match.slice( 0, 3 );
102         }
103     },
时间: 2024-10-08 05:50:47

【jQuery源码】preFilter的相关文章

jQuery源码学习笔记五 六 七 八 转

jQuery源码学习笔记五 六 七 八 转 Js代码   <p>在正式深入jQuery的核心功能选择器之前,还有一些方法,基本都是数组方法,用于遴选更具体的需求,如获得某个元素的所有祖选元素啦,等等.接着是其缓存机制data.</p> <pre class="brush:javascript;gutter:false;toolbar:false"> //@author  司徒正美|なさみ|cheng http://www.cnblogs.com/ru

jquery源码学习笔记(一)jQuery的无new构建

本人是一名.net程序员..... 你一个.net coder 看什么jQuery 源码啊? 原因吗,很简单.技多不压身吗(麻蛋,前端工作好高...羡慕). 我一直都很喜欢JavaScript,废话不多说了,直接切入正题. 最近看了好几篇jQuery 源码的文章,对于jQuery的无new构建  很是不解. 查了很多资料,总算是搞明白了. jQuery的无new构建 jQuery框架的核心就是从HTML文档中匹配元素并对其执行操作. 回想一下使用 jQuery 的时候,实例化一个 jQuery

五.jQuery源码解析之jQuery.extend(),jQuery.fn.extend()

给jQuery做过扩展或者制作过jQuery插件的人这两个方法东西可能不陌生.jQuery.extend([deep],target,object1,,object2...[objectN]) jQuery.fn.extend([deep],target,object1,,object2...[objectN])这两个属性都是用于合并两个或多个对象的属性到target对象.deep是布尔值,表示是否进行深度合并,默认是false,不执行深度合并.通过这种方式可以在jQuery或jQuery.fn

jquery源码学习

jQuery 源码学习是对js的能力提升很有帮助的一个方法,废话不说,我们来开始学习啦 我们学习的源码是jquery-2.0.3已经不支持IE6,7,8了,因为可以少学很多hack和兼容的方法. jquery-2.0.3的代码结构如下 首先最外层为一个闭包, 代码执行的最后一句为window.$ = window.jquery = jquery 让闭包中的变量暴露倒全局中. 传参传入window是为了便于压缩 传入undefined是为了undifined被修改,他是window的属性,可以被修

jquery 源码学习(三)

jQuery源码分析-03构造jQuery对象-源码结构和核心函数,需要的朋友可以参考下. 作者:nuysoft/高云 QQ:47214707 EMail:[email protected] 毕竟是边读边写,不对的地方请告诉我,多多交流共同进步.本章还未写完,完了会提交PDF. 前记: 想系统的好好写写,但是会先从感兴趣的部分开始. 近期有读者把PDF传到了百度文库上,首先感谢转载和传播,但是据为已有并设置了挺高的财富值才能下载就不好了,以后我整理好了会传到文库上.请体谅一下. 3. 构造jQu

Jquery源码分析与简单模拟实现

前言 最近学习了一下jQuery源码,顺便总结一下,版本:v2.0.3 主要是通过简单模拟实现jQuery的封装/调用.选择器.类级别扩展等.加深对js/Jquery的理解. 正文 先来说问题: 1.jQuery为什么能使用$的方式调用,$是什么.$()又是什么.链式调用如何实现的 2.jQuery的类级别的扩展内部是怎样实现的,方法级别的扩展有是怎样实现的,$.fn又是什么 3.jQuery选择器是如何执行的,又是如何将结果包装并返回的 带着这些问题,我们进行jquery的模拟实现,文章下方有

菜鸟学jQuery源码(一)

整个jQuery是一个自调用的匿名函数: 1 (function(global, factory) { 2 if (typeof module === "object" && typeof module.exports === "object") { 3 module.exports = global.document ? 4 factory(global, true) : 5 function(w) { 6 if (!w.document) { 7

菜鸟学jQuery源码(前言)

前言 相信任何一名前端开发人员或者是前端爱好者都对jQuery不陌生.jQuery简单易用,功能强大,特别是拥有良好的浏览器兼容性,大大降低了前端开发的难度,使得前端开发变得“平易近人起来”.自从本人用了jQuery,顿时感觉到人生再也不是灰色的了,又能够快乐的工作了. 不过在每天码得飞起的同时,我也对jQuery充满好奇,所以也特意的去查了一下资料.现在网上和书店里面有非常多的资料对jQuery源码从各种角度进行解析,大多都是对jQuery进行总结.归纳从上往下的分析.不过本人作为一名刚毕业的

jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器

jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTransport, 3.类型转换器 ajaxConvert 源码结构: jQuery.extend({ /** * 前置过滤器 * @type {[type]} */ ajaxPrefilter: addToPrefiltersOrTransports(prefilters), /** * 请求分发器 *

Jquery源码分析

1.概述 jQuery是一个非常优秀的Js库,与prototype,YUI,Mootools等众多的Js类库相比,它剑走偏锋,从web开发最实用的角度出发,抛除了一些中看但不实用的东西,为开发者提供一个短小精悍的类库.由于其个短小精悍,使用简单方便,性能相对高效.众多的开发者都选择Jquery来进行辅助的web开发. 在使用jquery时开发,我们也会时常碰到许多的问题,但是jquery的代码很晦涩,难起看懂,当开发时出现了问题,看不懂源码,不知道如何去排错. John Resig,Jquery