sizzle源码分析 (3)sizzle 不能快速匹配时 选择器流程

如果快速匹配不成功,则会进入sizzle自己的解析顺序,主要流程如下:

总结流程如下:

(1)函数sizzle是sizzle的入口,如果能querySelectAll快速匹配,则返回结果

(2)函数Select是sizzle自己的选择流程入口

(3)对于不包含伪类选择器的,从右向左匹配,先选择右边的分词的结果,再验证关系是否成立

(4)对于包含伪类选择器的,则直接进入匹配函数生成流程,最后通过setMatcher这个终极匹配器递归sizzle获得结果

(5)借助condense函数筛选结果

从技术上来说的总结:

(1)NB的正则表达式,各种选择器,分组匹配,反向引用,RegExp的exec的运用。

(2)函数闭包的运用,及时保存当前分词的上下文环境,以用来获得结果。

今天先总结这么多吧,后边再补充

原文地址:https://www.cnblogs.com/mufc-go/p/3319935.html