一直做梦的猫

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

var Sizzle = function( selector, context, results, seed ) {......}

jQuery选择器主体流程分析:

1.将selector第一个逗号(如果有的话)之前的部分解析为若干个块表达式(例如"div > span.big"将被解析为"div", ">", "span.big"三个表达式块),存入parts数组中,逗号之后的字符串存入extra中

2.如果parts中元素个数大于1,且selector中包含位置表达式,则采用left->right匹配策略

  2.1 若parts中恰只有两个元素且第一个元素是一个关系表达符,则连接parts中的两个元素并作为posProcess的selector参数,以context作为posProcess的context参数,调用posProcess得到结果集set

  2.2 否则,弹出parts头元素作为selector调用Sizzle,因此重复步骤1,得到的结果赋值给set;

    2.2.1 若parts不为空,则弹出parts的头元素作为posProcess的selector参数,以set为posProcess的context数,调用posProcess将结果赋值给set;重复2.2.1

3.若selector中不包含位置表达式或parts中只有一个元素,则采用默认的right->left匹配策略

  3.1 若context不为空

    3.1.1 若seed不为空,说明有现成的候选集,则以seed为候选集且弹出parts尾元素作为筛选条件构建一个obj,赋值给ret;若seed为空,则弹出parts尾元素作为selector调用Sizzle.find,得到结果赋值给ret

    3.1.2 

  3.2 若context为空,则置checkSet为[]

posted on 2013-05-30 12:19  一直做梦的猫  阅读(153)  评论(0)    收藏  举报