jQuery选择器源码解读(六):sizzle选择器匹配的逻辑分析

关于啸在线新文章的分析,也就是常说的使用从右到左的顺序反向匹配的匹配方法,但没有详细说明,几篇文章或是我喜欢做的一行代码,但缺乏整体概念,这里jquery-1.10.2版本的嘶嘶声匹配逻辑(预编译的结果)作为一个整体,这里就不谈太多细节。

匹配过程啸是基于逆向匹配方法从右到左,因为HTML的搜索文本匹配毕竟不同于。它有自己独特的一面,所以我们需要优化HTML搜索。下面的关系选择在W3C的组合选择,因为我认为关系选择器的名字比其他人更接近实际的意义。

1。简要介绍了两个主要功能用来编译和执行。

一)matcherfromtokens -执行功能是一块选择产生的,它是没有逗号逗号分隔符分隔的字符串调用选择器。

B)由不同的块matcherfromgroupmatchers选择器产生的最终执行的功能,同时也负责过滤结果过滤掉重复的对象。

2、matcherfromtokens功能的不同类型的选择器产生不同的执行功能。如果一个伪类包括在内,它返回setmatcher,否则返回elementmatcher。代码区分setmatcher和elementmatcher之间是否匹配识别包含扩展属性。

一)非伪非关联选择器,执行的功能是生成依次从左到右,每个函数存在相同的匹配器阵列不同的元素。

B)对关联选择器,先前生成的匹配器将推进到一个新的匹配器阵列。

c)伪类选择器,它会通过setmatcher函数生成一个执行功能。当调用setmatcher,这将反过来,输入6个参数即预过滤器,选择器,匹配,后置滤波器,postfinder,postselector。

预滤器产生的elementmatcher函数生成的setmatcher功能执行匹配功能前最后的功能。ElementMatcher(匹配)将返回一个新的函数的执行,每一个匹配元素的功能序列。

选择对应的匹配选择器字符串;

匹配是一个伪类本身的匹配函数。

再次是第一伪类选择器字符串或关系符号之间的对应匹配功能后是伪类。这是matcherfromtokens嵌套调用函数的结果。

postfinder是匹配函数生成的所有选择器后后置滤波器对应的选择器,也叫回来matcherfromtokens嵌套函数的结果。

postselector对应postfinder选择器字符串。

d)如果在选择器字符串没有伪类,那么最终的匹配函数产生的elementmatcher(匹配)返回。

从上面的介绍中,我们可以看到生成的执行函数之间存在嵌套关系。总之,setmatcher包括匹配,与选择器匹配功能包括非伪类选择器匹配函数和非关系。

三.介绍实施过程:

a)执行块选择器的执行函数:

对于elementmatcher,它是从外到内执行,从前线回来,即从外层到最内层数组数组。在同一个数组中,从最后一个元素到第一个元素依次执行。

对于setmatcher,先匹配基于预选择的结果。然后我们进行匹配函数得到的匹配结果。之后,我们进行后置滤波器的功能。最后,我们得到匹配的基础上postfinder和postselector结果。

(c)依次执行每个块选择器的执行函数后,重复的数据被过滤出来,结果返回。



看看上面的过程,我们可以看到每种方法的详细介绍应该更容易理解。当然,没有关于它的细节,例如,初始结果集(种子)的生成以及由此产生的函数执行逻辑的差异。