$(“body”)是否使用Sizzle Engine?

时间:2010-12-09 20:03:46

标签: javascript jquery jquery-selectors sizzle

我理解$("#id")更快,因为它映射到本机javascript方法。 $("body")是否也是如此?

2 个答案:

答案 0 :(得分:10)

不,它没有使用Sizzle,$("body")有一个特殊的快捷方式,you can see the code here

    // The body element only exists once, optimize finding it
    if ( selector === "body" && !context && document.body ) {
        this.context = document;
        this[0] = document.body;
        this.selector = "body";
        this.length = 1;
        return this;
    }

请注意,完全$(document.body)相同,因为$("body")生成的上下文为document,其中$(document.body)为{{1}} (像任何其他DOM节点一样)具有自身的上下文。

答案 1 :(得分:6)

直接来自source (code)

if ( selector === "body" && !context && document.body ) {
    this.context = document;
    this[0] = document.body;
    this.selector = "body";
    this.length = 1;
    return this;
}

适用于身体以外的标签

如果你深入挖掘,如果没有给出上下文,他们会使用getElementsByTagName。与使用Sizzle引擎相比,这将提升性能。

// HANDLE: $("TAG")
} else if ( !context && !rnonword.test( selector ) ) {
    this.selector = selector;
    this.context = document;
    selector = document.getElementsByTagName( selector );
    return jQuery.merge( this, selector );

// HANDLE: $(expr, $(...))
}