jQuery是如何使用Sizzle的?

Kumako
  • 202

在阅读jquery源码时,有些疑惑,jquery通过init()方法来构建新的jquery对象,我的理解是使用所有通过jQuery(" ")或者$("")方法创建的,都是新的jquery对象,这个字符串""作为selector传入init函数。

init: function( selector, context, rootjQuery ) {
//do something
}

在这段代码中,init()方法内对selector做了些处理,但是感觉只是匹配了简单的选择情况 如<>标签和#id
没有sizzle的css选择器那样强大。所以有一个很大的疑问,**jquery是怎样调用sizzle引擎的呢?

我找到jqeury中sizzle的部分,在最后一行发现下面的代码

(function( window, undefined ) {
//很长 略
jQuery.find = Sizzle;
//略
})( window );

然后找回init()函数里,使用了find的代码部分如下,

 init: function( selector, context, rootjQuery ) {
      //略
      } else if ( !context || context.jquery ) {
                    return ( context || rootjQuery ).find( selector );
    
                // HANDLE: $(expr, context)
                // (which is just equivalent to: $(context).find(expr)
                } else {
                    return this.constructor( context ).find( selector );
                }

所以这里应该就是平时使用最多的css选择器情况 $("div.a p.b")这样的形式
想请教一下,我这样理解对吗?另外这段是如何对应sizzle的css选择器的。。平常写代码时,几乎只用到过$("")传入selector一个参数的情况,这个context和rootjQuery不太明白。。。

回复
阅读 3k
1 个回答

selector是选择器,context是html标签,rootJquery是$()

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏