解析jquery的sizzle选择器(一)
一看到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选择器(一)相关推荐
- 转:初探 jQuery 的 Sizzle 选择器
这是一篇关于介绍jQuery Sizzle选择器的文章,由我和obility共同完成.在文中,我们试图用自己的语言配以适量的代码向读者展现出Sizzle在处理选择符时的流程原理,以及末了以少许文字给你 ...
- jQuery 的 Sizzle 选择器
这是一篇关于介绍jQuery Sizzle选择器的文章,由我和obility共同完成.在文中,我们试图用自己的语言配以适量的代码向读者展现出Sizzle在处理选择符时的流程原理,以及末了以少许文字给你 ...
- 初探 jQuery 的 Sizzle 选择器
这是一篇关于介绍jQuery Sizzle选择器的文章,由我和obility共同完成.在文中,我们试图用自己的语言配以适量的代码向读者展现出Sizzle在处理选择符时的流程原理,以及末了以少许文字给你 ...
- jQuery Sizzle选择器
转载 原文作者:yleo77 这是一篇关于介绍jQuery Sizzle选择器的文章,由我和obility共同完成.在文中,我们试图用自己的语言配以适量的代码向读者展现出Sizzle在处理选择符时的流 ...
- JQuery - Sizzle选择器引擎原理分析
说明:14年学习的jquery源码,搬到这里供大家交流.原文地址:https://segmentfault.com/a/1190000003933990 一.前言 Sizzle原来是jQuery里面的 ...
- jQuery中的选择器引擎Sizzle
读Sizzle的源码,分析的Sizzle版本号是2.3.3. Sizzle的Github主页 浏览器原生支持的元素查询方法: 方法名 方法描述 兼容性描述 getElementById 根据元素ID查 ...
- jQuery源码分析 Sizzle选择器
jQuery版本 version = "1.11.1" 前言 Sizzle是jQuery里面的选择器引擎,在jQuery版本1.11.1中.Sizzle 这部分可以看做jQuery ...
- jQuery源码学习(6)-Sizzle选择器(2)
1.CSS选择器的位置关系: 四种关系:"+" 紧挨着的兄弟关系:">" 父子关系:" " 祖先关系:"~" 之后 ...
- jQuery中的选择器引擎Sizzle 1
读Sizzle的源码,分析的Sizzle版本号是2.3.3. Sizzle的Github主页 浏览器原生支持的元素查询方法: 方法名 方法描述 兼容性描述 getElementById 根据元素ID查 ...
最新文章
- 饿了么交易系统5年演化史
- skynet 控制台管理使用技巧
- python下载安装教程3.8.0-windows中安装Python3.8.0的实现方法
- Intellij idea快速查看Java类字节码
- Yes, Prime Minister 打表找规律-质数
- 洛谷——P1092 虫食算
- 在碰撞中成长 - 北京银行的DevOps实践之路
- ajax的url怎么将后缀补上_蜂蜜杏仁怎么做?杏仁和蜂蜜腌制方法
- 无线网络技术基础 01
- php 微信登录 扫码 h5,【小程序】WeAuth微信小程序实现PC网站扫码授权登录
- OptiSystem:光纤陀螺仿真-Open-Loop IFOG-Matlab联合仿真
- TFS2010用户解锁
- C# DevExpress控件安装使用教程
- 计算机26字母代码表,电脑打字学习:26个汉语拼音字母攻略
- 元宇宙资讯|消息称苹果 MR 头显发售要等到 2025 年
- MIRACL密码库分析报告3 mrio.c
- redis key导出及删除
- python获取windows当前的输入法是中文还是英文
- oracle 数据库割接,oracle的一次数据割接(1)
- 使用贷款基础利率LPR购房