jQuery Sizzle.find [ 源码分析 ]

Sizzle.find = function( expr, context, isXML ) {
	var set, i, len, match, type, left;
	//expr是否为空
	if ( !expr ) {
		return [];
	}

	for ( i = 0, len = Expr.order.length; i < len; i++ ) {
		type = Expr.order[i];
		//根据Expr.order,即Sizzle.selectors.order 的四种类型:ID,CLASS,NAME,TAG
		//与leftMatch确定 expr 的类型
		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
			//left 官方说是为了确定之后的表达式是否有被转义,
			//人个认为这里的left基本没有意义
			left = match[1];
			match.splice( 1, 1 );

			if ( left.substr( left.length - 1 ) !== "\\" ) {
				//对match[1] 中的进行再次转换,如 \: 转义为 : ,\. 转为 .
				match[1] = (match[1] || "").replace( rBackslash, "" );
				//针对不同的type调用不同的find方法,返回查询结果,对应的元素集合
				set = Expr.find[ type ]( match, context, isXML );
				//查询结果不为空,那么删除掉已经查询过的表达式
				if ( set != null ) {
					expr = expr.replace( Expr.match[ type ], "" );
					break;
				}
			}
		}
	}
	//如果结果为空,那么采用如下方式寻找
	if ( !set ) {
		set = typeof context.getElementsByTagName !== "undefined" ?
			context.getElementsByTagName( "*" ) :
			[];
	}
	//返回临时结果
	return { set: set, expr: expr };
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值