jQuery维护者更新并过渡jQuery UI作为整体现代化努力的一部分

发布于 作者

作者:Michal Golebiowski-Owczarek、Felix Nagel 和 jQuery 团队

编者注:以下博文最初发布在 OpenJS Foundation 博客

jQuery 项目积极维护并广泛实施——它被 1000 万个最受欢迎网站中的 73% 使用。作为其持续现代化项目的一部分,jQuery 维护者已采取措施通过谨慎的过渡来逐步停止其在 jQuery 伞下运行的其中一个项目。

今天,jQuery UI 发布了 1.13 版——这是该项目 5 年来的第一个版本,也是该项目计划的最后一个版本。也许最重要的更新是 jQuery UI 1.13 现在运行在最新版本的 jQuery Core 上,除了社区修复和改进之外,还提供了许多先前版本中缺少的浏览器兼容性和安全更新。jQuery UI 下载构建器也已恢复并更新,因此开发人员可以继续与他们喜欢的主题一起下载 UI。该版本是所有 jQuery 项目正在进行的一系列更新的一部分。

jQuery UI 处于仅维护模式。用户不应期望有任何新版本发布,但可能会发布补丁来解决关键的安全、互操作性或回归错误。该项目的错误跟踪工具 Trac 已处于只读模式,开发人员被要求在该项目的 GitHub 存储库 上提交任何严重问题。

jQuery UI 最初于 2007 年 9 月推出,作为一组精选的用户界面交互、效果、小部件和主题,建立在 jQuery 库之上。它很快流行起来,因为它当时是测试最充分、最易访问的 UI 框架之一。该工具帮助开发人员使用当时的最佳实践构建 UI 组件,如表单控件和日期选择器。在其鼎盛时期,jQuery UI 被广泛的企业采用,包括 Pinterest、PayPal、IMDB、Huffington Post 和 Netflix。

如今,jQuery UI 仍然是 jQuery Core 更新的重要测试平台,帮助维护者团队发现随着 Web 平台发展而出现的问题和互操作性问题。

庆祝jQuery UI的历史

随着 2006 年 jQuery 的推出,Web 开发人员能够比以往更快、更容易地访问和操作 DOM 和 CSS。创建了数千个 jQuery 开源小部件和插件来处理以前棘手的问题,例如显示和隐藏元素、在图像轮播中循环或在日历上选择日期。jQuery 生态系统成为了一个充满工具的游乐场,使 Web 上的新颖而有趣的交互成为可能。

“新颖而有趣”并不总是转化为“好而有用”——尽管有许多好的插件可用,但并不总是很容易判断哪一个性能最高或提供最佳的用户体验。开发人员可能需要搜索合适的工具,或者更糟糕的是,花费大量时间在多个插件之间切换以确定哪个最适合。此外,Web 上的用户体验最佳实践示例很少,因此访问一个网站的访问者在另一个网站上执行类似任务时可能会产生截然不同的(因此令人困惑的)交互。

jQuery Core 团队的成员希望帮助开发人员为他们的网站和应用程序编写高性能、高质量和可重复使用的 jQuery 组件。经过一些讨论,创建了一个具有严格的编码、文档和主题标准的第二个库的想法应运而生。该项目的愿景和目标包括:开发协作的设计过程;提供灵活的样式和主题;创建优雅的视觉和交互设计;提供强大的 API;以及优先考虑渐进增强、可访问性、国际化和本地化支持。

2007 年 9 月,jQuery UI 正式发布,作为一组建立在 jQuery 之上的用户界面交互、效果、小部件和主题。此后不久,该团队将重点转移到提供一套完整的 API 和方法,以允许开发人员创建灵活的、功能齐全的小部件,以满足高质量的标准。添加了诸如缓动和动画之类的 CSS 效果,帮助开发人员创建更现代、更增强的体验。Filament Group 的团队后来添加了一个 ThemeRoller,允许开发人员通过提供可自定义的主题样板快速入门。ThemeRoller 今天仍然可以使用。

到 2008 年底,jQuery UI 拥有一个不断发展的用户、开发人员和交互设计师社区,他们定期为该项目提供更新和改进,因为最佳实践和样式偏好不断发展。在 2009 年至 2016 年之间,社区提供了一系列新的官方和非官方主题和插件、互操作性和其他错误修复、强大的测试流程以及对多个版本的 jQuery 的支持。

jQuery UI 的上一个官方版本发布在 2016 年 9 月,距其启动近十年。在那段时间里,jQuery 社区帮助激发了数十个其他开源项目、模式和组件库的诞生。但更新的 CSS 框架和方法开始流行起来,社区逐渐转向其他项目。UI 团队和 jQuery Mobile 团队合并,该团队更加专注于维护和与 jQuery Core 的兼容性。

jQuery UI 在 2018 年成为 OpenJS Foundation 荣誉项目,承认它正在逐渐停止,同时指出它对 JavaScript 生态系统的重要性。

庆祝jQuery UI维护者和贡献者

该项目的范围和社区的包容性帮助无数 Web 制作者培养了对用户体验、本地化、国际化、可访问性和简洁、可重复使用代码的热爱和欣赏。尽管许多工作时间和贡献用于使 jQuery UI 成为一个成功的库,但 jQuery UI 核心团队应为十多年来辛勤工作,在整个项目生命周期内引导工作和社区而获得额外的认可。Alex SchmitzJörn ZaeffererFelix NagelMike SherovRafael Xavier de SouzaScott González 领导了一个 团队,其中包括许多核心贡献者和超过 300 位其他作者

对 Michał Gołębiowski-Owczarek 在过去一年中准备 1.13 版本并管理存储库表示额外的感谢。

OpenJS Foundation 将永远感谢这些开源开发人员的工作以及他们通过工作对生态系统产生的影响。请与我们一起庆祝这些开发人员和 jQuery UI!

jQuery 项目更新解决临时 CDN 问题

发布于 作者

作为其持续基础设施更新的一部分,jQuery 基础设施团队正在进行配置和部署更改以解决一些用户报告的间歇性中断。该问题是由于错误的 IP 允许列表导致的,影响了从某些 IP 地址下载 jQuery 项目资产的用户。

预计该问题将在未来几周内解决。在此期间,用户可以通过下载并提供他们需要的文件来缓解该问题。

CDN 迁移是该项目今年正在进行的基础设施改进项目的一部分。基础设施团队计划在今年夏天晚些时候提供这些改进的完整概述,这些改进将有助于支持 jQuery 及其相关项目的长期维护。

jQuery 仍然是一个广泛使用的开源项目,拥有活跃的维护者。虽然许多网站在本地托管 jQuery,但其他网站依赖 jQuery CDN 按需提供库。平均而言,jQuery CDN 每月提供超过 2 PB 的代码。该项目托管在 OpenJS Foundation,这是一个供应商中立的组织,致力于发展和维护 JavaScript 和 Web 生态系统。

jQuery 3.6.0 发布!

发布于 作者

jQuery 3.6.0 已发布!在 jQuery 3.5.0 中,主要变化是针对 html 预过滤器进行了安全修复。此版本不包含安全修复,但确实包含一些错误修复和改进。我们仍然关注 jQuery 4.0 的发布,但在那之前,我们将继续支持 3.x 分支并解决重要问题。

与往常一样,该版本可在 我们的 CDN 和 npm 包管理器上获得。其他第三方 CDN 可能很快也会发布,但请记住我们不控制它们的发布计划,它们需要一些时间。以下是 jQuery 3.6.0 的亮点

即使在 JSONP 错误情况下也返回 JSON

您可能从次要版本中猜到,此版本中有一个功能偷偷地潜入了进来。在以前版本中,当 JSONP 请求以错误响应时,响应通常仍然是一个可执行脚本。我们已将默认行为更改为尝试在这种情况下执行响应。当遇到错误时,仍将跳过普通脚本。有关更多信息,请参见 gh-4771

修复

值得重点介绍的一个错误与在 focus 处理程序中将焦点重定向到另一个元素有关。以这个例子为例,其中一个 focus 处理程序在另一个 focus 处理程序中被触发。

elem1.on( "focus", function() {
  elem2.trigger( "focus" );
} );

由于它们在 IE 之外的所有地方都是同步的,因此在 3.4.0 中添加的一个修复程序利用了原生事件,导致原生 .focus() 方法在初始元素的最后被调用,从而使其夺回了焦点。虽然代码继续利用原生的 focus 和 blur 事件,但我们能够通过更多地与原生方法保持一致并仅将最后一个 focus 事件向上传播到 DOM 树来修复此问题。

其他错误修复和改进包括针对在 Firefox 中检索表格行尺寸的修复,针对在 Chrome 中,当 focusout 事件在已删除的元素上触发时发生崩溃的修复,对某些测试的若干改进等等。您将在下面的完整变更日志中找到它们。

升级

除了不再为您确保 XHTML 兼容的标记的更改之外,我们不希望在从 jQuery 3.0+ 版本升级时出现其他兼容性问题。要升级,请查看新的3.5 升级指南。如果您尚未升级到 jQuery 3+,请先查看3.0 升级指南

jQuery Migrate 插件将帮助您识别代码中的兼容性问题。请试用这个新版本,并告知我们您遇到的任何问题

如果您还无法升级到 3.5+,Daniel Ruf 已经提供了针对先前 jQuery 版本的补丁

下载

您可以从 jQuery CDN 获取文件,或者直接链接到它们。

https://code.jqueryjs.cn/jquery-3.6.0.js

https://code.jqueryjs.cn/jquery-3.6.0.min.js

您也可以从 npm 获取此版本。

npm install jquery@3.6.0

精简版

有时您不需要 ajax,或者您更喜欢使用专注于 ajax 请求的众多独立库之一。而且,通常使用 CSS 和类操作来进行 web 动画更加简单。除了包含 ajax 和效果模块的 jQuery 正式版本之外,我们还发布了一个“精简版”,它排除了这些模块。如今,jQuery 的大小很少会成为负载性能的困扰,但精简版比正式版本压缩后小约 6k 字节。这些文件也可以在 npm 包和 CDN 上找到。

https://code.jqueryjs.cn/jquery-3.6.0.slim.js

https://code.jqueryjs.cn/jquery-3.6.0.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方法的信息,请访问https://jqueryjs.cn/download/。公共 CDN 会在今天收到它们的副本,请给他们几天时间来发布文件。如果您急于快速开始,请使用我们 CDN 上的文件,直到它们有机会更新。

感谢

感谢所有通过提交补丁、报告错误或测试参与此版本发布的人,包括Dallas FraserMichal Golebiowski-OwczarekWonseop KimWonhyoung ParkBeatriz RezenerNatalia Sroka,以及整个 jQuery 团队。

变更日志

完整变更日志:3.6.0

Ajax

核心

延迟

  • 将 master 重命名为 primary (15b62a2e)

尺寸

  • 修改可靠的 TrDimensions 支持测试以考虑 FF (#4529bcd40aa7)

文档

  • 将 JS 基金会提及改为 OpenJS 基金会 (db43ef0b)

事件

选择器

支持

  • 确保为支持 div 设置 display 为 block (#4844) (#4832f8bdb127)

测试

  • 修复没有 dataType 的脚本不自动执行的测试 (7298e04f)
  • 在 Legacy Edge 中跳过 jQuery.parseXML 错误报告测试 (bf06dd47)
  • 修复 jQuery.parseXML 错误报告测试 (1ec36332)
  • 在 Node.js 模拟服务器中识别具有点的回调 (4c572a7f)
  • 在 Safari 中跳过“jQuery.ajax() 在卸载时”测试 (4f016c64)
  • 删除一个未使用的局部变量 (beea433d)
  • 删除剩余的过时的 jQuery.cache 引用 (5e028c76)
  • 删除过时的 jQuery 数据测试 (8ad78cdb)

jQuery 3.5.1 发布:修复回归

发布日期: 作者:

我从未在 jQuery 版本发布中说过这句话,但愿原力与你同在!就在不久前,在这个与我们完全一样的星系中,我们发布了 jQuery 3.5.0。我们针对该版本中出现的一个回归进行了快速修复。

具体来说,我们已将内部数据对象更改为使用 Object.create( null ) 而不是普通对象 ({})。我们这样做是为了防止与 Object.prototype 属性上的键发生冲突。但是,这也意味着用户(尤其是插件)不能再使用本机的 .hasOwnProperty() 方法检查 jQuery 数据中的内容,而且它破坏了一些代码。我们已恢复了该更改,但计划将其放回到 jQuery 4.0 中。此更改是此版本中唯一的代码更改。其他更改包括对文档和构建系统的一些小更新。

3.5.0 中的安全修复

jQuery 3.5.0 包含针对 jQuery DOM 操作方法(如 .html().append() 等)中的两个安全问题的修复。这两个问题的安全建议已在 GitHub 上发布。虽然我们在jQuery 3.5.0 博客文章中提供了第一个问题的所有详细信息,但我们没有提供第二个问题的所有详细信息,并希望在此文章中进行说明。

第二个问题与第一个问题非常相似。这是一个 XSS 漏洞,与将 <option> 元素传递给 jQuery 的 DOM 操作方法有关。本质上,我们使用正则表达式将 <option> 元素包装在 <select> 元素中,以确保这些元素在旧版 IE 中被正确解析(IE <= 9 在插入 <select> 元素之外时,会将所有 <option> 标记替换为其内容)。

我们的修复是仅在需要时应用此代码。幸运的是,由于 IE9 中的解析行为不同,我们可以在 IE9 中保留修复程序,而不会使其暴露于与其他浏览器相同的漏洞中。请在您有机会时升级,以避免这些漏洞。

升级

如果您尚未升级到 jQuery 3.5,请查看3.5 升级指南。如果您尚未升级到 jQuery 3+,请先查看3.0 升级指南。此外,jQuery Migrate 插件将帮助您识别代码中的兼容性问题。

如果您还无法升级到 3.5+,Daniel Ruf 已经提供了针对先前 jQuery 版本的补丁。请试用这个新版本,并告知我们您遇到的任何问题

下载

您可以从 jQuery CDN 获取文件,或者直接链接到它们。

https://code.jqueryjs.cn/jquery-3.5.1.js

https://code.jqueryjs.cn/jquery-3.5.1.min.js

您也可以从 npm 获取此版本。

npm install jquery@3.5.1

精简版

有时您不需要 ajax,或者您更喜欢使用专注于 ajax 请求的众多独立库之一。而且,通常使用 CSS 和类操作来进行 web 动画更加简单。除了包含 ajax 和效果模块的 jQuery 正式版本之外,我们还发布了一个“精简版”,它排除了这些模块。如今,jQuery 的大小很少会成为负载性能的困扰,但精简版比正式版本压缩后小约 6k 字节。这些文件也可以在 npm 包和 CDN 上找到。

https://code.jqueryjs.cn/jquery-3.5.1.slim.js

https://code.jqueryjs.cn/jquery-3.5.1.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方法的信息,请访问https://jqueryjs.cn/download/。公共 CDN 会在今天收到它们的副本,请给他们几天时间来发布文件。如果您急于快速开始,请使用我们 CDN 上的文件,直到它们有机会更新。

感谢

感谢所有通过提交补丁、报告错误或测试参与此版本发布的人,包括Pierre GrimaudMichal Golebiowski-OwczarekEd Svanillajonathan,以及整个 jQuery 团队。

变更日志

完整变更日志:3.5.1

构建

  • 在 Node.js 14 上测试,停止在 Node.js 8 和 13 上测试 (205dd134)
  • 在 ESLint 中启用 reportUnusedDisableDirectives (b21d6710)
  • 将 3.x-stable 版本更新到 3.5.1-pre。 (898784ab)

数据

文档

  • 修复拼写错误 (ea3766c0)
  • 更新指向 jsdom 存储库的链接 (f7fed7ee)
  • 在 README 中使用 https 作为超链接 (763dd3fe)

测试

  • 解决 iOS 8 - 12 中最近的 XSS 测试失败问题 (ea2d0d50)
  • 添加对最近修复的操作 XSS 问题的测试 (58a8e879)
  • 清理新事件测试中的 windowdocument 处理程序 (c1c0598d)
  • 修复“jQuery.ajax() - JSONP - 同域”测试中的不稳定性 (46ba70c5)

jQuery 3.5.0 发布!

发布日期: 作者:

jQuery 3.5.0 已发布!与往常一样,该版本可在我们的 cdn 和 npm 包管理器上获得。其他第三方 CDN 也许很快就会提供它,但请记住我们不控制它们的发布时间表,它们需要一些时间。

我们希望您在许多人被困在家里的时候能够保持健康和安全。随着一种病毒肆虐全球,我们意识到 jQuery 对于您或您管理的网站可能不是优先事项。当您有时间的时候,我们建议您查看这个新版本并进行升级。

安全修复

此版本的主要变化是安全修复,您可能需要更改自己的代码以适应。 以下是原因: jQuery 在其 jQuery.htmlPrefilter 方法中使用正则表达式,以确保所有结束标签在传递给方法时符合 XHTML 规范。 例如,此预过滤器确保像 jQuery("<div class='hot' />") 这样的调用实际上被转换为 jQuery("<div class='hot'></div>")。 最近,有报告称正则表达式可能导致跨站点脚本 (XSS) 漏洞。

jQuery <=3.4.1 中的 HTML 解析器通常会执行正确的操作,但存在解析会导致意外后果的边缘情况。 jQuery 团队一致认为有必要在次要版本中修复此问题,即使某些代码依赖于之前的行为并且可能会中断。 jQuery.htmlPrefilter 函数在 3.5.0 中不使用正则表达式,并且会将字符串原样传递。

如果您绝对需要旧的行为,使用最新版本的 jQuery migrate 插件 提供一个函数来恢复旧的 jQuery.htmlPrefilter。 包含插件后,您可以调用 jQuery.UNSAFE_restoreLegacyHtmlPrefilter(),jQuery 将再次确保符合 XHTML 的结束标签。

但是,为了正确地清理用户输入,我们还建议使用 dompurify 以及 SAFE_FOR_JQUERY 选项来清理用户提供的 HTML。 如果您不需要旧的行为,但仍希望清理用户提供的 HTML,从 jQuery 3.5.0 开始,应使用 dompurify **不带** SAFE_FOR_JQUERY 选项。 有关更多详细信息,请参阅 3.5 升级指南

功能

随着我们称之为“位置选择器”的弃用以及 计划在 jQuery 4.0 中删除,我们添加了最后两个必要的替换方法。 具体来说,我们添加了 .even().odd() 方法来替换 :even:odd 选择器。 这些方法到位后,我们可以在 jQuery 4.0 中安全地删除这些过于复杂的选择器。

我们添加到此版本中的另一个小功能是能够在 jQuery.globalEval 中添加上下文。 这是作为修复 iframe 中脚本执行的错误 的一部分完成的。

修复

值得一提的一个错误是 我们在 Ajax 脚本传输中修复的错误。 jQuery 以前将对脚本请求的任何响应评估为脚本,这并不总是期望的行为。 这与其他数据类型不同,在这种情况下,这种约定是可以接受的(例如,在 JSON 的情况下)。 jQuery 3.5.0 现在只评估成功的 HTTP 响应。

其他错误修复和改进包括 Sizzle 的 性能 改进,对 jQuery.map 中的大型数组的支持,在受支持的情况下使用原生 .flat() 方法修复 AMD 模块中的语法错误,对我们的测试基础设施的若干改进等等。 您将在下面找到完整的更改日志。

弃用

如果没有一些弃用,就不是 jQuery 版本。 在 jQuery 3.5.0 中,我们已经将 jQuery.trim 添加到列表中。 JavaScript 自己的 String.prototype.trim() 是它的简单替代方案。

我们还将 AJAX 事件别名 添加到列表中,它们可以用 .on("ajaxStart", …) 等替换。 jQuery Migrate 现在会发出有关这些已弃用方法的警告,但它们会保留到 jQuery 4.0。

升级

除了不再为您确保 XHTML 兼容的标记的更改之外,我们不希望在从 jQuery 3.0+ 版本升级时出现其他兼容性问题。要升级,请查看新的3.5 升级指南。如果您尚未升级到 jQuery 3+,请先查看3.0 升级指南

jQuery Migrate 插件将帮助您识别代码中的兼容性问题。请试用这个新版本,并告知我们您遇到的任何问题

如果您还无法升级到 3.5+,Daniel Ruf 已经提供了针对先前 jQuery 版本的补丁

下载

您可以从 jQuery CDN 获取文件,或者直接链接到它们。

https://code.jqueryjs.cn/jquery-3.5.0.js

https://code.jqueryjs.cn/jquery-3.5.0.min.js

您也可以从 npm 获取此版本。

npm install jquery@3.5.0

精简版

有时您不需要 ajax,或者您更喜欢使用专注于 ajax 请求的众多独立库之一。而且,通常使用 CSS 和类操作来进行 web 动画更加简单。除了包含 ajax 和效果模块的 jQuery 正式版本之外,我们还发布了一个“精简版”,它排除了这些模块。如今,jQuery 的大小很少会成为负载性能的困扰,但精简版比正式版本压缩后小约 6k 字节。这些文件也可以在 npm 包和 CDN 上找到。

https://code.jqueryjs.cn/jquery-3.5.0.slim.js

https://code.jqueryjs.cn/jquery-3.5.0.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方法的信息,请访问https://jqueryjs.cn/download/。公共 CDN 会在今天收到它们的副本,请给他们几天时间来发布文件。如果您急于快速开始,请使用我们 CDN 上的文件,直到它们有机会更新。

感谢

感谢所有参与此版本的人,包括通过提交补丁、报告错误或测试的人,包括 Ahmed S. El-AfifiMichal Golebiowski-OwczarekWonseop KimDave MethvinShashanka NatarajPat O’CallaghanSean RobinsonChristian OliffChristian Wenz 以及整个 jQuery 团队。

我们还要感谢 Masato Kinugawa 帮助我们识别和修复此版本中的安全问题。

变更日志

完整的更改日志:3.5.0

Ajax

  • 对于不成功的 HTTP 响应,不要执行脚本 (#4250#4655da3dd85b)
  • 如果存在,用 content-type 标头值覆盖 s.contentType (#4119065143c2)
  • 弃用 AJAX 事件别名,将内联事件/别名弃用 (7a3cf9c0)

构建

  • 解决 Travis 配置警告 (7506c9ca)
  • 为浏览器代码中的 var 声明启用 ESLint one-var 规则 (0fdfdd82)
  • 在 Travis 上测试无 Sizzle 构建 (362075ae)
  • 更新 .mailmap 和 AUTHORS.txt (19f2dcba)
  • 测试:修复自定义构建测试,在 Travis 上验证;命名 Travis 作业 (d525ae34)
  • 也对压缩的 jQuery 文件进行 lint (#307537df5cdf)
  • 使 Karma 在 AMD 模式下工作 (46c284b1)
  • 为 Slim 构建创建 grunt custom:slim 别名 (4cbdc745)
  • 仅在 Travis 上对配置中定义的浏览器运行测试 (471b0043)
  • 也在 Firefox ESR 上运行测试 (0a73b94a)
  • 除了 8、10 和 12,也在 Node.js 13 上运行测试 (64c1fcc1)
  • 在 Gruntfile.js 中删除 Node.js 6 的解决方法 (9f4204ec)
  • 也在 Travis 上的 FirefoxHeadless 上运行测试 (ad3c2efa)
  • 通过 ESLint 在 Node.js 脚本中强制执行严格模式 (ac2da4e6)
  • 支持 jquery-release –dry-run 标志 (c7a5e1bd)
  • 在发布时停止将 src/core.js 复制到 dist (#4489279d2e97)
  • ESLint:禁止未使用的函数参数 (d7e13f12)
  • 修复正则表达式解析 AMD var-modules (#4389) (36b59c96)

核心

  • Ajax:将 nonce 和 global 与 master 对齐,修复 AMD 问题 (22bf701f)
  • 在它的上下文中触发 iframe 脚本,在 globalEval 中添加 doc 参数 (#45183dedc3f2)
  • 弃用 jQuery.trim (#436356e73e0c)
  • 在受支持的情况下使用 Array.prototype.flat (#43202f666c1d)
  • 实现 .even() 和 .odd() 来替换 POS :even 和 :odd (409cbda7)

CSS

  • 解决 IE/Edge 中针对表格行进行错误的 getComputedStyle (#44906d31477a)

数据

  • 事件:操作:防止与 Object.prototype 发生冲突 (#3256413ff796)

文档

  • 将指向 EdgeHTML 问题的链接更新为通过 Web 存档 (d72faced)
  • 将指向 Homebrew 的链接从 HTTP 转换为 HTTPS (ff5a43eb)

效果

事件

  • 每个匹配的窗口和文档只使用一个 focusin/out 处理程序 (#46529e15d6b4)
  • 只将事件附加到可以接受数据的对象 - 真的 (#4397f36f6abb)

操作

  • 跳过 option 元素的选择包装器
  • 使 jQuery.htmlPrefilter 成为一个身份函数 (1d61fd94)

偏移量

  • 将 px-ed 字符串发送到 .css() (57038fae)

选择器

测试

  • 在 IE 中将一个 focusin 测试列入黑名单 (1a4f10dd)
  • 将必要的 done() 调用次数传递给 assert.async() (5ea844f6)
  • 使支持测试通过 Firefox 4x/5x/60 (f0d5ec62)
  • 在 Firefox 中跳过“具有幻影边框的表格行上的宽度/高度”测试 (c79e1d5f)
  • 不要在 Chrome 中测试卸载时的同步 XHR (c5b48c8c)
  • 修复 Chrome for Android 中的偏移量分数测试 (0c67da4b)
  • 将 Android 用户代理检测移动到 iOS 之上,将 Safari 放在最后 (6276cb2e)
  • 使支持测试接受 Safari 13 及更高版本 (8167327f)
  • 更新 npo.js 并包含未压缩的源代码 (3654bc83)

遍历

  • 修复对象元素上的 contents()s with children in IE (90f78b9a)
  • 修复具有子元素的对象元素上的 contents() (#438442badf34)

jQuery 3.4.1:在 IE 中触发焦点事件,并在 iOS 10 中查找根元素

发布时间: 作者:

再次问好! jQuery 3.4.0 已于 三周前发布,但我们收到了一些问题报告,这些问题需要一个补丁版本。 感谢所有报告问题并帮助我们快速修复问题的人。 以下是更改

在 IE 中多次触发焦点或模糊

jQuery 3.4.0 对事件处理程序触发原生事件(例如 focusblur)的方式进行了一些更改。 这些更改导致了一个回归,有时会导致一个神秘的错误以 "saved.shift is not a function" 的形式抛出。 这现在已修复。

示例

// Error thrown in IE10-11
// after clicking #test-element twice
jQuery("#test-element").click(function() {
  jQuery(this).trigger("blur");
});

检查 iOS 10.0-10.2 中的元素附加

在发布 3.4.0 时,我们在多个版本的 iOS 上运行了测试,包括 iOS 10.3,但不包括 10.0-10.2。这些版本不支持我们用来判断元素是否附加到 DOM 的原生函数。其他版本的 iOS 没有受到影响。我们添加了一个保护措施来确保该方法存在,并在必要时回退到其他选项。

使用 AMD 加载 jQuery

jQuery 3.4.0 中添加了一个小模块,它使用了全局 jQuery 而不是使用 AMD 加载的本地 jQuery。这导致使用 AMD 加载时出现 "jQuery 未定义" 错误,但现在应该已修复。

 


升级

如果从 jQuery 3.0+ 升级,应该不会出现兼容性问题。如果你还没有升级到 jQuery 3+,请查看 3.0 升级指南。使用 jQuery Migrate 3.0 插件 可以帮助你识别代码中的兼容性问题。

请尝试使用这个新版本,并 告知我们你遇到的任何问题

下载

您可以从 jQuery CDN 获取文件,或者直接链接到它们。

https://code.jqueryjs.cn/jquery-3.4.1.js

https://code.jqueryjs.cn/jquery-3.4.1.min.js

您也可以从 npm 获取此版本。

npm install jquery@3.4.1

精简版

有时您不需要 ajax,或者您更喜欢使用专注于 ajax 请求的众多独立库之一。而且,通常使用 CSS 和类操作来进行 web 动画更加简单。除了包含 ajax 和效果模块的 jQuery 正式版本之外,我们还发布了一个“精简版”,它排除了这些模块。如今,jQuery 的大小很少会成为负载性能的困扰,但精简版比正式版本压缩后小约 6k 字节。这些文件也可以在 npm 包和 CDN 上找到。

https://code.jqueryjs.cn/jquery-3.4.1.slim.js

https://code.jqueryjs.cn/jquery-3.4.1.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方法的信息,请访问https://jqueryjs.cn/download/。公共 CDN 会在今天收到它们的副本,请给他们几天时间来发布文件。如果您急于快速开始,请使用我们 CDN 上的文件,直到它们有机会更新。

感谢

感谢所有参与此版本发布的人,包括提交补丁、报告错误或进行测试的人,包括 Richard GibsonMichal Golebiowski-Owczarek 以及整个 jQuery 团队。

变更日志

GitHub 变更日志: 3.4.1 中修复的问题 | 所有更改

构建

  • 修复 finalPropName 中未解决的 jQuery 引用 (#43580d4af529)

核心

事件

  • 防止 leverageNative 注册重复的虚拟处理程序 (6c1e7dbf)
  • 修复多个异步 focus 事件的处理 (#435024d71ac7)

jQuery 3.4.0 发布

发表于 作者

jQuery 有了一个新版本!距离我们上次发布已经有一段时间了,但我们预计这将是 3.x 分支的最后一个次要版本,然后我们将进入 jQuery 4.0 的大修。但在我们进入 4.0 之前,我们很高兴分享 jQuery 3.4.0 中包含的错误修复和改进。以下是一些亮点

.width.height 的性能改进

在获取和设置尺寸时,某些情况下会导致布局抖动,这基本上意味着浏览器计算布局的次数比必要时多。我们在除 IE 之外的所有浏览器中修复了这个问题,在 IE 中无法避免。

noncenomodule 支持

为了支持通过 .html 和 .append 等方法添加脚本元素,jQuery 会将它们分开,并将新的脚本标签附加到加载和执行远程内容。在此过程中,noncenomodule 等属性被忽略,但 jQuery 3.4.0 现在会保留它们。

单选按钮:事件处理程序中的预期状态

我们已经修复了复选框的相同问题,但意外地遗漏了单选按钮输入。在以下示例中,第一次单击元素时会记录 true。我们修复了它,以便在执行事件处理程序之前更新 checked 属性。

示例

var $radios = jQuery(".example");
var $firstRadio = $radios.first();
var firstCheckedState = $firstRadio.prop("checked");
$radio.on("click", function() {
  // true in <3.4.0
  console.log($firstRadio.prop("checked") === firstCheckedState);
});
$radios.eq(1).click();

次要漏洞修复:Object.prototype 污染

jQuery 3.4.0 包含对使用 jQuery.extend(true, {}, ...) 时的某些意外行为的修复。如果未经清理的源对象包含一个可枚举的 __proto__ 属性,它可能会扩展原生 Object.prototype。此修复程序包含在 jQuery 3.4.0 中,但 补丁差异 存在于修补之前的 jQuery 版本。

示例

jQuery.extend(true, {},
  JSON.parse('{"__proto__": {"test": true}}')
);
console.log( "test" in {} ); // true

请注意,虽然 jQuery 尽最大努力保护用户免受安全漏洞的影响,但 jQuery 是一个 DOM 操作库,它通常会按照你的指示执行操作。在这种情况下,行为可能是意外的,因此 jQuery.extend 将不再写入任何名为 __proto__ 的属性。但是,此类保护措施并不是良好安全实践(如用户输入清理)的替代品。

弃用位置选择器和 Sizzle 的日落

jQuery 的基本 API 是选择一些东西,然后对所选择的东西进行操作。jQuery 中的选择器引擎 Sizzle 处理前半部分。它一直是一个快速高效的小引擎,为 querySelectorAll 等原生选择器 API 以及其他原生 JavaScript 和 CSS 选择器铺平了道路。现在,由于许多这些选择器已经进入了现代浏览器,我们几乎要向 Sizzle 说再见了。但为了在 jQuery 4.0 中删除 Sizzle,我们还需要删除我们所说的位置选择器,它们是非标准选择器。

具体来说,jQuery 3.4.0 弃用了 :first:last:eq:even:odd:lt:gt:nth。当我们删除 Sizzle 时,我们将用一个围绕 querySelectorAll 的小型包装器来替换它,并且在没有更大的选择器引擎的情况下几乎不可能重新实现这些选择器。

我们认为这种权衡是值得的。请记住,我们仍然支持位置方法,例如 .first.last.eq。任何可以用位置选择器做的事情,都可以用位置方法来代替。它们执行起来也更好。

升级

如果从 jQuery 3.0+ 升级,应该不会出现兼容性问题。如果你还没有升级到 jQuery 3+,请查看 3.0 升级指南。使用 jQuery Migrate 3.0 插件 可以帮助你识别代码中的兼容性问题。

请尝试使用这个新版本,并 告知我们你遇到的任何问题

下载

您可以从 jQuery CDN 获取文件,或者直接链接到它们。

https://code.jqueryjs.cn/jquery-3.4.0.js

https://code.jqueryjs.cn/jquery-3.4.0.min.js

您也可以从 npm 获取此版本。

npm install jquery@3.4.0

精简版

有时您不需要 ajax,或者您更喜欢使用专注于 ajax 请求的众多独立库之一。而且,通常使用 CSS 和类操作来进行 web 动画更加简单。除了包含 ajax 和效果模块的 jQuery 正式版本之外,我们还发布了一个“精简版”,它排除了这些模块。如今,jQuery 的大小很少会成为负载性能的困扰,但精简版比正式版本压缩后小约 6k 字节。这些文件也可以在 npm 包和 CDN 上找到。

https://code.jqueryjs.cn/jquery-3.4.0.slim.js

https://code.jqueryjs.cn/jquery-3.4.0.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方法的信息,请访问https://jqueryjs.cn/download/。公共 CDN 会在今天收到它们的副本,请给他们几天时间来发布文件。如果您急于快速开始,请使用我们 CDN 上的文件,直到它们有机会更新。

感谢

感谢所有参与此版本发布的人,包括提交补丁、报告错误或进行测试的人,包括 abnud1Jason Bedardbuddh4Kris BorchersAndrei FangliOleg GaidarenkoRichard GibsonMichal Golebiowski-OwczarekMarja HölttäDave MethvinEd SLuis Emilio Velasco SanchezSaptak Senguptatmybr11Bert Zhang 以及整个 jQuery 团队。

变更日志

GitHub 变更日志: 3.4.0 中修复的问题 | 所有更改

Ajax

核心

  • 使用 isAttached 检查元素的附加 (662083ed)
  • 对 jQuery.extend / jQuery.fn.extend 的微小效率修复 (#4246) (#42454ffb1df8)
  • 在 DOM 操作中保留带有 src 属性的脚本上的 CSP nonce (#432300504037)
  • 在 DOM 操作中保留脚本上的 CSP nonce (#3541c7c2855e)
  • 支持通过 jQuery.globalEval 传递 nonce (#42785bdc85b8)
  • 在附加检查中识别 Shadow DOM (#35049b77def5)
  • 防止 $.extend( true, … ) 的 Object.prototype 污染 (753d591a)

CSS

  • 确保驼峰式和短横线分隔式名称不会为 CSS 变量折叠 (f8c1e902)
  • 避免填充 jQuery.cssProps (#39862b5f5d5e)
  • 使用非默认缩放正确检测滚动框支持 (#4029821bf343)
  • 不要为 CSS 变量自动添加 “px” (#4064) (#406375b77b48)
  • 跳过非元素属性的动画的 px 添加逻辑 (f5e36bd8)
  • 除非必要,否则避免在 width/height 获取器中强制执行重排 (#4322a0abd15b)
  • 除非必要,否则不要在 width/height cssHook 中读取 styles.position (#4185354f6036)
  • 不要为可能无单位的 CSS 网格属性自动添加 “px” (#4007f997241f)

尺寸

  • 修复 SVG 上的 outerWidth 计算 (#3964e743cbd2)
  • 在设置 width/height 时避免获取 boxSizing - 这在某些情况下可以避免强制执行重排 (#399173d7e625)
  • 在 IE 中回退到 offsetWidth/Height 以获得边框框 (#4102315199c1)

事件

操作

  • 正确检测具有单字符名称的 HTML 元素 (#4124979809c5)

其他

  • 添加 lockbot 的配置 (2348f399)
  • 更新许可证序言/尾声以安抚 Github 检查器 (29e76e25)

README

  • 将 gitter 徽章添加到 README.md (7869f83d)
  • 添加 FOSSA 许可证扫描状态徽章 (45f08588)

选择器

序列化

  • jQuery.param:当给定 null/undefined 时返回空字符串 (#26330645099e)

遍历

内部

  • uglify 及其选项的季节性更新 (09684ba3)
  • 删除不必要的 ESLint 异常 (dc05f3c1)
  • 在 jsdom 中运行基本测试套件 (0ec25abb)
  • 移除手动 QUnit fixture 重置 (84b6a0be)
  • 使 Promises/A+ 测试使用点报告器而不是默认报告器 (ca9356ec)
  • 将 QUnit 从 1.23.1 更新到 2.9.2 (6ced2639)
  • 在 Node.js 10 上运行 Karma 浏览器测试,而不是 Node.js 8 (16ad9889)
  • 更新 jsdom;将使用 Symbol polyfill 的测试迁移到 iframe 测试 (9cb124ed)
  • 从 ESLint 配置中移除过时的全局变量 (c10945d0)
  • 更新大多数依赖项 (8751e9ef)
  • 更新测试代码以兼容 QUnit 2.x (#4297) (c3498187)
  • 建议在 JS Bin 或 CodePen 上创建测试用例,放弃 JSFiddle (da44ff39)

jQuery CDN 中 jQuery 1.9.1 的错误映射文件

发布日期: 作者:

很久以前,Mike Taylor 指出 jQuery CDN 有一个缩减版 jQuery 1.9.1,其映射文件引用不正确。基本上,它引用了 jQuery 1.11.1 的映射文件,而这完全是错误的。如果您尝试调试使用缩减版 jQuery 1.9.1 文件的网站,开发工具会非常困惑,让本已困难的工作变得更加困难。

您可能会认为我们可以简单地编辑 https://code.jqueryjs.cn/jquery-1.9.1.min.js 文件以指向正确的映射文件,该文件确实存在,名为 https://code.jqueryjs.cn/jquery-1.9.1.min.map。这样做至少有两个问题。第一个问题是该文件在互联网上被大量缓存,因为多年来一直认为它在发布后永远不会改变。即使我们编辑了文件,JavaScript 和映射文件也可能永远不会在它们被使用的时候实际更新。

第二个问题更为严重。我们一直在倡导开发者使用 脚本的 integrity 属性 来确保您包含的文件自您最初编写脚本标签后没有被修改。如果我们修改文件的内容,该属性将不正确,页面将不再包含该文件。这很可能会完全破坏页面!考虑到 jQuery 1.9.1 的历史悠久,包含此文件的许多页面可能没有得到积极维护。因此,我们不能认真考虑以任何方式更改 JavaScript 文件,甚至是一字节也不行。

最不具破坏性的选择是移除 jQuery 1.9.1 缩减版文件引用的 jquery.min.map 文件。它 *不会* 影响 jQuery 是否能为网站访客正确运行。它只会禁用源映射。由于在 CDN 和整个互联网上包含 sourceMappingURL 映射引用的这些弊端,我们不再包含它。

如果您需要调试使用这些缩减版文件之一的网站,可以手动在 Chrome 中关联映射文件。打开缩减版源文件,右键单击缩减版源代码区域,然后选择“添加源映射…”。

jQuery CDN 中不正确的 jquery.min.map 文件已被移除。我们预计移除此文件不会有任何明显的变化,除了恢复对使用 jQuery 1.9.1 的网站进行调试的正常状态之外。jQuery 1.11.1 缩减版文件不引用其映射文件,因此它将继续正常工作,您可以关联映射文件,如上所述。

由于 CDN 和整个互联网上的缓存非常积极,您可能还会在一段时间内看到此映射文件。如果您发现您认为与缺少 jquery.min.map 文件相关的某些异常行为,您可以 在 CDN 问题跟踪器上创建一个工单.

jQuery 3.3.1 - 修正了发布标签中的依赖项

发布日期: 作者:

我们在 jQuery 3.3.0 的发布中遇到了一个问题,因此我们立即发布了另一个标签。代码本身是相同的,但是由于 npm 5+ 版本的新行为,我们的发布依赖项(仅在发布期间使用)被添加到 jQuery 包本身的依赖项中。

如果从 npm 或 GitHub 安装,现在推荐使用 jQuery 3.3.1。如果在任何 CDN 上使用 jQuery,构建的文件只有版本号不同。

我们对由此造成的不便表示歉意,并且已经更新了我们的发布脚本以解决此问题。

请查看 jQuery 3.3.0 博客文章,了解此版本中所有相关的代码更改。

下载

您可以从 jQuery CDN 获取文件,或者直接链接到它们。

https://code.jqueryjs.cn/jquery-3.3.1.js

https://code.jqueryjs.cn/jquery-3.3.1.min.js

您也可以从 npm 获取此版本。

npm install jquery@3.3.1

精简版

有时候您不需要 ajax,或者您更喜欢使用专注于 ajax 请求的众多独立库之一。而且,对于所有网页动画,使用 CSS 和类操作的组合通常更简单。除了包含 ajax 和效果模块的 jQuery 正式版本之外,我们还发布了一个“精简”版本,该版本排除了这些模块。如今,jQuery 的大小很少会成为加载性能问题,但精简版构建的大小比正式版本缩减了约 6k gzip 字节 - 24k 对 30k。这些文件也在 npm 包和 CDN 上可用。

https://code.jqueryjs.cn/jquery-3.3.1.slim.js
https://code.jqueryjs.cn/jquery-3.3.1.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方法的信息,请访问https://jqueryjs.cn/download/。公共 CDN 会在今天收到它们的副本,请给他们几天时间来发布文件。如果您急于快速开始,请使用我们 CDN 上的文件,直到它们有机会更新。

jQuery 3.3.0 - 一束芬芳的废弃和...那是一个新功能吗?

发布日期: 作者:

距离上次 jQuery 版本发布已经有一段时间了,但核心团队并没有闲着。我们为您带来了一个全新的次要版本,它甚至还带有一个新功能!

.addClass().removeClass().toggleClass() 方法现在接受一个 **数组** 类。


jQuery(elem).addClass([
   'dave', 'michał', 
   'oleg', 'richard', 
   'jason', 'timmy'
]);

总的来说,jQuery 并不打算添加任何新功能。我们更倾向于关注我们可以移除什么,而不是我们可以添加什么。但当我们看到这个功能请求时,我们想知道为什么它之前没有被添加。

如果从 jQuery 3.0+ 升级,应该不会出现兼容性问题。如果你还没有升级到 jQuery 3+,请查看 3.0 升级指南。使用 jQuery Migrate 3.0 插件 可以帮助你识别代码中的兼容性问题。

请尝试使用这个新版本,并 告知我们你遇到的任何问题

弃用

我们在本次版本中修剪了一些玫瑰、百合和向日葵。其中一些闻起来比其他一些更香,但将它们放在一起,您就得到了一束美丽的... *废弃花*。

这些函数随着时间的推移已经失去了部分实用性,被认为不如可用的替代方案更受欢迎,或者从一开始就旨在用于内部使用。虽然这些函数中的大多数将在 jQuery 4.0 中被移除,但值得注意的是,我们并不认为废弃一个方法就意味着它将被移除;这意味着我们鼓励使用替代方案。例如,像 .click() 这样的事件别名可能永远不会被移除。

命令行测试

出色的 Timo Tijhof 使得 在命令行上运行所有 jQuery 测试 成为可能,使用 grunt 和 karma。这是我们一直想要做的事情,但它因为我们需要 php 服务器来运行 ajax 测试而变得复杂。感谢 Timo 让它成为现实!

注意:jQuery 不再在 PhantomJS 1.x 上运行任何测试。

下载

您可以从 jQuery CDN 获取文件,或者直接链接到它们。

https://code.jqueryjs.cn/jquery-3.3.0.js

https://code.jqueryjs.cn/jquery-3.3.0.min.js

您也可以从 npm 获取此版本。

npm install jquery@3.3.0

精简版

有时候您不需要 ajax,或者您更喜欢使用专注于 ajax 请求的众多独立库之一。而且,对于所有网页动画,使用 CSS 和类操作的组合通常更简单。除了包含 ajax 和效果模块的 jQuery 正式版本之外,我们还发布了一个“精简”版本,该版本排除了这些模块。如今,jQuery 的大小很少会成为加载性能问题,但精简版构建的大小比正式版本缩减了约 6k gzip 字节 - 24k 对 30k。这些文件也在 npm 包和 CDN 上可用。

https://code.jqueryjs.cn/jquery-3.3.0.slim.js
https://code.jqueryjs.cn/jquery-3.3.0.slim.min.js

这些更新已经作为 npm 和 Bower 上的当前版本提供。有关获取 jQuery 的所有方法的信息,请访问https://jqueryjs.cn/download/。公共 CDN 会在今天收到它们的副本,请给他们几天时间来发布文件。如果您急于快速开始,请使用我们 CDN 上的文件,直到它们有机会更新。

感谢

感谢所有参与本次版本发布的人,包括通过提交补丁、报告错误或测试,包括 Andreas Solledar、Basil Belokon、Boom Lee“CDAGaming”Dave MethvinErik LaxHenry ZhuJason BedardJordan BelandMatan Kotler-BerkowitzMichał Gołębiowski-OwczarekNilton CesarPierre SpringRichard GibsonSaptak SenguptaShashanka NatarajSteve MaoTimo TijhofFaisal Irfan Yar Khan 以及整个 jQuery 团队。

 

变更日志

GitHub 变更日志: 在 3.3.0 中修复的问题 | 所有更改

Ajax

  • 为所有请求添加一个 ontimeout 处理程序 (#3586262acc6f)
  • 不要在无实体主体请求上处理非字符串数据属性 (#3438d7237896)

属性

  • 功能:允许在 add/remove/toggleClass 中使用数组参数 (#353280f57f8a)

构建

  • 在 Node.js 8 上进行测试,停止在 Node.js 7 上进行测试 (bef46a2a)
  • 更新到 Babel 7,使用 for-of 插件而不是 preset-es2015 (90bac40a)
  • 移除 package-lock.json,将其添加到 .gitignore (#37927037facc)
  • 在 Node.js 9 上进行测试 (3e902a81)
  • 修复 Android 4.0 中 UglifyJS 输出;更新 uglify (#3743, c9efd11f)

核心

CSS

  • 从 cssProps 中删除浮点映射 (bbf33428)
  • 使用非默认缩放值正确设置支持属性 (#3808, f00a0759)
  • 检测更多错误地报告为百分比的 WebKit 样式 (#3777, 94ddf620)
  • 在计算之前检索内联样式 (c4598da4)
  • 避免来自 CSS 上限的单位转换干扰 (#2144, 692f9d4d)

延迟

尺寸

文档

  • 创建 CODE_OF_CONDUCT.md (e84d3bc0)
  • 更新指向 stripAndCollapse 的 HTML 规范链接 (#3594) (e1b1b2d7)

事件

筛选器

操作

  • 使用 `.children` 选择 tbody 元素 (a88b48ea)
  • 添加对具有模块类型脚本的支持 (#3871, 5d3a968e)

偏移量

支持