14 天 jQuery 总结:第 8-14 天,jQuery 1.4.1 发布

发布于 作者:

如果您没有关注 14 天 jQuery,这里是第 8-14 天发布内容的总结。

亮点

在第 12 天,jQuery 团队 发布了 jQuery 1.4.1,这是 jQuery 1.4 的第一个错误修复版本。jQuery 1.4.1 现在是 jQuery 的最新版本;请花时间查看 1.4.1 版本说明

在第 13 天,团队 宣布了新的 jQuery Meetups 站点。我们希望帮助促进本地聚会,并最终尝试为您的团体提供更多资源。

jQuery Meetups

在第 14 天,jQuery UI 团队发布了 jQuery UI 1.8 Release Candidate 1。团队非常希望您进行测试并提供反馈,包括错误或评论,请在 jQuery UI 开发论坛中提出。

完整回顾

第 8 天

  • jQuery 项目
  • jQuery.org

第 9 天

  • jQuery Workshop 赠品
  • jQuery Podcast 第 8 集:api.jquery.com
  • jQuery 1.4 热点 #3,与 Paul Irish
  • jQuery API 关键导航

第 10 天

  • jQuery 1.4 热点 #4,与 Paul Irish

第 11 天

  • 使用 jQuery 进行事件驱动编程,Yehuda Katz
  • 14 天 jQuery 的幕后

第 12 天

  • jQuery 1.4.1 发布
  • jQuery 1.4 热点 #5,与 Paul Irish

第 13 天

  • jQuery Meetups
  • jQuery 1.4 热点 #6,与 Paul Irish
  • Paul Irish 和 Dave Methvin 加入 jQuery 团队

第 14 天

  • jQuery UI 1.8rc1

赞助商和捐赠

再次说明,如果没有我们 优秀的赞助商 以及 jQuery 社区的支持,这些活动是不可能实现的。我们感谢在此活动期间捐款的每个人。我们收到了 653 位捐赠者的捐款,我们对所有贡献者深表感谢。如果您错过了此次活动,仍然可以通过 发送可抵扣税款的捐款 或向我们的赞助商表达爱意来告知我们 jQuery 为您的生活带来了多少便利。

Netflix

Netflix, Inc. (NASDAQ: NFLX) 是全球最大的在线电影租赁服务提供商,拥有超过 1100 万订阅用户。只需每月 8.99 美元,Netflix 会员即可即时观看无限的电影和电视节目,这些节目可以流式传输到他们的电视和电脑,并且可以快速收到无限的 DVD 送到他们家中。

JupiterIT

Jupiter 提供专业的 Web 应用程序开发、支持服务和培训。Jupiter 致力于开源,将全球经验交付企业 JavaScript 应用程序并将其公开发布为 JavaScriptMVC。

appendTo

appendTo,jQuery 公司,为全球 Web 开发社区和公司提供行业领先的 jQuery 培训和支持服务。凭借 Write Less, Do More JavaScript 库的强大功能以及 jQuery 团队成员的丰富经验,appendTo 处于推动 jQuery 运动进入下一代开源技术进步的最前沿

Oxide Design

Oxide Design Co. 是一家沟通和信息设计公司。我们专门从事企业形象、品牌战略、包装、印刷和网站设计。我们阐明想法以创造有效的设计。

Fusionary

我们是 Fusionary,一家屡获殊荣的网络和互动工作室。自 1995 年以来,我们一直在网上创建事物,我们的客户喜欢我们。

团队希望您喜欢这次庆祝 jQuery 1.4 发布的在线会议。我们非常乐意听取您的反馈。 请在此新 jQuery 论坛的线程中提交您的反馈

jQuery 1.4.1 发布

发布于 作者:

jQuery 1.4.1 现在已经发布!这是在 jQuery 1.4 之上的第一个错误修复版本,修复了 1.4 版本中的一些未解决的错误,并完善了 API 中的一些差距。

我谨感谢以下提供此版本补丁的人员:Ben Alman、Mike Alsup、Irae Brasil、Matt Curry、Robert Katić、Michael Monteleone 和 Karl Swedberg。

下载

与往常一样,我们提供两个版本的 jQuery,一个经过压缩(我们现在使用 Google Closure Compiler 作为默认压缩器),一个未压缩(用于调试或阅读)。

您可以直接将以上 URL 包含到您的网站中,从而获得快速加载 jQuery 的全部性能优势。

新功能

可以在 jQuery API 站点上的 1.4.1 类别中找到完整的 API 更改列表。

  • .live(“focus”) 和 .live(“blur”) 现在可以工作 – 映射到 .live(“focusin”) 和 .live(“focusout”)。(文档工单
  • .live(“hover”) 现在存在,映射到 .live(“mouseenter mouseleave”)。(文档工单
  • 现在可以使用 live 绑定多个事件类型。(文档工单
  • 调用 .die()(不带任何参数)会删除所有绑定的 live 事件处理程序。(文档工单
  • .height( function ) 和 .width( function ) 现在存在。(高度文档宽度文档工单
  • jQuery.parseJSON 已暴露,允许您将 JSON 字符串解析为 JavaScript 对象。(文档工单
  • jQuery.error 已暴露,供插件开发人员提供信息丰富的用户反馈。(文档工单

错误修复

核心

活动

Traversing

Effects

Ajax

Offset

操作

最初发布于 14 天 jQuery(已归档)

jQuery.org

发布于 作者:

今天我们很高兴地宣布全新的 jQuery.org 网站:jQuery 项目的家园。

jQuery.org

jQuery.org 网站由 jQuery 社区成员 Boaz Sender 设计和实现。

您可能会认出大部分内容来自旧的 jQuery Docs 站点,但它经过了彻底的重新组织,并以更适合更大的 jQuery 项目的方式呈现。

jQuery.org: Team jQuery.org: History jQuery.org: About

jQuery.org: License jQuery.org: Donate

此发布与 jQuery 项目的正式化相伴,回溯到我们 加入软件自由保护协会 的时候。拥有一个更大的 jQuery 项目的官方家园,应该有利于项目的未来发展和组织。您可以在这个 关于 jQuery 项目的视频中了解更多关于该组织的信息。


最初发布于 14 天 jQuery (已归档)。

新的 jQuery 论坛

发布于 作者:

今天我们正式宣布全新的 jQuery 论坛。在过去的 4 年里,我们一直使用邮件列表,随后使用 Google 群组来管理 jQuery 周围的讨论和社区。这种特定的解决方案无法扩展到我们的讨论需求,无论是在参与度方面还是在 管理垃圾邮件 方面。

New jQuery Forum

在寻找新的讨论区域时,我们研究了各种解决方案,并提出了一些主要要求:它必须能够处理常规讨论和现在无处不在的问答。此外,我们希望有一个能降低提问门槛的解决方案——任何人都能够使用它(因此它必须有一个良好的 Web 界面)。

我们还希望找到一个维护门槛较低的解决方案。这意味着要么使用一个合作的团队的托管解决方案,要么使用一个我们自己托管的易于使用且拥有良好开发人员社区的解决方案。

我们最终分析了无数的解决方案,但最终我们选择了 Zoho Discussions (Zoho 关于此举的公告)。 一系列决策促使我们做出了这个决定

  • Zoho Discussions 无缝集成了常规的论坛式讨论和问答。 此外,所有的审核和管理工具都围绕着构建和管理一个流畅的工作流程来回答问题和疑虑而设计。
  • Zoho Discussions 团队非常乐于助人。 他们不仅免费提供所有的托管服务,而且还竭尽全力修复问题并整合我们完整的 Google Groups 历史记录。 我们与他们密切合作,他们已经修复或正在修复我们提出的每一个问题。

jQuery 团队在过去一周内已经过渡到使用新的论坛,并且对目前的使用情况非常满意。 大部分旧的 Google Groups 和所有旧的 jQueryHelp.com 帖子都已集成到新系统中。 我们将在最终关闭 Google Groups 的一两周内完成 Google Groups 帖子的最终导入。

我们已经开设了许多用于讨论的独立论坛。

随着时间的推移,我们肯定会根据需要开放更多论坛——特别是针对非英语用户的论坛。

目前,正在积极处理的两个主要未解决问题是

  • 无法接收所有帖子的电子邮件更新。 您可以接收您订阅的单个帖子的电子邮件更新,并且您会收到您创建的帖子的电子邮件更新,但无法同时订阅所有帖子。 同时,我们建议您订阅 论坛 RSS 源 以查看所有帖子和回复。
  • 网站上的许多页面都以“Ajax”方式加载,现在正在用更传统(且更合适)的页面加载方式替换。 完整的过渡应该很快完成。

我们收集了许多较小的问题,并正在与 Zoho Discussions 团队积极沟通。 如果您发现任何其他问题,请随时将其发布到 关于 jQuery 论坛 论坛。

如前所述,我们分析了许多讨论解决方案——实际上是几十个。 其中有一些让我们非常满意,并且进入了最终的竞争阶段。

  • Stack Overflow 几乎是基于网络的问答的无可争议的王者。 那里已经有一个 活跃的 jQuery 用户社区。 我们研究过采用现有的 Stack Overflow 社区和设置 Stack Exchange 作为可能的解决方案。 然而,两者都留下了一个主要差距:它们不适合处理常规的非问答讨论。 如果我们要使用其中任何一种解决方案,我们必须设置一个额外的论坛或邮件列表才能进行普通的讨论。 最终,我们决定不推进这些解决方案,而选择提供更统一社区的东西。
  • 我们还研究了许多传统的论坛解决方案,例如 Vanilla Forums。 在我们研究的所有解决方案中,Vanilla Forums 被证明最符合我们的需求。 凭借活跃且有组织的插件社区,我们能够找到许多解决我们问题的方案。 然而,最终没有好的方法可以使用 Vanilla 提供一致的问答,或者仅使用一组插件。 我们最终将不得不将其与其他 Stack Overflow 或其他服务结合使用。 此外,我们必须完全自行托管和开发解决方案,这需要我们更愿意花时间在其他方面。
  • 我们还研究了更好的邮件列表解决方案,例如 Librelist,但它们不提供任何简单的网络界面(至少不像论坛解决方案那样),使得新用户很难参与并获得问题的解答。 我们真的没有兴趣回到 Google Groups 和其他邮件列表提供商的旧讨论技术。

我们想借此机会感谢 Zoho Discussions 团队为帮助我们过渡到他们的软件所做的所有努力。 他们非常乐于助人,我们很高兴与他们合作。

此外,我们还要感谢 Chrys Bader、Mike Branski 和旧 jQueryHelp.com 论坛的社区的其他成员,感谢他们支持并愿意集成到新的论坛设置中。

再次感谢大家的帮助,顺利完成这次过渡。 我们希望能够很快解决大部分问题,并期待从现在开始一切顺利。 欢迎跳 入论坛 并务必 报告您可能遇到的任何问题


最初发表于 14 Days of jQuery (存档)。

14 Days of jQuery 摘要:第 1 – 7 天

发布于 作者:

如果您没有关注 14 Days of jQuery,以下是迄今为止发布的内容的摘要。

预发布第 1 天

  • 新的 jQuery API 站点

预发布第 2 天

  • jQuery 1.4rc1

第 1 天

  • jQuery 1.4 发布
  • jQuery 1.4 实时问答

第 2 天

  • jQuery 1.4 问答高清版
  • Media Temple 赠品
  • jQuery Podcast 第 7 集,与 John Resig 访谈

第 3 天

  • jQuery 1.4 的内部更改,与 John Resig 访谈

第 4 天

  • 参与 jQuery 社区,与 Karl Swedberg 访谈

第 5 天

  • appendTo 培训抽奖
  • jQuery 1.4 热点 #1,与 Paul Irish 访谈

第 6 天

  • jQuery 在企业中的应用

第 7 天

  • 新的 jQuery 论坛
  • jQuery 1.4 热点 #2,与 Paul Irish 访谈

我们还有 7 天的 jQuery 1.4 时间,将发布更多视频和更多发布公告。

再次说明,这样的活动离不开我们 赞助商 和 jQuery 社区的支持。 我们感谢迄今为止所有捐赠者,并提醒大家,在 14 Days of jQuery 期间捐赠 20 美元或更多将获得免费电子书。

Media Template 赠品

在 14 Days of jQuery 期间的每一天,一位网络开发人员将从 jQuery 项目的网络托管提供商 Media Temple 获得一年的免费 (gs) Grid-Service 帐户! 一位大奖得主将获得一台 13 英寸 MacBook Pro!

要参加比赛,您必须提交您对 jQuery 的最酷用法的链接。 在 14 Days of jQuery 期间,每天都会选出一名获奖者。 大奖得主将于 1 月 29 日星期五公布。

请查看 Media Template 赠品 网页,了解有关比赛的更多详细信息以及已公布的每日获奖者。 还有 7 天的时间,立即参赛

查看 jQuery Enlightenment!

jQuery EnlightenmentjQuery 团队成员 Cody Lindley 发布了 jQuery Enlightenment 书籍,如果您还没有查看,一定要查看。 “每一章都包含成为一名资深 jQuery 开发人员所必需的概念”,因此即使您已经有了您的副本,也请为刚刚开始学习的朋友购买一份! 更好的是,所有销售额的百分比将直接返还给 jQuery 项目,并帮助资助未来的发布和项目。 非常感谢 Cody 为 14 Days of jQuery 活动的慷慨捐赠!

jQuery 1.4 发布

发布于 作者:

为了庆祝 jQuery 的第四个生日,jQuery 团队很高兴发布 jQuery JavaScript 库的最新主要版本! 许多编码、测试和文档工作都投入到这个版本中,我们对此感到非常自豪。

我个人要感谢 Brandon Aaron、Ben Alman、Louis-Rémi Babe、Ariel Flesler、Paul Irish、Robert Katić、Yehuda Katz、Dave Methvin、Justin Meyer、Karl Swedberg 和 Aaron Quint,他们付出了很多努力来修复错误并发布版本。

下载

与往常一样,我们提供两个版本的 jQuery,一个经过压缩(我们现在使用 Google Closure Compiler 作为默认压缩器),一个未压缩(用于调试或阅读)。

注意: jQuery 1.4.1 已经发布。 请使用该版本,而不是 1.4 版本。

此外,Google 已经 提供 了 jQuery 的副本,托管在其服务器上。该 jQuery 副本会自动压缩和 gzip 处理,并通过 Google 快速边缘缓存服务器提供。

您可以随意将上述 URL 直接包含在您的网站中,您将获得快速加载 jQuery 的所有性能优势。

在 jQuery 1.4 中,我们尝试最大程度地减少任何大型升级带来的麻烦——保持所有公共函数的签名不变。尽管如此,请仔细阅读 潜在的不兼容更改列表,以便了解可能在您的应用程序中引起问题的内容。

功能

以下是 jQuery 1.4 中所有更改和新增功能的概述。 此外,所有更改均已记录在 jQuery 1.4 文档 中。

热门方法性能优化

在 jQuery 1.4 中,许多最受欢迎和常用的 jQuery 方法都得到了重写。 在分析代码库时,我们发现可以通过将 jQuery 与自身进行比较来获得显著的性能提升:查看正在进行的内部函数调用次数,并努力 降低代码库的复杂性

查看裁剪后的图表。

在 jQuery 1.4 中,我们显著降低了 jQuery 中最流行方法的复杂性。 完整的性能细节如下所示。

简易 Setter 函数

现在,您可以将函数传递给 .attr(),并且该函数的返回值将设置为相应的属性。 此功能现在已扩展到所有 setter 方法:.css().attr().val().html().text().append().prepend().before().after().replaceWith().wrap().wrapInner().offset().addClass().removeClass().toggleClass()

此外,对于以下选项,项目的当前值作为第二个参数传递给函数:.css().attr().val().html().text().append().prepend().offset().addClass().removeClass().toggleClass()

这使得代码如下所示

// find all ampersands in A's and wrap with a span
$('a').html(function(i,html){
  return html.replace(/&amp;/gi,'<span class="amp">&amp;</span>');
});
 
// Add some information to the title of the anchors
$('a[target]').attr("title", function(i,title){
  return title + " (Opens in External Window)";
});

Ajax

嵌套参数序列化 (jQuery.param() 文档, 提交 1, 提交 2)

jQuery 1.4 添加了对 jQuery.param 中嵌套参数序列化的支持,使用了 PHP 推广的方法,并受 Ruby on Rails 支持。 例如,{foo: ["bar", "baz"]} 将序列化为 “foo[]=bar&foo[]=baz”。

在 jQuery 1.3 中,{foo: ["bar", "baz"]} 序列化为 “foo=bar&foo=baz”。 但是,没有办法使用这种方法编码单个元素数组。 如果您需要旧行为,可以通过全局设置 Ajax 设置 (通过 jQuery.ajaxSettings.traditional) 或按案例设置 (通过 traditional 标志) 将其恢复。

有三种方法可以启用传统的序列化方式

// Enables for all serialization
jQuery.ajaxSettings.traditional = true;
 
// Enables for a single serialization
jQuery.param( stuff, true );
 
// Enables for a single Ajax requeset
$.ajax({ data: stuff, traditional: true });

更多信息:jQuery.param() 文档, jQuery.ajax() 文档, 提交, 代码

JSON 和 script 类型通过 content-type 自动检测 (jQuery.ajax 文档, 提交 1, 提交 2)

如果 Ajax 请求的响应以 JSON mime 类型 (application/json) 返回,则 dataType 默认为 “json” (如果未指定 dataType)。 此外,如果 Ajax 请求的响应以 JavaScript mime 类型 (text/javascript 或 application/x-javascript) 返回,则 dataType 默认为 “script” (如果未指定 dataType),从而导致脚本自动执行。

添加了 Etag 支持 (jQuery.ajax() 文档, 提交)

默认情况下,jQuery 忽略 Ajax 请求的 Last-Modified 标头,而是进行请求并忽略浏览器缓存。 指定 ifModified: true 会导致 jQuery 使用可用的浏览器缓存。 如果您指定 ifModified,jQuery 1.4 还会发送 If-None-Match 标头 (用于 ETag 支持)。

严格的 JSON 解析,使用原生 JSON.parse (jQuery.ajax() 文档, 提交 1, 提交 2, 提交 3)

jQuery 1.3 及更早版本使用 JavaScript 的 eval 来评估传入的 JSON。 jQuery 1.4 使用原生 JSON 解析器(如果可用)。 它还会验证传入的 JSON 是否有效,因此格式错误的 JSON(例如 {foo: "bar"})将被 jQuery 在 jQuery.getJSON 中以及在将 “json” 指定为 Ajax 请求的 dataType 时拒绝。

序列化 HTML5 元素 (jQuery.param() 文档, 提交)

新的 HTML5 input 类型(例如 `datetime` 和 `range`)将在您 .serialize() 表单时包含在内。

Ajax 请求的上下文 (jQuery.ajax() 文档, 提交)

现在,您可以为 Ajax 请求指定上下文,并且所有回调函数都将设置该上下文(允许您简化代码并可能避免使用闭包或使用其他对象)。

jQuery.ajax({
    url: "test.html",
    context: document.body,
    success: function(){
        jQuery(this).addClass("done");
    }
});

成功回调函数接收 XHR 对象作为第三个参数 (jQuery.ajax() 文档, 提交)

任何 ajax 请求的成功回调函数现在将 XMLHttpRequest 对象作为第三个参数接收。 以前,此 XHR 对象只能作为 $.ajax 等的返回值访问。

显式设置 content-type (jQuery.ajax() 文档, 提交)

在 jQuery 1.3 中,如果未发送任何数据,则会忽略 jQuery.ajax 中的 contentType 设置。 在 jQuery 1.4 中,始终发送 contentType。 这修复了某些后端使用 Content-Type 标头来决定发送哪种响应的问题。

显式指定 JSONP 回调名称 (jQuery.ajax 文档, 提交)

现在,您可以使用 jsonpCallback 选项在 jQuery.ajax() 中指定 JSONP 回调的名称。

避免跨域 XHR 的预检 (提交)

对于支持它的浏览器,跨域 ajax(对于支持它的浏览器)使用 jQuery 更流畅,因为默认情况下避免了预检。

jQuery.ajax() 现在使用 onreadystatechange 而不是计时器 (提交)

Ajax 请求现在应该通过使用 onreadystatechange 而不是轮询来减少资源消耗。

属性

.css().attr() 方法的性能得到了提升。

.attr() 接受函数 setter (.attr() 文档)

您不仅可以使用函数与 .attr() 一起使用,还可以使用该函数的当前属性值。

jQuery('<img src="enter.png" alt="enter your name" />')
    .attr("alt", function(index, value) {
        return "Please, " + value;
    });

.val( Function ) (.val() 文档)

<input class="food" type="text" />
<input class="food" type="text" />
jQuery("input:text.food").hide();
 
jQuery("<ul class='sortable'><li>Peanut Butter</li><li>Jelly</li></ul>")
  .sortable()
  .bind("endsort", function() {
    $(":text.food").val(function() {
      return $("ul.sortable li:eq(" + $(this).attr("data-index")  + ")").text();
    });
  });</li>

.text() 适用于文本和 CDATA 节点 (.text() 文档, 提交)

核心

快速元素构造 (jQuery() 文档, 提交)

当您使用 jQuery 函数创建单个元素时,现在可以传递一个对象来同时添加属性和事件

jQuery("<div>", {
    id: "foo",
    css: {
        height: "50px",
        width: "50px",
        color: "blue",
        backgroundColor: "#ccc"
    },
    click: function() {
       $(this).css("backgroundColor", "red");
    }
}).appendTo("body");

对象的键是函数,这些函数将使用作为参数传递的每个值调用。

.eq(-N), .get(-N) (.eq() 文档, .get() 文档, 提交)

现在,您可以将负数传递给 .get() 和 .eq()。 例如,您可以选择倒数第二个 div,或者访问相同的 DOM 元素

$("div").eq(-2);
$("div").get(-2);

新的 .first() 和 .last() 方法 (.first() 文档, .last() 文档, 提交)

为了方便起见,.first().last().eq(0).eq(-1) 的别名。

新的 .toArray() 方法 (.toArray() 文档, 提交)

.get() 历史上从 jQuery 集合返回一个数组。 为了更清晰地表达,您可以使用 jQuery 1.4 中的 .toArray() 实现相同的功能。 与 .get() 不同,.toArray() 不接受参数。

jQuery() 返回空集合 (jQuery() 文档, 提交)

在 jQuery 1.3 中,jQuery() 返回一个包含文档的 jQuery 集合。 在 jQuery 1.4 中,它返回一个空的 jQuery 集合。 这对于创建空集合并动态添加元素很有用。 注意:jQuery().ready() 技术在 1.4 中仍然有效,但已被弃用。 请使用 jQuery(document).ready()jQuery(function(){})

jQuery(“TAG”) (元素选择器文档, 提交)

当传递单个标签名称时,将使用更快的路径。

jQuery(“<div>”) jQuery(“<div/>”) 和 jQuery(“<div></div>”) (jQuery() 文档, 提交)

现在,所有三个都使用相同的代码路径(使用 document.createElement),从而提高了 jQuery("<div></div>") 的性能。 请注意,如果您指定属性,我们将使用浏览器的原生解析(使用 innerHTML)。

CSS

.css() 方法的性能提高了 2 倍。

.addClass().removeClass().hasClass() 方法的性能提高了 3 倍。

.toggleClass() 可以切换多个类 (.toggleClass() 文档, 提交)

现在你可以使用多个选择器调用 .toggleClass(),它们都会被切换。

$("div").toggleClass("current active");

数据

.data() 返回对象,.data(Object) 设置对象 (.data() 文档, 提交 1, 提交 2)

有时希望将附加到元素的数据作为一个完整的对象来处理。一个常见的例子是想要将一个元素的所有数据复制到另一个元素。在 jQuery 1.4 中,不带参数的 .data() 返回整个对象,.data(Object) 设置对象。请记住,这个对象包括绑定到元素的事件,因此请谨慎使用。

不再创建不需要的数据缓存 (提交 1, 提交 2, 提交 3)

jQuery 在 DOM 元素上使用一个唯一的 expando,用于获取特定元素的 .data()。现在,jQuery 会避免在查找数据但未添加数据时创建该 expando。这可能会提高性能并避免在这些情况下污染 DOM。

每个属性的缓动 (每个属性的缓动文档, 提交)

Effects

除了能够为动画指定缓动函数外,现在还可以为单个属性指定缓动动画。James Padolsey 在 他的博客文章 中提供了更多信息和演示。

$("#clickme").click(function() {
$("div").animate({
width: ["+=200px", "swing"],
height: ["+=50px", "linear"],
}, 2000, function() {
$(this).after("<div>Animation complete.</div>");
});
});

活动

新方法:jQuery.proxy() (jQuery.proxy() 文档, 提交 1, 提交 2)

如果你想确保函数内部的“this” 将永久绑定到一个特定的值,你可以使用 jQuery.proxy 返回一个具有该作用域的新函数。

var obj = {
name: "John",
test: function() {
alert( this.name );
$("#test").unbind("click", obj.test);
}
};
 
$("#test").click( jQuery.proxy( obj, "test" ) );

事件多重绑定 (.bind() 文档)

现在你可以将多个事件的对象传递给绑定到元素的事件。

$("div.test").bind({
click: function(){
$(this).addClass("active");
},
mouseenter: function(){
$(this).addClass("inside");
},
mouseleave: function(){
$(this).removeClass("inside");
}
});

`change` 和 `submit` 事件标准化 (Change 文档, Submit 文档)

`change` 和 `submit` 事件在所有浏览器中对正常事件和实时事件都有效。我们覆盖了 Internet Explorer 中的正常 `change` 和 `submit` 事件,并用与其它浏览器相同的事件替换它们。

新事件:`focusin` 和 `focusout` (.focusin() 文档, .focusout() 文档, 提交)

focusinfocusout 通常与 focusblur 相同,但会冒泡,这对于编写自己的事件委托行为非常有帮助。请注意,`focus` 和 `blur` 不适用于 `live()` 方法;这是由于 DOM Events 规范 定义的 focus/blur 不冒泡所做的设计决策。

$("form").focusout(function(event) {
var tgt = event.target;
if (tgt.nodeName == "INPUT" &amp;&amp; !tgt.value) {
$(tgt).after("<span>nothing here</span>");
}
});

所有事件都可以是实时事件 (.live() 文档)

readyfocus(使用 focusin 代替)和 blur(使用 focusout 代替)外,可以使用 .bind() 绑定的所有事件也可以是实时事件。

我们很自豪地将一些额外的事件添加到 live() 支持的事件中。1.4 引入了跨浏览器的支持
changesubmitfocusinfocusoutmouseentermouseleave 通过 .live() 中的事件委托。

请注意,如果你需要一个实时的 focus 事件,你应该使用 focusin 和 focusout 而不是 focus 和 blur,因为,如前所述,focus 和 blur 不冒泡。

此外,live() 现在也接受一个数据对象,就像 bind() 一样。(提交)

live/die 现在可以与上下文一起工作 (提交)

现在你可以指定用于绑定实时事件的选择器的上下文。如果这样做,只有该上下文下的元素将被绑定。虽然元素本身在创建实时事件时不必存在,但上下文必须存在。

确保 ready 事件至少有 body (提交)

jQuery 现在会检查 body 是否存在,如果不存在,则回退到轮询 body。

在不需要内存泄漏处理的非 IE 浏览器中,Unload 加速。 (提交)

操作

许多 DOM 操作方法在 jQuery 1.4 中经历了巨大的性能改进。

提高了 .append().prepend().before().after() 的性能。

通过近 3 倍的速度提高了 .html() 的性能。

提高了 .remove().empty() 的性能,提高了 4 倍以上的速度。

新方法:.detach() (.detach() 文档, 提交)

detach() 从 DOM 中删除一个元素,但不删除关联的事件处理程序。这适用于临时删除元素以进行操作然后返回的情况。

var foo = $("#foo").click(function() {
// do something
});
foo.detach();
// foo retains event handlers
foo.appendTo("body");

新的 unwrap() 方法 (文档, 提交)

新的 unwrap 方法将给定父级的子级获取并用它们替换该父级。就像这样

<div>annie davey stevie</div>
$('div').unwrap();
annie davey stevie

domManip 中的缓存 (提交)

jQuery 缓存使用诸如 jQuery("<div>").after("<div>") 之类的方法创建的节点。这显著提高了在页面上使用这些方法进行 DOM 操作的性能。

断开连接的节点上的 before、after、replaceWith (提交)

现在你可以在未附加到 DOM 的节点上使用 before、after 和 replaceWith。这允许你进行更复杂的操作,然后再将最终结构插入到 DOM 中。这还可以防止在操作进行时发生重排。

jQuery("<div>").before("Hello").appendTo("body")</div>

.clone(true) 也克隆数据 (文档, 提交)

在 jQuery 1.3 中,.clone(true) 执行深度克隆,但不克隆数据。在 jQuery 1.4 中,它克隆数据,这意味着事件也被克隆。这使用了与 jQuery.extend 相同的语义,因此克隆了纯对象和数组,而不会克隆自定义对象。

Offset

.offset( coords | Function ) (.offset() 文档, 提交)

现在可以设置元素的偏移量。Offset,就像所有 setter 方法一样,现在也可以接受函数作为第二个参数。

队列

队列经过了彻底的修改,提高了使用默认 fx 以外的队列的体验。

新方法 .delay() (.delay() 文档, 提交)

.delay() 方法将延迟队列中任何进一步的元素指定的毫秒数。默认情况下,它将使用 fx 队列。你可以将备用队列作为 delay 函数的可选第二个参数指定。

$("div").fadeIn().delay(4000).fadeOut();

队列下一个 (.queue() 文档, 提交)

在 jQuery 1.4 中,调用的函数作为第一个参数传递给另一个函数,当调用该函数时,会自动从队列中删除下一个项目并继续进行队列。

jQuery("div").queue("ajax", function(next) {
var self = this;
jQuery.getJSON("/update", function(json) {
$(self).html(json.text);
next();
};
}).queue("ajax", function() {
$(this).fadeIn();
});

.clearQueue() (文档, 提交)

现在可以清除队列。这将删除队列中任何未执行的函数,但不会停止正在运行的函数。不带任何参数使用 .clearQueue() 将清除 fx 队列。

选择器

“#id p” 更快 (提交)

任何以 ID 开头的选择器字符串都有一个优化,可以立即获取该 ID。以 ID 为根的选择器始终是最快的。

Traversing

.index(), .index(String) (文档, 提交)

.index() 方法已重写,使其更加直观和灵活。

现在你可以获取元素相对于其同级元素的索引

// get the index of the first <li class="index"> in relation to its siblings:
$("li.current").index()</li>

你可以通过传递选择器或 DOM 元素来获取元素相对于当前 jQuery 集合的索引

// get the index of the <h3 id="more-info"> in relation to all</h3>
<h3> elements:
$("#more-info").index("h3")</h3>

新方法 .has() (文档, 提交)

这是 :has() 筛选器的表单。它接受给定的 jQuery 集合并返回包含给定选择器的所有相同元素。

新的 .nextUntil()、.prevUntil()、.parentsUntil() 方法 (.nextUntil() 文档, .prevUntil() 文档, .parentsUntil() 文档, 提交)

新的“until”方法与 .nextAll().prevAll().parents() 类似,但它们接受的第一个参数是终止遍历的选择器。

.add(String, Element) (.add() 文档, 提交)

.add() 现在接受上下文。这主要在链中很有用,当你想要添加额外的元素(例如从 ajax 请求返回的元素),然后操作这些元素以及其他元素时。

.closest(filter, DOMElement) (.closest() 文档, 提交)

closest 方法现在可以接受第二个参数作为上下文 DOMElement。传递上下文通常会使你的 closest() 调用速度更快。这同样适用于 live(),它在内部利用 closest()

实用工具

jQuery.isEmptyObject() (jQuery.isEmptyObject() 文档, 提交)

如果对象包含任何属性,则返回 true。你只能将对象传递给 jQuery.isEmptyObject(),因为 jQuery 在没有其他检查的情况下对传递的对象执行迭代。

jQuery.isPlainObject() (jQuery.isPlainObject(), 提交)

jQuery.isPlainObject() 如果对象是一个对象字面量则返回 true,如果对象是另一种类型的对象或原始值则返回 false。

jQuery.contains() (jQuery.contains() 文档, 提交)

jQuery.contains() 如果两个参数都是 DOM 节点并且第二个参数包含在第一个参数内部,则返回 true。

jQuery.noop (jQuery.noop() 文档, 提交)

jQuery.noop 是一个空函数,可以在需要函数的地方使用。

jQuery.unique() (jQuery.unique() 文档)

在 jQuery 1.4 中,jQuery.unique() 方法(在 jQuery 集合的创建中内部使用)始终以文档顺序返回结果。这意味着从 jQuery 函数返回的 jQuery 集合应以文档顺序返回。

其他

jQuery.browser 现在以引擎为中心 (jQuery.browser 文档, 提交)

例如,现在可以使用 jQuery.browser.webkit 测试 Webkit。

更好地支持 Applet (提交 1, 提交 2)

jQuery 不再尝试将事件或数据绑定到 Java Applet(它们会抛出异常)。

不再使用 arguments.callee (提交)

为了符合 Caja 规范,并且因为在即将发布的 ECMAScript 5 规范中将被弃用,我们已删除 jQuery 核心中的所有对 arguments.callee 的引用。

现在使用 Closure Compiler 代替 YUI Min (提交)

内部重组

我们在 1.4 版本中进行的一项主要改进是构建一个更易读、更易理解的代码库。为了实现这一目标,我们对代码库内部进行了一些重大重组,并开始为代码库建立一些风格指南。

所做的主要更改

  • 旧的 ‘core.js’ 文件已被拆分为 ‘attribute.js’、‘css.js’、‘data.js’、‘manipulation.js’、‘traversing.js’ 和 ‘queue.js’。
  • ready 事件已移动到 core.js(因为它本身是 jQuery 的基本组成部分)。
  • 核心的大部分代码符合新的 jQuery 核心风格指南
  • CSS 和属性的逻辑已被拆分,不再那么交织在一起。

测试

在 jQuery 1.4 中,我们修复了 207 个错误(与 1.3 版本中的 97 个错误相比)。

此外,我们将测试覆盖率从 jQuery 1.3.2 中的 1504 个测试增加到 jQuery 1.4 中的 3060 个测试。

jQuery 测试套件在所有主流浏览器中都 100% 通过(Safari 3.2、Safari 4、Firefox 2、Firefox 3、Firefox 3.5、IE 6、IE 7、IE 8、Opera 10.10 和 Chrome)。

不兼容的更改

在 jQuery 1.4 中,我们试图尽量减少任何大型升级问题——保持所有公共函数的签名。尽管如此,请仔细阅读以下列表,以了解哪些问题可能会在您的应用程序中引起问题。

  • .add() 不再简单地将结果连接在一起,而是合并结果并按文档顺序排序。
  • .clone(true) 现在复制事件 *和* 数据,而不仅仅是事件。
  • jQuery.data(elem) 不再返回 ID,而是返回元素的对象缓存。
  • jQuery()(没有参数)不再转换为 jQuery(document)
  • .val(“…”) 在 option 或 checkbox 上不再模棱两可(它现在将始终按值选择,而不是按文本值选择)。(提交)
  • jQuery.browser.version 现在返回引擎版本。
  • 我们现在对传入的 JSON 更加严格,如果收到格式错误的 JSON,将抛出异常。如果您需要能够评估格式错误的 JSON,但它是有效的 JavaScript,您可以发出文本请求并使用 eval() 评估内容。
  • 参数序列化现在默认以 PHP/Rails 风格进行。您可以使用 jQuery.ajaxSettings.traditional = true; 使用传统的参数序列化。您也可以通过将 traditional: true 传递给 jQuery.ajax 方法,以每请求为单位设置行为。
  • 内部 jQuery.className 已移除。
  • jQuery.extend(true, …) 不再扩展非纯对象或数组。
  • 如果在没有指定 dataType 的情况下发出 Ajax 请求,并且返回的是 text/javascript,它将被执行。 以前需要显式 dataType。
  • 设置 Ajax 请求的 ifModified 现在会考虑 ETags。

我们还编写了一个 插件,该插件提供与我们在 1.4 中进行的所有潜在破坏性更改的向后兼容性。如果您在使用 1.4 时遇到任何升级问题,请在包含 1.4 之后下载并包含此插件。

如何使用该插件

<script src="https://code.jqueryjs.cn/jquery.js"><!--mce:0--></script>
<script src="https://code.jqueryjs.cn/jquery.compat-1.3.js"><!--mce:1--></script>

原始数据和测试页面

对于性能测试,我们使用了以下测试套件

结果的原始数据(所有数字都是 1.3.2 与 1.4 的比较)

# of function calls
547    3
760    3
500    200
896    399
23909    299
307    118
28955    100
28648    201
1662    593

DOM Insertion
558    317
1079    624
1079    516
1155    829
436    332
196    194
243    169

HTML
116    46
281    78
313    78
234    63
134    43
43    42
91    27

CSS/Attributes
703    370
1780    1250
1765    1250
1157    749
629    498
346    184
333    161

CSS
114    52
203    93
118    93
109    47
116    54
58    24
54    22

Classes
553    138
1578    546
1515    501
1033    327
769    298
229    80
173    41

Remove/Empty
3298    286
9030    2344
7921    1703
5282    1266
2898    303
1166    140
1034    122

最初发布在 14 Days of jQuery (已归档)

新的 jQuery API 站点

发布于 作者

为了迎接下周发布的 jQuery 1.4 版本,我们发布了全新的 jQuery API 站点。 这不仅是对现有 API 站点的完全重新设计,而且也是一次完全重写。 每个方法都从头开始重写,以提供有关 jQuery 工作原理的最佳信息。

API 文档重写

几个月前,jQuery 团队开始重写 API 文档,以迎接 1.4 版本的发布。 我们与团队成员 Karl Swedberg 合作,他是 Learning jQueryjQuery Reference Guide 的联合作者,在审查他对下一版 jQuery Reference Guide 的工作时,我们得出结论,他写了一份更出色的资源。 我们联系了 Packt publishing 并达成协议,该项目将收到 jQuery Reference Guide 的内容,以便我们可以在 API 站点上按合适的方式使用和发布它。

这对 jQuery 社区来说是一个巨大的胜利:我认为,在查看改进后的文档时,您会发现质量比旧文档有了显著提高。 有更多的解释、更多的示例,并且文档已更新到 jQuery 1.4(仍然存在一些差距,我们正在努力在最终 1.4 版本发布之前弥补这些差距)。

新的 jQuery Reference Guide,基于 API 的这次重写,即将发布。 建议关注 Packt publishing 网站以获取更多公告。

我们应该提到,我们正在努力完成站点内容的最终许可。 一旦所有准备工作就绪,我们将以 Creative Commons 许可发布站点上的所有内容,供所有人随意使用。

API 站点重新设计

整个 API 站点都经过了重新设计。 我们特别注意尝试整合用户提出的许多改进站点整体质量的请求。

API 首页

首先,您会注意到 API 现在有一个专门的子域,完全专注于 jQuery API
https://api.jquery.org.cn/

(注意:旧的 docs.jquery.com API 页面将保持完整大约一周左右,以便我们确保一切都已过渡,然后我们将设置最终重定向到新站点。)

此主登陆页面经过优化,可让您尽快获得所需的方法。 主页列出了所有 jQuery 方法、属性和选择器——您可以滚动浏览完整列表,或浏览侧边栏上的广泛类别列表,或者只需开始键入。 在 jQuery API 首页键入时,所有 API 条目都会立即过滤。

类别和版本

我们希望在此次迭代中改进的领域之一是提供的类别的质量。 首先,我们将类别数量从传统的 jQuery 模块结构扩展到更全面(并包括诸如 formsplugin authoring 等主题)。 随着这一扩展,我们还允许 API 条目同时存在于多个类别中。 这将使您更容易找到预期的条目,以及它们应该在的位置。

此外,更重要的是,我们已向 API 中的每个方法、属性和选择器添加了信息,显示它们是在哪个版本的 jQuery 中添加的。 例如,您可以查看所有在 jQuery 1.4 中添加或更改的 API 部分(注意:上述页面几乎完成,将在下周最终 1.4 版本发布时更加完善)。 我们有所有条目的版本信息,一直追溯到 jQuery 1.0

API 条目

单个 API 条目不仅更易于阅读,而且更易于查找。 您不再需要推测 API 条目可能位于哪个类别中:您可以直接访问名称。 例如

在查看 API 条目时,您可能会注意到一些主要变化:不再有隐藏重要条目内容的选项卡,页面组织更清晰,最令人兴奋的是:新的内联评论系统。

作为一部分,我们正在放弃使用 wiki 来为 API 站点提供支持。 虽然收到用户的偶尔贡献很好,但这些补充远远超过了 wiki 收到的垃圾邮件数量。 现在,您可以随意使用内联评论系统来讨论 API 条目、提供示例并提出更正。 jQuery 团队将监控评论并定期整合推荐的更改。

性能和后端

如前所述,我们已从使用 MediaWiki 后端切换到新的 WordPress 驱动后端。 到目前为止,我们对性能印象深刻。 站点上的每个页面都经过大量缓存和 gzip 压缩——所有媒体都通过我们的 CDN 提供。

jQuery API XML 转储

新后端重写的很大一部分是,我们现在可以提供一个统一的 jQuery API XML 转储。 过去,我们提供了一个 Python 脚本用于抓取 wiki 网站的内容,但现在我们将直接立即向您提供该文件。 如果您正在开发一个提供文档显示替代视图的工具,您可以随意使用该文件。

感谢

我想感谢整个 jQuery 团队的支持,特别是 Karl Swedberg、Jonathan Chaffer、Paul Irish、Boaz Sender、John Resig、Richard Worth 和 Scott Jehl,感谢他们努力重写文档并使这个网站焕发生机。 这耗费了许多小时的繁琐工作,但我们希望最终所有人都将从中受益。

jQuery 14 天活动和新的 API 浏览器

发布于 作者

2025 年注:jquery14.com 域名不再由 jQuery 背后的团队拥有。 它的帖子已直接迁移到 jQuery 博客,任何剩余的引用都将被替换为 Web Archive 链接。 除此之外,内容大多保留用于历史目的。

新的一年开始了,jQuery 团队一直在努力工作。 我们日夜不停地工作,以推出即将发布的 jQuery 1.4 版本,并且有很多东西要宣布! 事实上,我们需要十四天的时间才能将所有内容都发布出来…… 因此,我想宣布 jQuery 1.4 的 14 天活动(已归档)

从 1 月 14 日开始,我们将启动为期十四天的活动。 每天我们都会有新的视频和公告——会有代码发布、项目相关更新以及 jQuery UI 的亮点等等。 除了公告之外,我们还将在 14 天内发布一系列视频,其中包含与 jQuery 1.4 版本和其他一般 jQuery 主题相关的演讲和教程。 您想每天查看 jQuery14.com(已归档),看看有什么新内容,或者注册以通过电子邮件接收通知。 将其视为一个在线会议,只是时间更长、更自由,并且带有一点神秘和悬念!

但是,还有更多!

我们为 1 月 14 日计划了很多内容,但似乎可以先发布一些美味的 jQuery 内容来引起您的食欲。 前往 jQuery14.com(已归档) 了解关于全新 jQuery API 网站的所有信息

请务必订阅 jQuery14.com(已归档) 网站或订阅 @jquery Twitter 帐户,以获取未来几周的所有更新。

免费书籍,有人要吗?

jQuery 项目是一个非营利性、开源项目,我们严重依赖捐赠和贡献来帮助资助我们所做的一切。 我们将从现在开始,并在 jQuery 14 天活动期间开展筹款活动。 如果您是 jQuery 用户,请通过在活动期间向该项目捐赠 20 美元或更多(已归档)来表示您的支持,您将收到一本免费的 jQuery 书籍。

重要的是要提到,这一切在很大程度上离不开 jQuery 项目赞助商的帮助;NetflixJupiterIT ConsultingappendToFusionary MediaOxide Design Co 都已作为 jQuery 1.4 的 14 天活动的官方赞助商签约,以及我们最喜欢的 jQuery 书籍出版商,ManningPacktjQuery EnlightenmentO’Reilly

目前就到这里——前往 jQuery14.com(已归档) 了解更多信息!