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

标签 javascript browser css-selectors selectors-api

我最近对选择器的性能很感兴趣,令我烦恼的是,当前实现选择器 API 的浏览器在简单的 #id 时不使用 document.getElementById正在通过。

性能损失是 huge , 因此图书馆作者继续围绕这一点实现他们自己的方式。

有什么想法吗?

最佳答案

在做出上述评论后,我决定继续:

来自 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;
}

所以它确实映射到getElementById,只是解析字符串以寻找选择器是一项昂贵的操作。

关于javascript - 为什么 querySelector ('#id' ) 不映射到 document.getElementById ('id' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4298504/

相关文章:

javascript - 如何通过javascript中的函数返回对象属性

javascript - 为什么在页面转换时不调用 next-auth jwt 回调?

javascript - 如何强制浏览器重新加载缓存的 URL 而不更改 URL

html - 使 Div 开关 float

css - 我可以在 LESS mixin 中使用 CSS 伪类数组吗?

javascript - 无法从样式化的文本区域获取文本

javascript - 在 Node js 中用另一个替换字符串的所有 URL 出现

python - 在 Ubuntu 中从 Python 更改浏览器代理设置?

jquery - 尝试使用动态字母间距进行拉伸(stretch)时,字体对齐问题

CSS 三重后代选择器