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与CSS复习(《精通javascript》)
Jun 29 Javascript
jquery实现输入框动态增减的实例代码
Jul 14 Javascript
js 实现菜单上下显示附效果图
Nov 21 Javascript
javascript正则匹配汉字、数字、字母、下划线
Apr 10 Javascript
快速学习jQuery插件 Form表单插件使用方法
Dec 01 Javascript
jquery+CSS3实现3D拖拽相册效果
Jul 18 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
Sep 17 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
Oct 10 Javascript
BootStrap模态框闪退问题实例代码详解
Dec 10 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 Javascript
HTML元素拖拽功能实现的完整实例
Dec 04 Javascript
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
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 getsiteurl()函数
2009/09/05 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
详解Python中的正则表达式的用法
2015/04/09 Python
python手写均值滤波
2020/02/19 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
违反学校规定检讨书
2014/01/18 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
销售员态度差检讨书
2014/10/26 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
离婚代理词范文
2015/05/23 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
MySQL索引失效的典型案例
2021/06/05 MySQL