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


Posted in Javascript onMarch 31, 2015

要读懂Sizzle的Compile执行过程,首先需要弄清楚涉及的各个子程序的功能和关键变量和作用,我将逐一对jQuery-1.10.2版本的Compile代码进行说明,望能给予大家帮助。

elementMatcher(matchers)

1、源码

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参数说明。

Javascript 相关文章推荐
javascript模仿msgbox提示效果代码
Jun 10 Javascript
Javascript insertAfter() 实现函数代码
Oct 12 Javascript
基于jquery的鼠标拖动效果代码
May 30 Javascript
JS 毫秒转时间示例代码
Sep 22 Javascript
JavaScript原生对象之String对象的属性和方法详解
Mar 13 Javascript
原生js结合html5制作简易的双色子游戏
Mar 30 Javascript
jquery插件ajaxupload实现文件上传操作
Dec 09 Javascript
AngularJS 所有版本下载地址
Sep 14 Javascript
js中json处理总结之JSON.parse
Oct 14 Javascript
js querySelector() 使用方法
Dec 21 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
Jan 17 Javascript
vue+element的表格实现批量删除功能示例代码
Aug 17 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
Mar 31 #Javascript
jQuery选择器源码解读(五):tokenize的解析过程
Mar 31 #Javascript
JavaScript制作windows经典扫雷小游戏
Mar 31 #Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
Mar 31 #Javascript
JavaScript制作简易的微信打飞机
Mar 31 #Javascript
JS获取表格内指定单元格html内容的方法
Mar 31 #Javascript
JS实现为表格动态添加标题的方法
Mar 31 #Javascript
You might like
zf框架的Filter过滤器使用示例
2014/03/13 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
德国团购网站:Groupon德国
2018/03/13 全球购物
英文演讲稿
2014/05/15 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技