sizzle源码分析 (3)sizzle 不能快速匹配时 选择器流程
如果快速匹配不成功,则会进入sizzle自己的解析顺序,主要流程如下:
总结流程如下:
(1)函数sizzle是sizzle的入口,如果能querySelectAll快速匹配,则返回结果
(2)函数Select是sizzle自己的选择流程入口
(3)对于不包含伪类选择器的,从右向左匹配,先选择右边的分词的结果,再验证关系是否成立
(4)对于包含伪类选择器的,则直接进入匹配函数生成流程,最后通过setMatcher这个终极匹配器递归sizzle获得结果
(5)借助condense函数筛选结果
从技术上来说的总结:
(1)NB的正则表达式,各种选择器,分组匹配,反向引用,RegExp的exec的运用。
(2)函数闭包的运用,及时保存当前分词的上下文环境,以用来获得结果。
今天先总结这么多吧,后边再补充