最近一直在研究Sizzle选择器,对于其中的原理确实不得不佩服!
Sizzle中的filter方法,主要负责块表达式过滤元素集合,在方法内部会调用Sizzle.selector.fitler方法执行过滤操作。
Sizzle.filter主要分5个关键步骤:
1 使用LeftMatch确定表达式类型。
2 调用Sizzle.selectors.preFilter预过虑函数,执行过滤前的修正。
3 调用Sizzle.selectors.filter[ type ] 中对应的过滤函数,执行过滤操作,如果返回false,刚将元素集合中的对应位置的元素替换为false;
4 删除表达式中已过滤的部分
5 重复1 - 4 步骤
源码如下:
1 | Sizzle.filter = function( expr, set, inplace, not ) { |