我们很高兴宣布 jQuery 的最新版本:jQuery 1.1.4。除了任何可怕的错误之外,此版本将是 1.1.x 分支的最后一个版本,将引导我们进入 9 月发布的 jQuery 1.2。
您可以从 jQuery Google Code 页面下载此版本
下载
改进
除了所有常见的 错误修复 外,此版本还进行了许多改进。
任何名称的 jQuery
jQuery 迈出了重要一步,成为第一个能够完全重命名自己的主要 JavaScript 库。之前,提供了一些功能来重命名常用的 ‘$’ 快捷方式,用于 ‘jQuery’,但现在您还可以重命名 ‘$’ 和 ‘jQuery’。这带来了两个极佳的结果
速度改进
没有速度改进的版本算什么?我们抓住机会超越了之前发布的所有速度测试套件,并改进了 jQuery 中三个最常用的部分的速度:ID 选择器、标签名选择器和 each() 循环。绝对有必要将这些项目都尽可能地提高速度,因为它们有可能被无限次、反复地重复使用。
以下是 测试套件,用于分析这三种更改的速度。
$(“#id”) 改进
浏览器 |
jQuery 1.1.3 |
jQuery 1.1.4 |
改进率 |
IE 6 |
651ms |
70ms |
830% |
Firefox 2 |
1355ms |
27ms |
4919% |
Safari 3 |
101ms |
14ms |
620% |
Opera 9 |
270ms |
62ms |
335% |
平均改进率 |
1676% |
$(“elem”) 改进
浏览器 |
jQuery 1.1.3 |
jQuery 1.1.4 |
改进率 |
IE 6 |
661ms |
451ms |
47% |
Firefox 2 |
1717ms |
143ms |
1100% |
Safari 3 |
99ms |
83ms |
19% |
Opera 9 |
226ms |
198ms |
14% |
平均改进率 |
295% |
.each() 改进
浏览器 |
jQuery 1.1.3 |
jQuery 1.1.4 |
改进率 |
IE 6 |
200ms |
30ms |
567% |
Firefox 2 |
468ms |
29ms |
1514% |
Safari 3 |
17ms |
11ms |
54% |
Opera 9 |
45ms |
25ms |
80% |
平均改进率 |
554% |
测试套件大修
这是一个非常重要的消息,尤其是对于大多数开发人员而言。jQuery 测试套件 已从头开始进行了完全重构和改进,以提高稳定性。已集成了一系列全新的动画和 Ajax 测试,使 jQuery 的总测试数量达到了800 多个!
此外,测试套件 在我们支持的所有主要浏览器中都完全通过了测试,没有出现错误:Firefox 2、Safari 3、Internet Explorer 6 和 Opera 9(为了简洁起见,未显示 Safari 2 和 IE 7)。证明

将来,我们将努力改进对 jQuery 的事件、属性和 CSS 部分的覆盖率,这无疑将很快使我们的测试数量超过 1000 个。
此外,值得注意的是,jQuery 测试套件现在已嵌入到 Mozilla 测试套件中,针对即将发布的 Firefox 3 的每次提交进行运行。您可以放心地知道,在 Firefox 的最新版本中,一切都会按预期正常运行。
错误修复
此版本已修复了 53 个工单。您可以在 错误跟踪器 上阅读完整的详细信息(其中包括已添加到 jQuery 1.1.3.1 的修复)。
已解决了许多重大问题,包括与 HTML 脚本评估、Safari CSS 计算样式访问和 Ajax 设置操作相关的问题。
新功能
已引入了一些新功能。其中前两个,.slice() 和 :has(),将成为 jQuery 1.2 的一部分,但它们的存在是由于一些已弃用的功能(请参见下文)。对 extend() 和 noConflict() 的新更改是为了能够修复 jQuery 中一些长期存在的 bug。
.slice()
您可能在 JavaScript 数组中存在的 .slice() 方法中认识这个方法名称,您很幸运,因为它与该方法的行为完全相同。这是一个用于拆分 jQuery 对象并获取其中元素的绝佳方法。以下所有都是使用 slice() 方法的有效方式
$("div").slice(0,1); // First div
$("div").slice(-1); // Last div
$("div").slice(1,-1); // All divs but the first and last
$("div").slice(1,3); // The second and third div
$("div").slice(7,8); // The eighth div
:has()
此新选择器是当前检查其他元素中的元素的方法(div[p])的替代方法。现在,您可以像使用该特定的 XPath 选择器一样使用此选择器,例如
// All divs with a paragraph inside
$("div:has(p)")
// All anchors with an image inside
$("a:has(img)")
// All divs that have an anchor inside that have an image inside
$("div:has(a:has(img))")
深度递归.extend()
这是对 jQuery .extend() 方法的常见请求。此更改允许您深度合并嵌套对象(而不是覆盖彼此)。这是通过示例最佳说明的
// Normal .extend()
jQuery.extend(
{ name: "John", location: { city: "Boston" } },
{ last: "Resig", location: { state: "MA" } }
);
// Result:
// => { name: "John", last: "Resig", location: { state: "MA" } }
// New Deep .extend()
jQuery.extend( true,
{ name: "John", location: { city: "Boston" } },
{ last: "Resig", location: { state: "MA" } }
);
// Result:
// => { name: "John", last: "Resig",
// location: { city: "Boston", state: "MA" } }
.noConflict(true)
如前所述,对 .noConflict() 的此添加允许您完全重命名 ‘jQuery’ 命名空间和 ‘$’ 快捷方式,同时还回滚这些引入可能做出的任何更改。您可以使用此新的快捷方式,如下所示
// Give jQuery a custom name:
var jq = jQuery.noConflict(true);
jq("#id div").hide();
// Both Fail - $ and jQuery have been renamed:
$("#id div").hide();
jQuery("#id div").hide();
此技巧也可以用来将 jQuery 推送到现有的命名空间中,例如
// Put jQuery in a namespace:
var obj = {};
obj.jq = jQuery.noConflict(true);
obj.jq("#id div").hide();
已弃用的功能
为了准备即将发布的 jQuery 1.2 中的 API 更改,我们在 jQuery 1.1.4 中弃用了一些方法。在尽可能的情况下,我们提供了执行操作的备用方法。
与 jQuery 1.1 版本一样,jQuery 1.2 将提供向后兼容插件。因此,如果您希望继续使用这些特定技术,您可以使用该插件并继续使用。
此外,为了处理 XPath 更改,我们将发布另一个独立的插件,用于处理 jQuery 中的 XPath 选择器功能。该插件将与 jQuery 1.2 版本一起发布。
选择器
$("div//p") XPath 后代选择器
请使用 CSS$("div p")选择器代替。或者,在 jQuery 1.2 发布后,使用新的 XPath 插件。
$("div/p") XPath 子选择器
请使用 CSS$("div > p")选择器代替。或者,在 jQuery 1.2 发布后,使用新的 XPath 插件。
$("p/../div") XPath 父选择器
请使用$("p").parent("div")选择器代替。或者,在 jQuery 1.2 发布后,使用新的 XPath 插件。
$("div[p]") XPath 包含谓词选择器
请使用新的$("div:has(p)")选择器代替。或者,在 jQuery 1.2 发布后,使用新的 XPath 插件。
$("a[@href]") XPath 属性选择器
注意:虽然此选择器在本版本中已弃用,但它不会在 jQuery 1.2 中删除。在 jQuery 1.2 中,建议您使用 CSS 选择器$("a[href]")代替。或者,在 jQuery 1.2 发布后,使用新的 XPath 插件。
DOM 操作
$("div").clone(false)
使用参数调用克隆方法已弃用(克隆方法本身将保留)。而不是调用.clone(false)你现在应该做.clone().empty()代替。
DOM 遍历
$("div").eq(0)
此方法已弃用,取而代之的是新的 .slice() 方法(其工作方式与数组的 slice 方法相同。您可以像这样复制 .eq()
$("div").slice(0,1);
此外,.eq(0) 可以通过以下方式复制
$("div:eq(0)")
$("div:first")
$("div").lt(2)
此方法已弃用,取而代之的是新的 .slice() 方法(其工作方式与数组的 slice 方法相同。您可以像这样复制 .lt()
$("div").slice(0,2);
此外,.lt(2) 可以通过以下方式复制
$("div:lt(2)")
$("div").gt(2)
此方法已弃用,取而代之的是新的 .slice() 方法(其工作方式与数组的 slice 方法相同。您可以像这样复制 .gt()
$("div").slice(3);
此外,.gt(2) 可以通过以下方式复制
$("div:gt(2)")
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 字符串中的脚本都会自动执行。不需要替代方法。
与往常一样,如果您在 jQuery 1.1.3.1 和 jQuery 1.1.4 之间遇到任何错误,请告知我们。谢谢!