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 私有成员分析
Jan 13 Javascript
javascript 写类方式之一
Jul 05 Javascript
Javascript实现动态菜单添加的实例代码
Jul 05 Javascript
js判断子窗体是否关闭的方法
Aug 11 Javascript
JavaScript编程中window的location与history对象详解
Oct 26 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
Dec 29 Javascript
jQuery日期范围选择器附源码下载
May 23 jQuery
Vue.js 父子组件通信的十种方式
Oct 30 Javascript
说说Vue.js中的functional函数化组件的使用
Feb 12 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
Nov 21 Javascript
node.js中module模块的功能理解与用法实例分析
Feb 14 Javascript
Angular之jwt令牌身份验证的实现
Feb 14 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类
2006/10/09 PHP
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
PHP处理会话函数大总结
2015/08/05 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP目录操作实例总结
2016/09/27 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
JS实现六边形3D拖拽翻转效果的方法
2016/09/11 Javascript
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
Python的类实例属性访问规则探讨
2015/01/30 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
python elasticsearch环境搭建详解
2019/09/02 Python
如何使用python代码操作git代码
2020/02/29 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
django orm模块中的 is_delete用法
2020/05/20 Python
中国网上药店领导者:1药网
2017/02/16 全球购物
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
软件测试工程师面试问题精选
2016/10/28 面试题
2014年党员创先争优承诺书
2014/05/29 职场文书
2014年质量工作总结
2014/11/22 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
素质教育培训心得体会
2016/01/19 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript