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 相关文章推荐
js更优雅的兼容
Aug 12 Javascript
Prototype源码浅析 String部分(四)之补充
Jan 16 Javascript
浅谈类似于(function(){}).call()的js语句
Mar 30 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
Oct 21 Javascript
bootstrap modal弹出框的垂直居中
Dec 14 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
vue.js中mint-ui框架的使用方法
May 12 Javascript
angularjs定时任务的设置与清除示例
Jun 02 Javascript
bootstrap精简教程_动力节点Java学院整理
Jul 14 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
Jul 26 Javascript
JSON字符串操作移除空串更改key/value的介绍
Jan 05 Javascript
Vue + Element UI图片上传控件使用详解
Aug 20 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 preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
github配置使用指南
2014/11/18 Python
Python中http请求方法库汇总
2016/01/06 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
英国儿童图书网站:Scholastic
2017/03/26 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
后勤部经理岗位职责
2014/02/23 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle