【问题标题】:Why jQuery needs Sizzle internally? [closed]为什么 jQuery 在内部需要 Sizzle? [关闭]
【发布时间】: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.querySelectorAlldocument.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

标签: jquery css sizzle


【解决方案1】:

jQuery 的选择器语法包括许多对 CSS 选择器的扩展,例如 :input:selected。你可以看到列表here。这些扩展在 Sizzle 中实现。

如果可以的话,jQuery 将使用querySelectorAll(),但如果需要,它会恢复为 Sizzle。

【讨论】:

  • 那么这些 Sizzle 扩展为规范定义的原生 CSS 选择器提供了语法糖?
  • 是的。例如。 :input 而不是 input, select, textarea
猜你喜欢
  • 2018-03-22
  • 1970-01-01
  • 2021-11-06
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2011-05-27
相关资源
最近更新 更多