为什么querySelector('#id')映射到document.getElementById('id')?

Ron*_*nny 10 javascript browser css-selectors selectors-api

我最近进入了选择器性能,当我传递document.getElementById一个简单的时候,当前实现Selectors API的浏览器不会使用它,这让我很烦恼#id.

性能损失是巨大的,因此库作者继续以自己的方式实现.

有任何想法吗?

Que*_*tin 12

在做出上述评论后,我决定遵循:

来自Chromium源中的Node.cpp

if (strictParsing && inDocument() && querySelectorList.hasOneSelector() && querySelectorList.first()->m_match == CSSSelector::Id) {
    Element* element = document()->getElementById(querySelectorList.first()->m_value);
    if (element && (isDocumentNode() || element->isDescendantOf(this)) && selectorChecker.checkSelector(querySelectorList.first(), element))
        return element;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

因此它确实映射到getElementById,只是解析查找选择器的字符串是一项昂贵的操作.