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 相关文章推荐
Jqyery中同等与js中windows.onload的应用
May 10 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
Apr 25 Javascript
jquery果冻抖动效果实现方法
Jan 15 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
May 11 Javascript
ajax跨域调用webservice的实现代码
May 09 Javascript
移动适配的几种方案(三种方案)
Nov 25 Javascript
利用babel将es6语法转es5的简单示例
Dec 01 Javascript
axios 封装上传文件的请求方法
Sep 26 Javascript
深入学习Vue nextTick的用法及原理
Oct 08 Javascript
修改vue源码实现动态路由缓存的方法
Jan 21 Javascript
微信小程序webSocket的使用方法
Feb 20 Javascript
JavaScript鼠标拖拽事件详解
Apr 03 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的error_reporting错误级别变量对照表
2014/07/08 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
python字符串排序方法
2014/08/29 Python
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
python实现SMTP邮件发送功能
2020/06/16 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
python做反被爬保护的方法
2019/07/01 Python
Django文件存储 自己定制存储系统解析
2019/08/02 Python
详解Python文件修改的两种方式
2019/08/22 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
表彰先进的通报
2014/01/31 职场文书
银行简历自我评价
2014/02/11 职场文书
公司外出活动方案
2014/08/14 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python