4

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

4

2 回答 2

10

不,它不使用 Sizzle,有一个特殊的快捷方式$("body")您可以在此处查看代码

    // 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;
    }

请注意,这与 , 的结果上下文并不完全相同,因为is(与任何其他 DOM 节点一样)具有自身的上下文。$(document.body)$("body")document$(document.body)

于 2010-12-09T20:06:51.217 回答
6

这直接来自源代码(代码)

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

对于 body 以外的标签

如果你再深入一点,事实证明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, $(...))
}
于 2010-12-09T20:07:00.840 回答