一看到sizzle,我很茫然。。。。。。
首先,整理一下,在知乎上看到的。
来自Jeffreyzhang:切割Selector–>查找Selector–>过滤Selector(循环)–>得到Result。
暂时看到就这个。
下面讲讲其他来源:初探jQuery的Sizzle选择器
这个文章讲的可以。扔出来一张图,我现在也不明白。


可以先说一下,

$.与$().的区别。

**

$ 是一个jquery的对象,平时使用方法是引入一个jquery的文件即可。同时,它的功能和作用与jquery一样。
同时,我们还可以用jquery“备胎”,这样的语法来使用。代码如下:
$(). 是可以是可以有参数的,获取元素。平时我们做选择器的时候就是用到这个了。

<div ><span id="">我的div盒子中的一个span,我是行内元素</span></div><script type="text/javascript">$('div>span').css('background','#ff00ff');</script>

就看上面的代码看不出来什么。

我加上jquery来做一个font-weight:bold的:

<div ><span id="">我的div盒子中的一个span,我是行内元素</span></div><script type="text/javascript">$('div>span').css('background','#ff00ff');jQuery('div>span').css('fontWeight','bold')</script>


这样看,就很明显了。它这样像加粗的样式,我并没有用$来写。


很不要脸的复制了:重点看 string 类型的处理,因为只有它才可以触发Sizzle。
当进入Sizzle时,一般情况下会配备三参:所要匹配的选择符上下文匹配的结果集。调用正则对传入的selector做一次”预匹配”.

 var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,

上面一串正则,星星点点,都怪我正则没有学。

一般选择器的匹配模式(包括jq1.2之前),都是一个顺序的思维方式,在需要递进式匹配时,比如$(‘div span’)
这样的匹配时,执行的操作都是先匹配页面中div然后再匹配它的节点下的span标签,之后返回结果。

Sizzle则采取了相反Right To
Left的实现方式,先搜寻页面中所有的span标签,再其后的操作中才去判断它的父节点(包括父节点以上)是否为div,是则压入数组,否则pass,进入下一判断,最后返回该操作序列。


看到sizzle的查询规则,记得和之前的相反了。

之前的哦们查找div>p是按照下面的这个步骤去找的:

1.先查找页面上所有的div

2.循环所有的div,查找每个div下的p

3.合并结果

Sizzle用了截然相反的步骤:

1.先查找页面上所有的p

2.循环所有的p,查找每个p的父元素
1.如果不是div,遍历上一层。
2.如果已经是顶层,排除此p。
3.如果是div,则保存此p元素。


所有的选择器都可以这样解析吗?

不是,采用right -> left的顺序是有前提条件的:没有位置关系的约束。

<div> <p id="p1">p1content </p><p id="p2">p2content </p>
</div>
<div> <p id="p3">p3content </p><p id="p4">p4content</p></div>

对于选择器:$(“div p:first”)只会返回["#p1"]

而$(“div p:first-child”)则返回["#p1", “#p3”]

:此处明显看到选择的元素不一样。如果你看过了jquery的样式篇里面,讲有选择器的篇章。你就会知道:

  • first是基本筛选选择器(只会找到所有的第一个元素就不会继续找了)。
  • first-child是子元素筛选选择器(会把所有元素中的父元素的第一个子元素找到,所以返回的找到的元素有可能不止一个)。
  • 两者的区别在于位置filter的结果依赖于它前面的selector解析的结果,而其它 filter,只依赖于当前元素本身,就可以判断它是否满足filter。

那Sizzle是通过什么来判定进入哪一个流程呢

,答案是origPOS的正则匹配,origPos指向了Expr中match对象的POS属性,而POS中存储了五花八门的位置类约束,
jquery的正则表达式汇总

解析jquery的sizzle选择器(一)相关推荐

  1. 转:初探 jQuery 的 Sizzle 选择器

    这是一篇关于介绍jQuery Sizzle选择器的文章,由我和obility共同完成.在文中,我们试图用自己的语言配以适量的代码向读者展现出Sizzle在处理选择符时的流程原理,以及末了以少许文字给你 ...

  2. jQuery 的 Sizzle 选择器

    这是一篇关于介绍jQuery Sizzle选择器的文章,由我和obility共同完成.在文中,我们试图用自己的语言配以适量的代码向读者展现出Sizzle在处理选择符时的流程原理,以及末了以少许文字给你 ...

  3. 初探 jQuery 的 Sizzle 选择器

    这是一篇关于介绍jQuery Sizzle选择器的文章,由我和obility共同完成.在文中,我们试图用自己的语言配以适量的代码向读者展现出Sizzle在处理选择符时的流程原理,以及末了以少许文字给你 ...

  4. jQuery Sizzle选择器

    转载 原文作者:yleo77 这是一篇关于介绍jQuery Sizzle选择器的文章,由我和obility共同完成.在文中,我们试图用自己的语言配以适量的代码向读者展现出Sizzle在处理选择符时的流 ...

  5. JQuery - Sizzle选择器引擎原理分析

    说明:14年学习的jquery源码,搬到这里供大家交流.原文地址:https://segmentfault.com/a/1190000003933990 一.前言 Sizzle原来是jQuery里面的 ...

  6. jQuery中的选择器引擎Sizzle

    读Sizzle的源码,分析的Sizzle版本号是2.3.3. Sizzle的Github主页 浏览器原生支持的元素查询方法: 方法名 方法描述 兼容性描述 getElementById 根据元素ID查 ...

  7. jQuery源码分析 Sizzle选择器

    jQuery版本 version = "1.11.1" 前言 Sizzle是jQuery里面的选择器引擎,在jQuery版本1.11.1中.Sizzle 这部分可以看做jQuery ...

  8. jQuery源码学习(6)-Sizzle选择器(2)

    1.CSS选择器的位置关系: 四种关系:"+" 紧挨着的兄弟关系:">" 父子关系:" " 祖先关系:"~" 之后 ...

  9. jQuery中的选择器引擎Sizzle 1

    读Sizzle的源码,分析的Sizzle版本号是2.3.3. Sizzle的Github主页 浏览器原生支持的元素查询方法: 方法名 方法描述 兼容性描述 getElementById 根据元素ID查 ...

最新文章

  1. 饿了么交易系统5年演化史
  2. skynet 控制台管理使用技巧
  3. python下载安装教程3.8.0-windows中安装Python3.8.0的实现方法
  4. Intellij idea快速查看Java类字节码
  5. Yes, Prime Minister 打表找规律-质数
  6. 洛谷——P1092 虫食算
  7. 在碰撞中成长 - 北京银行的DevOps实践之路
  8. ajax的url怎么将后缀补上_蜂蜜杏仁怎么做?杏仁和蜂蜜腌制方法
  9. 无线网络技术基础 01
  10. php 微信登录 扫码 h5,【小程序】WeAuth微信小程序实现PC网站扫码授权登录
  11. OptiSystem:光纤陀螺仿真-Open-Loop IFOG-Matlab联合仿真
  12. TFS2010用户解锁
  13. C# DevExpress控件安装使用教程
  14. 计算机26字母代码表,电脑打字学习:26个汉语拼音字母攻略
  15. 元宇宙资讯|消息称苹果 MR 头显发售要等到 2025 年
  16. MIRACL密码库分析报告3 mrio.c
  17. redis key导出及删除
  18. python获取windows当前的输入法是中文还是英文
  19. oracle 数据库割接,oracle的一次数据割接(1)
  20. 使用贷款基础利率LPR购房

热门文章

  1. 彭蕾:阿里的人才观,其实很简单,就4个词,8个字
  2. 计算机毕业设计SSM爱音乐网站【附源码数据库】
  3. Lua 学习笔记:C API 遍历 Table
  4. 不负春光不负你,2017 LiveBPM新产品抢先看之--考勤管理
  5. Chromium Embedded Framework (CEF)
  6. 【Linux】SSH免密登录配置
  7. python图书管理系统基本增删改查函数实现
  8. 常用cadence操作
  9. C++使用正则表达式判断GUID格式
  10. 研究生坑导师行为大赏!导师为了让大弟子毕业,不得已自写论文...