javascript - jquery $ selector 在 querySelector 不可用之前是如何定义的?

标签 javascript jquery html css jquery-selectors

我一直在网上搜索,例如here ,关于 jquery $ 函数实际上是如何定义的。那就是如何用普通的 javascript 实现 jquery 选择器的相同功能?

到处都说 jquery 使用 document.querySelectorAll()。即 $ 可能定义如下:

function $(mystring) {
  return document.querySelectorAll(mystring);
}

这是一个很好的解释。但我的问题是,当浏览器中没有 querySelectorAll 时,jquery 使用了什么?没有 querySelector 怎么可能像我们在 css 中那样选择元素?例如。 .container .row { ... } 在 css 中选择每个具有 row 类的元素,它位于具有 container 类的元素内。但在纯 JavaScript 中,我们只有 document.getElementByIddocument.getElementsByClassName

我看到 jquery 唯一的选择是使用正则表达式或将 mystring 传递给各种条件,例如检查第一个字符是#还是.,是否有空格>~ mystring 中的关键字,然后相应地使用 Node.childNodes 返回正确的元素。

最佳答案

正如评论所说,jQuery 是建立在 Sizzle JS 之上的具有复杂选择器算法的引擎。

你可以在这里看到它在 jQuery 1 中的使用:

http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js

搜索 Expr = Sizzle.selectors = {

即使现在 jQuery 只是简单地使用 Sizzle,但是考虑到 querySelectorAll 的使用,Sizzle 变得更加复杂。

关于javascript - jquery $ selector 在 querySelector 不可用之前是如何定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39979816/

相关文章:

javascript - Web Worker 内的 RequireJS – onmessage 未调用

javascript - jQuery 标签编辑器?

jquery - 基本 jQuery Slider (bjqs) 响应问题

javascript - 操作内存中 jQuery 对象的 textarea 值

html - 边框不应与图像边对边

css - 在无序列表旁边剩余的宽度上跨越 div?

javascript - 如何在 javascript 语言绑定(bind)中使用 RemoteWebDriver? (在 Node.js 上运行)

javascript - 为什么 document.getElementById 返回一个具有名为 'value' 的属性的对象?

javascript - 有没有快速的方法来替换 IE 中的大 tbody?

javascript - 如何获取滚动条内可见div的id