【jQuery源码】preFilter
 preFilter: {
         "ATTR": function( match ) {
             //属性名解码
             match[1] = match[1].replace( runescape, funescape );
             // Move the given value to match[3] whether quoted or unquoted
             //属性解码
             match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
             //若判断符为~=,则在属性值两边加上空格
             if ( match[2] === "~=" ) {
                 match[3] = " " + match[3] + " ";
             }
             //返回前4个元素
             return match.slice( 0, 4 );
         },
         "CHILD": function( match ) {
             /* matches from matchExpr["CHILD"]
                 1 type (only|nth|...)
                 2 what (child|of-type)
                 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
                 4 xn-component of xn+y argument ([+-]?\d*n|)
                 5 sign of xn-component
                 6 x of xn-component
                 7 sign of y-component
                 8 y of y-component
             */
             //match[1]:(only|first|last|nth|nth-last)
             //match[2]: (child|last-child|of-type|last-of-type)
             //match[3]: (even|odd)
             //match[4]、match[5]: an+b中的a,b
             //match[1]变成小写
             match[1] = match[1].toLowerCase();
             //如果match[1]是"nth"
             if ( match[1].slice( 0, 3 ) === "nth" ) {
                 // nth-* requires argument
                 //若选择器括号内没有有效参数,则抛出异常
                 if ( !match[3] ) {
                     Sizzle.error( match[0] );
                 }
                 // numeric x and y parameters for Expr.filter.CHILD
                 // remember that false/true cast respectively to 0/1
                 /*
                      * 下面先以nth-child()为例介绍一下语法,以便更好的理解下面代码的作用
                      * nth-child允许的几种使用方式如下:
                      *    :nth-child(even)
                      *    :nth-child(odd)
                      *    :nth-child(3n)
                      *    :nth-child(+2n+1)
                      *    :nth-child(2n-1)
                      * 下面代码中赋值号左侧的match[4]、match[5]用于分别记录括号内n前及n后的数值,包括正负号
                      * 对于:nth-child(even)和:nth-child(odd)来说,match[4]为空,
                      *     所以返回 2 * (match[3] === "even" || match[3] === "odd")的计算结果
                      *     因为在js中true=1,false=0,所以(match[3] === "even" || match[3] === "odd")等于1
                      *     因此,2 * (match[3] === "even" || match[3] === "odd")的计算结果为2
                      *
                      * 等号右侧的“+”的作用是强制类型转换,将之后的字符串转换成数值类型
                  */
                 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
                 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
             // other types prohibit arguments
             //若非nth起头的其它CHILD类型选择器带有括号说明,则抛出异常
             } else if ( match[3] ) {
                 Sizzle.error( match[0] );
             }
             return match;
         },
         "PSEUDO": function( match ) {
             var excess,
                 unquoted = !match[6] && match[2];
             if ( matchExpr["CHILD"].test( match[0] ) ) {
                 return null;
             }
             // Accept quoted arguments as-is
             if ( match[3] ) {
                 match[2] = match[4] || match[5] || "";
             // Strip excess characters from unquoted arguments
             } else if ( unquoted && rpseudo.test( unquoted ) &&
                 // Get excess from tokenize (recursively)
                 (excess = tokenize( unquoted, true )) &&
                 // advance to the next closing parenthesis
                 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
                 // excess is a negative index
                 match[0] = match[0].slice( 0, excess );
                 match[2] = unquoted.slice( 0, excess );
             }
             // Return only captures needed by the pseudo filter method (type and argument)
             return match.slice( 0, 3 );
         }
     },
【jQuery源码】preFilter的更多相关文章
- jQuery源码分析系列
		声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ... 
- jQuery源码学习感想
		还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ... 
- Jquery源码学习(第一天)
		jQuery是面向对象的设计通过window.$ = window.jQuery = $; 向外提供接口,将$挂在window下,外部就可以使用$和jQuery $("#div1" ... 
- jQuery源码 Ajax模块分析
		写在前面: 先讲讲ajax中的相关函数,然后结合函数功能来具体分析源代码. 相关函数: >>ajax全局事件处理程序 .ajaxStart(handler) 注册一个ajaxStart事件 ... 
- jQuery源码:从原理到实战
		jQuery源码:从原理到实战 jQuery选择器对象 $(".my-class"); document.querySelectorAll*".my-class" ... 
- 【菜鸟学习jquery源码】数据缓存与data()
		前言 最近比较烦,深圳的工作还没着落,论文不想弄,烦.....今天看了下jquery的数据缓存的代码,参考着Aaron的源码分析,自己有点理解了,和大家分享下.以后也打算把自己的jquery的学习心得 ... 
- 从jquery源码中看类型判断和数组的一些操作
		在深入看jquery源码中,大家会发现源码写的相当巧妙.那我今天也通过几个源码中用到的技巧来抛砖引玉,希望大家能共同研究源码之精华,不要囫囵吞枣. 1.将类数组转化成数组 我想大家首先想到的方法是fo ... 
- 读艾伦的jQuery的无new构建,疑惑分析——jquery源码学习一
		背景: 有心学习jquery源码,苦于自己水平有限,若自己研究,耗时耗力,且读懂之日无期. 所以,网上寻找高手的源码分析.再经过自己思考,整理,验证.以求有所收获. 此篇为读高手艾伦<jQuer ... 
- JQuery源码解析(一)
		写在前面:本<JQuery源码解析>系列是基于一些前辈们的文章进行进一步的分析.细化.修改而写出来的,在这边感谢那些慷慨提供科普文档的技术大拿们. 要查阅JQ的源文件请下载开发版的JQ.j ... 
- 读jQuery源码 - Deferred
		Deferred首次出现在jQuery 1.5中,在jQuery 1.8之后被改写,它的出现抹平了javascript中的大量回调产生的金字塔,提供了异步编程的能力,它主要服役于jQuery.ajax ... 
随机推荐
- Java Toolkit类用法
			这是一个AWT工具箱.它提供对本地GUI最低层次的JAVA访问.在大多情况下,这个类不直接用在小应用程序或应用程序中.具有把行图形数据转换为可显示的图像.返回字体信息.得出显示尺寸和分辨率以及获得系统 ... 
- 11.字符串{a,b}的幂集[回溯递归]
			我一直在想着这个事,早晨起来五六点,躺在床上冥想.突然悟解了,真如某些书上写的,大道不过三言两语,说破一文不值.还是按照老方法,把问题最大程度的精简,现在求集合A={a,b}的幂集,只有两个元素,应该 ... 
- xib创建cell的两种方法
			方法一:第一步:[self.collectionView registerNib:[UINib nibWithNibName:@"QGLShareBtnCell" bundle:n ... 
- MySQL性能调优与架构设计——第12章 可扩展设计的基本原则
			第12章 可扩展设计的基本原则 前言: 随着信息量的飞速增加,硬件设备的发展已经慢慢的无法跟上应用系统对处理能力的要求了.此时,我们如何来解决系统对性能的要求?只有一个办法,那就是通过改造系统的架构体 ... 
- IOS11下fixed中input光标错位问题
			项目遇到了这个问题,故作了个临时解决方案,暂时没有想到更好的方法,查阅了网上的方案,也没有找到完美的解决方案. 方案思路: ①弹窗打开时,阻止 body 滚动,禁用 touchmove ,同时记录当前 ... 
- CDialog
			对话框和对话框类CDialog 对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的. 模式和无模式对话框 对话框分两种类型,模式对话框和无模式对话框. 模式对 ... 
- 【Linux】文件操作系统调用
			一. 文件描述符 在Linux下使用文件描述符来表示设备文件和普通文件.文件描述符是一个整型的数据,所有对文件的操作都通过文件描述符实现.文件描述符的范围是0~OPEN_MAX,系统中有3个已经分配的 ... 
- chrome 概述
			Chrome, Firebug, Filddle 调试:http://www.zhihu.com/question/35667558/answer/63936233 Chrome开发者工具系列: ht ... 
- LeetCode151:Reverse Words in a String
			题目: Given an input string, reverse the string word by word. For example, Given s = "the sk ... 
- C# RS232串口使用
			using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ... 
