$(“body”) 使用 Sizzle 引擎吗?

发布于 2024-10-06 17:59:09 字数 89 浏览 8 评论 0原文

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

I understand that $("#id") is faster because it maps to a native javascript method. Is the same true of $("body")?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷情 2024-10-13 17:59: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;
    }

请注意,这与 $( 不太相同 document.body),因为 $("body") 的结果上下文是 document,其中 $(document.body) code> (像任何其他 DOM 节点一样)有自己的上下文。

No it does not use Sizzle, there's a special shortcut for $("body") in place, 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;
    }

Note that this isn't quite the same as $(document.body), as the resulting context of $("body") is document, where as $(document.body) (like any other DOM node) has a context of itself.

糖果控 2024-10-13 17:59:10

这直接来自源(代码)

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, $(...))
}

This is straight from the source (code):

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

For tags other than body

If you dig a little deeper it turns out they will use getElementsByTagName if no context is given. This will give a nice boost to performance over using the Sizzle engine.

// 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, $(...))
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文