
jQuery选择器源码解读(七):elementMatcher函数

要读懂Sizzle的Compile执行过程,首先需要弄清楚涉及的各个子程序的功能和关键变量和作用,我将逐一对jQuery-1.10.2版本的Compile代码进行说明,望能给予大家帮助。
elementMatcher(matchers)
function elementMatcher(matchers) {
return matchers.length > 1 ? function(elem, context, xml) {
var i = matchers.length;
while (i--) {
if (!matchers[i](elem, context, xml)) {
return false;
}
}
return true;
} : matchers[0];
}
2、功能
该函数返回一个函数,用来判定传入的elem是否符合匹配执行函数数组matchers,若不满足返回false,否则返回true。
若matchers仅有一个元素,则返回该元素本身,否则返回一个新函数——即代码中的function(elem, context, xml)函数。
返回函数效果有点类似于context.filter(selectors),当然,其结果仅仅返回true或false,而非jQuery对象。
3、参数
matchers——数组,每个元素都是非伪类的匹配器执行函数。例如:在实际执行过程中,div.map span:lt(10),其中div和,map的匹配执行函数就会作为matchers的两个元素传入elementMatcher函数来过滤span节点的父节点是否满足要求。
4、返回函数
4.1 若matchers多于1个元素,则返回如下函数:
function(elem, context, xml) {
var i = matchers.length;
while (i--) {
if (!matchers[i](elem, context, xml)) {
return false;
}
}
return true;
}
4.1.1 功能
从matchers最后一个元素到第一个元素依次调用,以匹配传入的elem节点是否满足要求,全部满足返回true,否则返回false。
4.1.2 参数
elem——待检查的单个节点元素。
context——执行整个选择器字符串匹配的上下文节点,大部分时候是没有用途。
xml——当前搜索对象是HTML还是XML文档,若是HTML,则xml参数为false。
4.2 若matchers只有1个元素,则返回该元素本身。
4.2.1 功能
检查传入的elem是否与选择器匹配,若匹配返回true,否则返回false。
4.2.2 参数
同4.1.2参数说明。
相关推荐
-
jQuery选择器源码解读(二):select方法
/* * select方法是Sizzle选择器包的核心方法之一,其主要完成下列任务: * 1.调用tokenize方法完成对选择器的解析 * 2.对于没有初始集合(即seed没有赋值)且是单一块选择器(即选择器字符串中没有逗号), * 完成下列事项: * 1) 对于首选择器是ID类型且context是document的,则直接获取对象替代传入的context对象 * 2) 若选择器是单一选择器,且是id.class.tag类型的,则直接获取并返回匹配的DOM元素 * 3) 获取最后一个id.cl
-
jquery表单对象属性过滤选择器实例分析
本文实例讲述了jquery表单对象属性过滤选择器用法.分享给大家供大家参考.具体分析如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &
-
使用jQuery在对象中缓存选择器的简单方法
当使用像jQuery这样的库时,开发者通常会使用选择器来访问和操作DOM中的元素.当一个选择在页面上被反复的访问时,把它缓存起来以获得更好的性能是个不错的想法. 让我们看一个例子, jQuery(document).ready(function() { jQuery('#some-selector').on('hover', function() { jQuery(this).fadeOut('slow').delay(400).fadeIn(); console.log(jQuery(this
-
JQuery中层次选择器用法实例详解
本文实例讲述了JQuery中层次选择器用法.分享给大家供大家参考.具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head
-
Jquery中基本选择器用法实例详解
本文实例讲述了Jquery中基本选择器用法.分享给大家供大家参考.具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head
-
jQuery选择器源码解读(五):tokenize的解析过程
以下分析基于jQuery-1.10.2.js版本. 下面将以$("div:not(.class:contain('span')):eq(3)")为例,说明tokenize和preFilter各段代码是如何协调完成解析的.若想了解tokenize方法和preFilter类的每行代码的详细解释,请参看如下两篇文章: http://www.jb51.net/article/63155.htm http://www.jb51.net/article/63163.htm 下面是tokenize方
-
JQuery选择器、过滤器大整理
经过一晚上的查找整理,终于整理出一套应该算最全面的JQuery选择过滤器的方法了.所有代码均经过测试. 首先HTML代码 复制代码 代码如下: HTML Code <html> <head> <script type="text/javascript" src="JQuery/jquery-1.5.1.js"></script> </head> <body> <form name=&quo
-
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
近期看了一些网上关于Sizzle的分析文章,就匹配次序往往就说使用了从右到左的逆向匹配法,但是具体如何并没有详细介绍,或者就像我之前的几篇文章一样,就代码一行一行做详细介绍,但缺乏整体概念,这里就jQuery-1.10.2版本的Sizzle的匹配逻辑(预编译结果)做一整体说明,这里就不谈过多的细节了. Sizzle的匹配过程采用的是以从右到左的逆向匹配法为基础的改进版本,因为HTML的搜索毕竟和文本匹配有差异,它有自己独特的一面,所以,需要针对HTML的搜索进行优化.在此先申明一点,下面所说的关
-
jquery实现不包含当前项的选择器实例
本文实例讲述了jquery实现不包含当前项的选择器实例.分享给大家供大家参考.具体如下: 这段代码演示了jquery选择所有的链接,点击其中一个链接时,其它的链接都变色,只有当前链接不变色 var $allLinks = $("a"); $allLinks.click(function() { $allLinks.not(this).css("color", "red"); }); 更多关于jquery选择器相关内容感兴趣的读者可查看本站专题:&
-
JQuery中基础过滤选择器用法实例分析
本文实例讲述了JQuery中基础过滤选择器用法.分享给大家供大家参考.具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <he
-
jquery选择器简述
jQuery选择器使得获得页面元素变得更加容易.更加灵活,从而大大减轻了开发人员的压力.如同盖楼一样,没有砖瓦,就盖不起楼房,得不到元素谈何其他各种操作呢?可见,jQuery选择器的重要性. jquery选择器大方向可以分为这样: 下面我们先来看看基本选择器总的CSS选择器: 1.标签选择器: $("element") 其中,参数element,表示待查找的HTML标记名,如$("div"),标签选择器获取元素的方式是高效的,因为它继承自javascript中的ge
-
JQuery中属性过滤选择器用法实例分析
本文实例讲述了JQuery中属性过滤选择器用法.分享给大家供大家参考.具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <he
-
jQuery选择器源码解读(三):tokenize方法
/* * tokenize方法是选择器解析的核心函数,它将选择器转换成两级数组groups * 举例: * 若选择器为"div.class,span",则解析后的结果为: * group[0][0] = {type:'TAG',value:'div',matches:match} * group[0][1] = {type:'CLASS',value:'.class',matches:match} * group[1][0] = {type:'TAG',value:'span',mat
随机推荐
- 基于apicloudAJAX请求代码合集
- jquery对Json的各种遍历方法总结(必看篇)
- Node.JS使用Sequelize操作MySQL的示例代码
- iOS 加载Bundle文件的实例代码
- 基于Dapper实现分页效果 支持筛选、排序、结果集总数等
- 使用JavaScript和C#中获得referer
- C++实现获取IP、子网掩码、网关、DNS等本机网络参数的方法
- ThinkPHP模版中导入CSS和JS文件的方法
- Python自动重试HTTP连接装饰器
- 深入理解Android中的建造者模式
- C# 字符串按 ASCII码 排序的方法
- Android编程实现仿iphone抖动效果的方法(附源码)
- Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
- VBS破坏性应用代码
- 用Python编程实现语音控制电脑
- Sql Server 2012 分页方法分析(offset and fetch)
- Node.js 8 中的 util.promisify的详解
- Android通过overScrollBy实现下拉视差特效
- java 8如何自定义收集器(collector)详解
- spring整合JMS实现同步收发消息(基于ActiveMQ的实现)
其他
- vue中slot的用法
- dockerfile git clone 无法解析域名
- 安卓系统如何用网页打开
- vue按照条件引入外部样式
- Android 浮标指示器进度条
- java中context的用法
- 定义截面的注解@Around(
- springboot图片转成url
- c#高低字节转换函数
- Pycharm识别不到自己创建的函数
- 父类可以直接调用子类的方法吗
- nodesass7.0.1对应的sass-loader
- QueryWrapper时间判断只判断日期
- 微信小程序 swiper多图
- 两个数组循环遍历,重复的值只留一份 js
- QueryDSl 抽象类
- 微信小程序按钮上文字大小
- 闭包使用的场景 js
- ndarray转img
- docker compose driver怎么设置