当我查看jQuery代码源代码时,我对西泽-产生了兴趣,这是一个jQuery用于选择DOM元素的CSS选择器引擎库。因此,我的问题是,为什么jQuery包括一个只用于选择DOM元素的完整库?哪些特性引入了Sizzle,让我们的jQuery在内部使用它?
为了回答这个问题,我对口吻和他的特性做了一些研究,Sizzle的主要功能是Sizzle(selector),这个函数返回一个类似数组的对象,它包含一些方法,允许您对您隔离的DOM元素进行操作,如果您的应用程序频繁地访问DOM,这实际上是非常有用的。但是,在我看来,这不值得包含一个20的代码,我知道口吻也涵盖了不支持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呢?
注意:有一个类似于这个的老问题,但是,我对答案并不满意,因为它更多地关注什么是Sizzle,以及可以做什么?,而不是为什么jQuery使用Sizzle?
我希望我的问题是清楚和对不起我的糟糕的英语,谢谢。
发布于 2020-10-20 01:11:24
jQuery的选择器语法包括许多CSS选择器的扩展,例如:input和:selected。您可以看到列表这里。这些扩展是用Sizzle实现的。
如果可以的话,jQuery将使用querySelectorAll(),但如果有必要,将返回到Sizzle。
https://stackoverflow.com/questions/64435993
复制相似问题