关于 Dave Methvin

CTO,PC Pitstop http://pcpitstop.com

jQuery 1.2.6 发布

发布于 作者

此版本主要用于修复 jQuery 1.2 中的错误。您可以在 错误追踪器 上查看完整的修复列表。

这是紧随 jQuery 1.2.3 之后的下一个版本。1.2.4 和 1.2.5 版本被跳过(1.2.4 构建错误,使其实际上与 1.2.3 相同,而 1.2.5 缺少一个补丁)。

整个 jQuery 团队在发布此版本方面做出了巨大贡献,我想借此机会感谢他们所有人的辛勤工作。

我也想借此机会欢迎 Ariel Flesler 加入 jQuery 核心开发团队。他在发布此版本方面提供了宝贵的帮助,包括贡献错误修复、性能改进、功能和测试用例。您可以在整个版本中看到他辛勤工作的成果。欢迎 Ariel,感谢他对所有贡献的认可!

下载

jQuery 1.2.6

性能改进

jQuery 团队再次努力在这个版本中带来了巨大的性能改进。与之前的版本一样,我们扩展了对 jQuery 框架的许多领域的分析,寻找常见的痛点,并提供解决方案。

以下所有性能改进的数据和测试用例可以在以下 jQuery 1.2.3 与 1.2.6 Google 表格 中找到(为了避免 Internet Explorer 6 与 Internet Explorer 7 的结果几乎相同,我们排除了 Internet Explorer 6 的结果)。

事件处理速度提高了 103%

在分析密集型应用程序代码(特别是拖放等操作)时,我们寻找可以对所有用户产生影响的通用更改方式。一个经常调用的代码段是 jQuery 事件处理程序,对其进行任何优化都会显着提高所有由此产生的频繁调用的事件的性能。通过在这里集中改进,您应该看到所有频繁调用的事件都会立即受益。

CSS 选择器速度提高了 13%

对 jQuery 内部方法进行了一些优化,显着提高了它们的性能,同时为 jQuery 中一些最常用的代码(如 CSS 选择器代码)带来了可衡量的益处。

例如,jQuery.map() 方法现在快了 866%,而 jQuery.extend() 快了 19%。这两个更改使整个库的性能得到显着提高。

.offset() 速度提高了 21%

与 jQuery 事件处理代码的改进相结合,.offset() 的优化使得密集型鼠标操作变得更加快捷。例如,jQuery UI 的拖放代码现在快了 300% 以上,因为这些更改(使您可以实现更快、更流畅的拖放操作)。

.css() 速度提高了 25%

一个经常调用的方法(在内部和外部)。对该方法的优化在其他方法中(例如 .offset())很容易感受到。

新功能和主要变更

尺寸插件现在已成为核心的一部分

Brandon Aaron 的尺寸插件的剩余方法已被引入 jQuery 核心,以及其他错误修复和性能改进。此插件在开发人员和插件作者中得到了广泛使用,并且已成为 jQuery 生态系统的重要组成部分。在过去的几个版本中,我们一直在慢慢地将尺寸插件中最常用的方法引入核心,但在 1.2.6 版本中,所有剩余方法现在已成为核心的一部分。

如果您将 jQuery 升级到 1.2.6 版本,现在可以选择将尺寸插件排除在您的代码之外。

尺寸插件的完整文档可以在 jQuery API 文档网站 上找到(并且正在与 jQuery 核心文档进行整合)。

.attr() 改造

.attr() 方法已完全改造(解决了大约 15 个未解决的错误)。此外,该方法已显著简化和优化。

.toggle() 现在可以接受更多函数

从历史上看,jQuery 的 .toggle() 函数接受两个函数(以偶数/奇数方式切换)。但是,该方法已更改,因此可以提供任意数量的函数,并通过鼠标单击进行切换。

$("div").toggle(function(){
  $(this).removeClass("three").addClass("one");
}, function(){
  $(this).removeClass("one").addClass("two");
}, function(){
  $(this).removeClass("two").addClass("three");
});

您现在可以取消绑定已绑定的 .toggle() 和 .one() 函数

function test(){ $(this).addClass("test"); }
$("div").one("click", test);
$("div").unbind("click", test);

$("div").toggle(test, test);
$("div").unbind("click", test);

.index() 支持 jQuery 集合

jQuery 的 .index() 函数允许您在 jQuery 集合中查找 DOM 元素的位置,现在您还可以指定一个 jQuery 集合(其中第一个元素将被提取并在原始集合中定位)。

var test = $("div.test");
$("div").index( test ) == 3

jQuery.makeArray 可以将任何内容转换为数组。

jQuery 的内部 .makeArray() 方法现在将任何类似数组的对象转换为新数组。此外,它将所有其他对象包装为数组,并返回生成的集合。

jQuery.makeArray( document.getElementsByTagName("div") )
// => [ div, div, div ]

jQuery.makeArray( true )
// => [ true ]

jQuery.makeArray()
// => []

beforeSend 可以取消 Ajax 调用

beforeSend Ajax 回调已允许开发人员在请求发生之前执行一段代码,现在该代码还可以验证某些参数的完整性并取消生成的 Ajax 请求(对于表单验证等任务很有用)。

$.ajax({
  beforeSend: function(){
    return $("#input").val() == "";
  },
  url: "test.php"
});

公开速度

jQuery 有许多命名的动画速度(如“slow”、“fast”和“default”),您现在可以通过操作 jQuery.fx.speeds 对象,为动画速度提供自己的名称,或修改现有的名称。

jQuery.fx.speeds.slow = 1000;
$("#test").slideDown("slow");

jQuery 1.2.3 发布

发布于 作者

这是 jQuery 1.2 的错误修复版本。您可以在 错误追踪器 上查看完整的修复列表。

下载

jQuery 1.2.3

.data() 和 .removeData()

这些方法补充了 jQuery 1.2 中已经包含的 jQuery.data 和 jQuery.removeData 方法。然而,重要的变化是它们已经针对插件开发人员进行了调整。您现在可以对数据添加进行命名空间化,就像您可以对事件绑定/取消绑定进行命名空间化一样。例如

  $("div").data("test", "original");
  $("div").data("test.plugin", "new data");
  alert( $("div").data("test") == "original" ); // true
  alert( $("div").data("test.plugin") == "new data" ); // true

此外,获取或设置数据值可以由插件覆盖。例如,以下代码来自最近更新的 jQuery UI 中的可拖动元素

  $(element).bind("setData.draggable", function(event, key, value){
     self.options[key] = value;
  }).bind("getData.draggable", function(event, key){
     return self.options[key];
  });

以上代码使得所有尝试获取和设置可拖动命名空间数据的操作都会被插件直接拦截和处理(而不是直接绑定到元素)。结果是一个强大的新界面,用于处理插件中的内部数据。

.unbind(“.namespace”)

在 jQuery 1.2 中,您可以添加和删除命名空间事件,但您始终必须包含要使用的事件类型的名称。通过此新增功能,您现在可以删除与特定命名空间匹配的所有已绑定事件,例如

  $("div").bind("click.plugin", function(){});
  $("div").bind("mouseover.plugin", function(){});
  $("div").unbind(".plugin"); // All handlers removed

以上代码删除了所有在“plugin”命名空间内的已绑定事件处理程序。

jQuery 1.2.2 发布

发布于 作者

这是 jQuery 1.2 的错误修复版本。您可以在 错误追踪器 上查看完整的修复列表。

下载

jQuery 1.2.2

重要变更

Brandon Aaron 和 David Serduke 在此版本中付出了很多努力。David 是 jQuery 核心开发团队的新成员,一直做出着重要贡献,请帮助我们欢迎他!

主要来说,这是一个错误修复和优化版本。我们修复了 120 多个错误,我们的测试套件现在包含 1157 个测试,我们对此感到非常自豪。

$(DOMElement) 的速度提高了 300%

我们再次采取措施,微观优化 jQuery 中最常用的功能。具体来说,是指将 DOM 元素传递到 jQuery 函数中的用法。(最常用于在代码中看到 $(this) 的情况。)

以下是一些您可以在所有主要浏览器中预期的速度提升的快速预览

浏览器 1.2.1(毫秒) 1.2.2(毫秒)
Firefox 2 0.041 0.015
Firefox 3 0.033 0.01
Safari 3 0.017 0.005
Opera 9 0.023 0.004
Internet Explorer 6 0.04 0.03

.ready() 改造

文档就绪函数长期以来需要一些额外的关注。我们进行了一些特定的更改。

  • Internet Explorer 文档就绪功能得到了极大改进。我们使用了一种受 Diego Perini 启发的新的技术。它使我们不再需要执行 document.write(),这真是太棒了。
  • 除了 DOM,所有浏览器现在都等待 CSS 准备好。实际上,它不再只是一个普通的文档就绪事件了 - 但我们发现,用户绝大多数情况下需要等待文档样式生效(例如知道一个元素是否可见,或者它的高度是多少)。具体来说,我们在 Safari 和 Opera 中添加了一些改进,使其成为可能。
  • $(document).bind("ready", fn); - 你现在可以通过传统的 .bind() 函数来监听文档就绪事件。当然,.ready() 仍然按照你预期的方式工作。

.bind(“mouseenter”) / .bind(“mouseleave”)

原本是 .hover() 函数核心功能的鼠标悬停事件,现在被拆分为两个新的跨浏览器事件:mouseenter 和 mouseleave。这两个事件不同于 mouseover 和 mouseout,因为当你在子元素之间移动时,后者会触发(这通常是不希望的)。例如,以下两个方法在 jQuery 1.2.2 中都是有效的,并且完美地工作

$("li").hover(function(){
  $(this).addClass("hover");
}, function(){
  $(this).removeClass("hover");
});
$("li").bind("mouseenter", function(){
  $(this).addClass("hover");
}).bind("mouseleave", function(){
  $(this).removeClass("hover");
});

.bind(“mousewheel”)

我们有一个 [http://dev.jquery.com/browser/trunk/plugins/mousewheel/jquery.mousewheel.js 新插件],由 Brandon Aaron 基于新的事件 API 编写,它为 jQuery 核心添加了鼠标滚轮事件支持。这将允许你编写诸如

$("div").bind("mousewheel", function(event, delta){
  if ( delta < 0 )
    $(this).append("up");
  else
    $(this).append("down");
});

复杂 :not()

即使它不是 CSS 3 规范的一部分,它也是一个常见的特性请求 - 所以你现在可以在 :not() 选择器中使用复杂表达式。例如,以下现在有效

$(".hover:not(li.active)")
$("li:not(.active,.hover,:contains(test))")

Accept Headers

对于普通的 jQuery Ajax 操作,我们现在发送额外的 Accept 头部,让服务器知道我们正在寻找哪种类型的内容。如果你指定了 dataType 参数,那么我们会为你处理所有头部设置。我们目前为每个 dataType 发送以下头部。

  • xml "application/xml, text/xml"
  • html "text/html"
  • script "text/javascript, application/javascript"
  • json "application/json, text/javascript"
  • text "text/plain"
  • 其他所有:"*/*"

Bug 修复

以下是部分功能的示例,这些功能已经过重要改动。

  • .clone() 改进
  • 脚本评估改进
  • height() / width() 改进
  • 跨框架 DOM 操作
  • 已解决一些内存泄漏

事件 API

有一个新的 API 用于处理事件。你现在可以创建自己的自定义事件类型(具有自定义的设置和销毁方式)。实际上,它允许你超越简单的事件触发,并创建一个完整的方案来附加、处理和销毁元素上的事件。由 Brandon Aaron 创建的 [http://dev.jquery.com/browser/trunk/plugins/mousewheel/jquery.mousewheel.js 演示插件] 可以用来学习这个强大的新 API。

jQuery 1.2.1 发布

发布于 作者

这是 jQuery 1.2 的错误修复版本。您可以在 错误追踪器 上查看完整的修复列表。

下载

jQuery 压缩版 (14kb,使用 gzip 压缩)
jQuery 打包版 (26kb)
常规版 (77kb)

重要变更

相对动画

新的相对动画 API 中存在一个严重的错误,导致与现有的动画样式冲突。为了解决这个问题,为了进行相对动画,你现在必须使用以下语法
$(...).animate({ height: "+=50px", width: "-=20%", fontSize: "+=2em" });

其中 += 表示“添加到当前位置”,-= 表示“从当前位置减去”。

.eq()

由于一些非常有说服力的论据,以及大量的重新考虑,.eq() 已经回归。许多插件依赖于这个单一方法 - 并且 .slice() 提供的替代方案并不像最初提供的解决方案那样优雅。

jQuery 1.2 发布

发布于 作者

下载

jQuery 1.2
jQuery 压缩版 (14kb,使用 gzip 压缩)
jQuery 打包版 (26kb)
jQuery 常规版 (77kb)

新特性

部分 .load()

部分 .load() 允许你将 HTML 文档的片段加载到页面中,并通过 jQuery 选择器进行过滤。这与正常的 Ajax .load() 一样,只是你在检索的 URL 后面指定一个选择器。

跨域 $.getScript

你现在可以使用 getScript 来动态加载和执行远程脚本。这可以用来加载 jQuery 插件或其他代码模块。

跨域 $.getJSON (使用 JSONP)

JSONP 是一种允许你跨多个域传输 JSON 数据的技术。

jQuery 现在原生支持 JSONP - 如果你尝试从远程 URL 加载 JSON(通过 $.getJSON 或 $.ajax),那么会为服务器提供额外的回调函数以进行解释。此外,如果服务器需要一个特殊的字段来指定你自己的回调函数名称,你可以在你的查询字符串中包含 “=?”。

序列化改进

.serialize() 方法经过了重大改进,将 jQuery Forms 插件 提供的功能移植回 jQuery 核心。这意味着表单数据的序列化现在应该更接近浏览器通常发送给服务器的方式。

此外,还引入了一个新的 .serializeArray() 方法,它序列化所有表单和表单元素(像 .serialize() 方法一样),但会返回一个 JSON 数据结构供你使用。当处理你想要处理的大型表单时,这特别有用。

禁用缓存

在 $.ajax 调用中,你现在可以通过提供额外的 cache: false 标志来阻止浏览器缓存请求。这将确保你可能正在执行的任何 GET 请求都会绝对地检索页面的最新版本。
cache: false 始终向服务器发送新的请求。

« 返回完整的 [[Release:jQuery 1.2|jQuery 1.2 发行说明]]。

.val() 改进

简单的 .val() 方法得到了非常需要的改进,使其更加有用。你现在可以设置一组单选按钮和复选框的选中状态,以及设置选择选项的选中状态。你可以通过传入一个你想要选择/检查的项目的值或名称的数组来实现这一点。(在 Firefox2 中失败,单选按钮在 IE7 中失败)现在可以对 select 元素调用 .val() 来获取它们的 value。

.offset()

从 [https://jqueryjs.cn/plugins/project/dimensions Dimensions 插件] 移植而来,[[CSS/offset|.offset()]] 方法允许你找到元素相对于文档左上角的偏移量(作为“top”和“left”)。

.height() / .width() 用于文档和窗口

.height() 和 .width() 现在适用于文档和窗口对象;允许获取文档主体和窗口视窗的高度和宽度。

.stop()

停止所有指定元素上当前运行的动画。如果任何动画排队运行,那么它们将立即开始。

%/em 动画

动画现在可以使用 em 值或百分比值,以及像素值。它们甚至可以在同一个 animate() 调用中混合使用。

颜色动画

一个新的 [https://jqueryjs.cn/plugins/project/color 官方 jQuery 插件],它支持使用新的 jQuery.fx.step 对元素的 CSS 颜色进行动画。

支持的 CSS 属性:‘backgroundColor’;‘borderBottomColor’;‘borderLeftColor’;‘borderRightColor’;‘borderTopColor’;‘color’;‘outlineColor’。

颜色可以指定为一组预设的命名颜色;以 rgb 格式(例如 ‘rgb(221,221,221)’);十六进制(例如 ‘#dddddd’);或简写十六进制(例如 ‘#ddd’)。

相对动画

相对动画的行为与普通动画一样,但它们的单位被指定为相对于元素当前位置的相对位置,而不是绝对位置。

你可以通过编写数字和(可选)单位作为字符串,并以“+=”(表示相对于当前位置的相对动画)或“-=”(表示从当前位置减去的相对动画)开头来指定相对动画。

同时动画

正如一直以来的情况,jQuery 中的动画是自动排队的,这使得 animate() 调用可以链接。

现在,如果在 animate() 的选项中包含 queue: false 标志,那么该动画将不会进入队列,并将立即开始运行。

.queue() / .dequeue()

两个现有的内部 jQuery 排队方法已经过调整,并变得更加有用,可用于一般的动画使用。

.queue() 可用于访问和操作特定元素的动画队列。

添加了以下排队方法
* .queue()
返回第一个元素队列的引用(这是一个函数数组)。
* .queue(Function)
将一个新的函数添加到所有匹配元素的队列末尾,该函数将被执行。
* .queue(Array)
用这个新队列(函数数组)替换所有匹配元素的队列。

添加了以下出队方法:.dequeue() 从队列的头部移除一个排队的函数并执行它。

可扩展动画

你现在可以使用一个函数扩展 jQuery 动画,该函数在动画的每个步骤中执行,并更改正在动画的元素的样式。它可以扩展到特定的 css 属性,甚至可以创建一个自定义动画类型。

例如,你可以在 .animate() 中传入一个额外的步骤函数来执行诸如动画同步之类的操作。

命名空间事件

这是一个对插件作者特别有用的功能。你现在可以为绑定的事件处理程序提供一个私有名称,允许你稍后再次移除它们(而无需维护你正在管理的所有处理程序的私有缓存)。

.triggerHandler()

一个新方法,可以与原始的 .trigger() 一起使用。这个特定的方法触发元素上所有绑定的事件处理程序(针对特定事件类型),但不会执行浏览器的默认操作。

.wrapInner() / .wrapAll()

.wrapInner() 用于包装每个匹配元素的内部子内容(包括文本节点);.wrapAll() 将匹配集中所有元素包装在一个包装元素中(这与 .wrap() 不同,.wrap() 会将匹配集中每个元素都包装在一个元素中)。

.replaceWith() / .replaceAll()

replaceWith 将所有匹配元素替换为指定的 HTML 或 DOM 元素。.replaceAll 将指定选择器匹配的元素替换为匹配的元素。

带有事件的克隆

.clone() 方法现在可以接受一个可选参数,如果为 true,它也会克隆所有克隆元素上的所有事件处理程序。

:has(selector)

这将匹配包含至少一个与指定选择器匹配的元素的所有元素。这是 XPath 选择器的替代品[selector],包含在 jQuery 1.1 及更早版本中 - :has() 的行为完全相同。

:header

这将匹配所有标题(h1、h2、h3、h4、h5 和 h6 标签)。这对于构建页面的目录(特别是当标题的顺序很重要时)非常有用。

:animated

匹配当前正在通过至少一个动画进行动画的元素。

XPath 选择器插件

由于 XPath 选择器在 jQuery 1.2 中被移除,因此引入了新的 [https://jqueryjs.cn/plugins/project/xpath XPath 选择器插件]。您可以使用此插件来获得自 jQuery 创建以来一直存在的 CSS/XPath 混合选择器。

.map()

将一组元素转换为另一组值(这些值可能是或可能不是元素)。您可以使用它来构建值列表、属性、css 值,甚至执行特殊的、自定义的、选择器转换。这作为 $.map() 的便利方法提供。

.prevAll() / .nextAll()

允许您查找当前元素之前或之后的所有同级元素。

.slice()

此方法的行为与数组的原生 .slice() 方法相同,允许您将 jQuery 集合分割成可重用的部分。

.hasClass()

新的 .hasClass() 方法是一个简单的便利方法,它位于 [[Traversing/is|.is()]] 之上,处理其最常见的用例(检查类名)。

.andSelf()

将 jQuery 堆栈上的前两个集合合并成一个匹配的集合。

.contents()

查找匹配元素内的所有子节点(包括文本节点)。如果您对 iframe 元素执行此操作,它将返回其内部文档。

如何升级

如果您还没有这样做,请升级到 jQuery 1.1.4。这将有助于消除您使用的 jQuery 的最后一个版本和当前版本之间的多数意外情况。浏览弃用和移除的功能列表,并确保您的代码中没有使用任何这些功能。如果您使用的任何插件仍然需要一些旧的功能,您可以随意包含 jQuery 1.1 兼容性插件或 XPath 兼容性插件,具体取决于情况。

jQuery 1.1 兼容性插件

在 jQuery 1.2 版本中删除了一些功能。包含此插件可让您在 jQuery 1.2 的副本中拥有所有被删除的功能。

插件通常使用方法如下

XPath 兼容性插件

由于 XPath 选择器在 jQuery 1.2 中被移除,因此引入了新的 XPath 选择器插件。您可以使用此插件来获得自 jQuery 创建以来一直存在的 CSS/XPath 混合选择器。

颜色动画插件

一个新的、官方的 jQuery 插件,支持通过使用新的 jQuery 动画 API 来动画元素的 CSS 颜色。支持的 CSS 属性包括:'backgroundColor'、'borderBottomColor'、'borderLeftColor'、'borderRightColor'、'borderTopColor'、'color'、'outlineColor'。

移除的功能

我们从 jQuery 1.2 中删除了一些相对未被使用的方法,这些方法会导致混淆或效率低下。只要可能,我们都提供了用于执行操作的替代方法。

与 jQuery 1.1 版本一样,在 jQuery 1.2 中提供了向后兼容性插件。因此,如果您希望继续使用这些特定方法,则可以使用该插件继续执行此操作。

此外,为了处理 XPath 更改,另一个单独的插件已提供,它将处理 jQuery 中的 XPath 选择器功能。

DOM 操作

调用带有参数的 clone 方法已弃用(clone 方法整体上被保留)。不要调用.clone(false)您现在应该这样做.clone().empty()代替。

DOM 遍历

.eq() 方法已被弃用,以支持新的 .slice() 方法(其工作原理与数组的 slice 方法相同)。您可以像这样复制 .eq()

$("div").slice(0,1);

.lt() 方法已被弃用,以支持新的 .slice() 方法(其工作原理与数组的 slice 方法相同)。

.gt() 方法已被弃用,以支持新的 .slice() 方法(其工作原理与数组的 slice 方法相同)。

.contains() 方法已被弃用,改为使用常规的 .filter() 语句。您可以像这样复制 .contains()

$("div").filter(":contains(Your Text)");

Ajax

$("#elem").loadIfModified("some.php"): 此便利方法被移除,改为使用 $.ajax() 的长形式

$.ajax({
  url: "some.php",
  ifModified: true,
  success: function(html){
    $("#elem").html(html);
  }
});

$.getIfModified("some.php"): 此便利方法被移除,改为使用 $.ajax() 的长形式

$.ajax({
  url: "some.php",
  ifModified: true
});

$.ajaxTimeout(3000): 此便利方法被移除,改为使用更明确的 $.ajaxSetup() 的长形式

$.ajaxSetup({timeout: 3000});

$(...).evalScripts(): 此方法在 jQuery 中不再需要 - 所有包含在 HTML 字符串中的脚本在注入到文档中时都会自动执行。不需要替代方法。