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 相关文章推荐
Extjs学习笔记之七 布局
Jan 08 Javascript
读jQuery之八 包装事件对象
Jun 21 Javascript
jQuery.each()用法分享
Jul 31 Javascript
jQuery:节点(插入,复制,替换,删除)操作
Mar 04 Javascript
js对图片base64编码字符串进行解码并输出图像示例
Mar 17 Javascript
js中将String转换为number以便比较
Jul 08 Javascript
纯javascript实现简单下拉刷新功能
Mar 13 Javascript
JS实现网页Div层Clone拖拽效果
Sep 26 Javascript
vue.js实现的经典计算器/科学计算器功能示例
Jul 11 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
Dec 24 Javascript
详解element-ui日期时间选择器的日期格式化问题
Apr 08 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
May 12 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
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
JS中类或对象的定义说明
2014/03/10 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
详解Python编程中time模块的使用
2015/11/20 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
python面向对象 反射原理解析
2019/08/12 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
Django权限控制的使用
2021/01/07 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
汽车工程专业应届生求职信
2013/10/19 职场文书
2013年军训通讯稿
2014/02/05 职场文书
运动会稿件200字
2014/02/07 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
会员活动策划方案
2014/08/19 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
节水倡议书
2015/01/19 职场文书
python实现过滤敏感词
2021/05/08 Python
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL