我一直在网上搜索,例如here ,关于 jquery $
函数实际上是如何定义的。那就是如何用普通的 javascript 实现 jquery 选择器的相同功能?
到处都说 jquery 使用 document.querySelectorAll()
。即 $
可能定义如下:
function $(mystring) {
return document.querySelectorAll(mystring);
}
这是一个很好的解释。但我的问题是,当浏览器中没有 querySelectorAll
时,jquery 使用了什么?没有 querySelector 怎么可能像我们在 css 中那样选择元素?例如。 .container .row { ... }
在 css 中选择每个具有 row
类的元素,它位于具有 container
类的元素内。但在纯 JavaScript 中,我们只有 document.getElementById
或 document.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/