【发布时间】:2021-02-02 17:46:12
【问题描述】:
当我查看 jQuery 代码源时,我对Sizzle-js 产生了兴趣,这是一个 jQuery 用于选择 DOM 元素的 CSS 选择器引擎库。所以,我的问题是为什么 jQuery 包含一个仅用于选择 DOM 元素的整个库?什么特性引入了 Sizzle 让 jQuery 内部使用它?
为了回答这个问题,我对Sizzle和他的特性做了一些研究,Sizzle的主要功能是Sizzle(selector),这个函数返回一个类似数组的对象,其中包含一些允许你操作的方法您已经隔离了 DOM 元素,如果您的应用程序经常接触 DOM,这实际上非常有用。但是,在我看来,这不值得包含 20KB 的代码,我知道 Sizzle 也涵盖了不支持 Document.querySelectorAll 功能的旧浏览器版本,但我仍然不相信!
其实你可以用几行代码做 Sizzle 做的(模拟概念),我已经基于querySelectorAll写了一个非常简单的例子:
var Select = function(selector) {
if (typeof selector !== 'string') throw 'selector must be of type string';
var client = function() {
var eles = document.querySelectorAll(selector), i = eles.length;
this.length = eles.length;
while(i--) {
this[i] = eles[i];
}
};
client.prototype = Array.prototype;
return new client();
};
console.log(Sizzle('div').includes(document.querySelector('div'))); // true
console.log(Select('div').includes(document.querySelector('div'))); // true
var divs = Select('div');
divs.forEach(function(div) {
div.textContent = 'Changed!!';
});
那么为什么 jQuery 仍然使用 Sizzle? document.querySelectorAll 和 document.querySelector 现在可以在现代浏览器中使用,为什么 jQuery 仍然依赖于 Sizzle?
注意:有一个与此类似的old question,但是,我对答案不满意,因为它更多地关注什么是 Sizzle JS,可以做什么? ,而不是为什么 jQuery 使用 Sizzle?。
我希望我的问题很清楚,对不起我的英语不好,谢谢。
【问题讨论】:
-
这个底部的答案可能对你有帮助stackoverflow.com/questions/60685782/…
-
@Canvas 好问题,谢谢!!
-
历史是这样的:Javascript 被讨厌。 Javascript 被采用。 Javascript 很难。引入了很多库。 jQuery/Sizzle 让一切变得简单。 jQuery 是赢家。一些 jQuery 开发人员去了 Google。 Javascript 采用了 jQuery 的部分内容,例如“querySelector”。 jQuery 现在是传统的。 “RIP” jQuery。我爱你。
-
jQuery 比
document.querySelectorAll()早了很多年。 -
@Barmar,是的,你是对的。但是为什么它仍然使用 Sizzle,即使
document.querySelectorAll被引入并且现在得到广泛支持,为什么 jQuery 直到这个时候才开始使用原生的querySelectorAll?