读书人

jQuery 2.0.3 源码分析Sizzle发动机 -

发布时间: 2013-10-27 15:21:50 作者: rapoo

jQuery 2.0.3 源码分析Sizzle引擎 - 解析原理

jQuery 2.0.3 源码分析Sizzle引擎 - 解析原理

声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢!

先来回答博友的提问:

如何解析

div > p + div.aaron input[type="checkbox"]

顺便在深入理解下解析的原理:

HTML结构

jQuery 2.0.3 源码分析Sizzle发动机 - 解析原理
<div id="text">  <p>     <input type="text" />  </p>  <div class="aaron">     <input type="checkbox" name="readme" value="Submit" />     <p>Sizzle</p>  </div></div>
jQuery 2.0.3 源码分析Sizzle发动机 - 解析原理

选择器语句

div > p + div.aaron input[type="checkbox"]

组合后的意思大概就是:

1. 选择父元素为 <div> 元素的所有子元素 <p> 元素

2. 选择紧接在 <p> 元素之后的所有 <div> 并且class="aaron " 的所有元素

3. 之后选择 div.aaron 元素内部的所有 input并且带有 type="checkbox" 的元素

就针对这个简单的结构,我们实际中是不可能这么写的,但是这里我用简单的结构,描述出复杂的处理

我们用组合语句,jquery中,在高级浏览器上都是用过querySelectorAll处理的,所以我们讨论的都是在低版本上的实现,伪类选择器,XML 要放到后最后,本文暂不涉及这方便的处理.

需要用到的几个知识点:

1: CSS选择器的位置关系

2: CSS的浏览器实现的基本接口

3: CSS选择器从右到左扫描匹配


CSS选择器的位置关系

文档中的所有节点之间都存在这样或者那样的关系

jQuery 2.0.3 源码分析Sizzle发动机 - 解析原理

其实不难发现,一个节点跟另一个节点有以下几种关系:

祖宗和后代

父亲和儿子

临近兄弟

普通兄弟

在CSS选择器里边分别是用:空格;>;+;~

(其实还有一种关系:div.aaron,中间没有空格表示了选取一个class为aaron的div节点)

jQuery 2.0.3 源码分析Sizzle发动机 - 解析原理
<div id="grandfather">  <div id="father">    <div id="child1"></div>    <div id="child2"></div>    <div id="child3"></div>  </div></div>
jQuery 2.0.3 源码分析Sizzle发动机 - 解析原理

读书人网 >Web前端

热点推荐