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 相关文章推荐
基于jquery.Jcrop的头像编辑器
Mar 01 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
Oct 11 Javascript
jquery单行文字向上滚动效果示例
Mar 06 Javascript
JS中实现简单Formatter函数示例代码
Aug 19 Javascript
JavaScript中的普通函数与构造函数比较
Apr 07 Javascript
JavaScript基础篇(6)之函数表达式闭包
Dec 11 Javascript
JS定义类的六种方式详解
May 12 Javascript
JS简单实现点击复制链接的方法
Aug 03 Javascript
JS实现websocket长轮询实时消息提示的效果
Oct 10 Javascript
微信小程序全局变量功能与用法详解
Jan 22 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
Jul 10 jQuery
Layui多选只有最后一个值的解决方法
Sep 02 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
Ajax PHP分页演示
2007/01/02 PHP
PHP日期时间函数的高级应用技巧
2009/05/16 PHP
PHP防止跨域提交表单
2013/11/01 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
js替换字符串的所有示例代码
2013/07/23 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
小程序实现留言板
2018/11/02 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
python生成excel的实例代码
2017/11/08 Python
python学生信息管理系统
2018/03/13 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
《老山界》教学反思
2014/04/08 职场文书
日语系毕业求职信
2014/07/27 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
三峡人家导游词
2015/01/31 职场文书
体育教师个人工作总结
2015/02/09 职场文书
投诉信回复范文
2015/07/03 职场文书
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS