下载
jQuery 1.3.2
https://code.jqueryjs.cn/jquery-1.3.2.min.js 压缩版 (使用 Gzipping 压缩后 19kb)
https://code.jqueryjs.cn/jquery-1.3.2.js 标准版 (120kb)
变更
以文档顺序返回元素
这是对 jQuery 选择器引擎的更改,它将返回的结果重新排序为文档顺序,而不是传递选择器的顺序。进行此更改是为了符合 选择器 API 规范(jQuery 在支持该规范的浏览器中内部使用它)。
示例结果
// jQuery 1.3.1 (and older) $("h1, h2, h3") => [ h1, h1, h2, h2, h3, h3 ] // jQuery 1.3.2 $("h1, h2, h3") => [ h1, h2, h3, h3, h1, h2 ]
我要感谢 Diego Perini 推动我们实现这一点。
.live() 现在可以阻止冒泡
现在可以在回调中调用 event.stopPropagation()
或 return false
,并使其停止冒泡 live 事件。这意味着您现在可以在彼此内部绑定 live 事件,并且内部处理程序可以阻止外部处理程序触发。
例如
<ul> <li><b>Google</b></li> <li><b>Yahoo</b></li> </ul> <script> $("li").live("click", function(){ $(this).addClass("active"); }); $("li b").live("click", function(){ $(this).addClass("active"); return false; }); </script>
我要感谢 Iraê 为此问题提出的解决方案。
对于那些想知道 .live() 的当前缺失功能(如 submit 和 change 事件)的人来说,您可以期待所有这些功能将在下个月某个时候发布的 jQuery 1.3.3 中出现。
:visible/:hidden 大修
我们更改了 :visible 和 :hidden 选择器背后的逻辑(这些选择器在整个 jQuery 中用于确定元素的可见性)。
这是逻辑的变化
* 在 jQuery 1.3.1(及更早版本)中,如果元素的 CSS “display” 不是 “none”,其 CSS “visibility” 不是 “hidden”,并且其类型(如果它是输入)不是 “hidden”,则该元素可见。
* 在 jQuery 1.3.2 中,如果元素的浏览器报告的 offsetWidth 或 offsetHeight 大于 0,则该元素可见。
此更改意味着什么?这意味着如果元素的 CSS display 为 “none”,或者其任何父/祖先元素的 display 为 “none”,或者如果元素的宽度为 0 并且元素的高度为 0,则该元素将被报告为隐藏。
进行此切换的好处是什么?结果是双重的
* 性能大大提高。(见下文。)
* 如果元素位于 “隐藏” 元素内(以前不可能,除非使用插件),则该元素将被报告为 “隐藏”。
我要感谢 Matheus Almeida 提出了对这些选择器的性能改进的一些更改。
.height()/.width() 大修
所有与宽度和高度相关的选择器都已大修 - 极大地提高了它们在所有浏览器中的速度。
我要感谢 Mike Helgeson 在此方面的贡献,这在很大程度上是我们在这些方法中看到的巨大进步的原因。
IE 中的选择器加速
随着来自更大 JavaScript 社区的贡献不断涌现,新的 Sizzle 选择器引擎的优势真正开始显现出来。许多补充内容已发布,有助于提高引擎的性能,尤其是在 Internet Explorer 中。
我要感谢 Fabio Buffoni 在此方面的贡献,这在很大程度上是这些加速的原因。
.appendTo()/等等 现在返回插入的元素
这是一个(次要的)API 更改 - 解决 jQuery API 中的错误。appendTo、prependTo、insertBefore、insertAfter 和 replaceAll 方法现在都返回插入的元素集,而不是原始的元素集。
要了解此更改,我们需要查看一个简单的示例。
鉴于以下标记,在 jQuery 1.3.1(及更早版本)中,将发生以下情况
<div></div> <div></div> <script> $("<p/>") .appendTo("div") .addClass("test"); </script>
1.3.1(及更早版本)中的结果
<div><p class="test"></p></div> <div><p></p></div>
这是因为 .appendTo 等等 仅返回传递给它的元素,而不是实际插入的元素(并且由于只传递了一个段落 - 第一个要插入的段落 - 因此只有第一个段落添加了类)。
因此,如果您在 jQuery 1.3.2 中运行相同的代码,您将最终得到
<div><p class=”test”></p></div>
<div><p class=”test”></p></div>
这是预期的结果。唯一的区别是 appendTo、prependTo、insertBefore、insertAfter 和 replaceAll 现在都推送到 jQuery 栈(这意味着它们受 .end() 的影响)。
我们对上述方法的现有用法进行了调查,发现没有发现任何此更改会影响任何现有代码的情况,因此我们认为可以安全地继续进行(尤其是在考虑了这毕竟是预期的行为的情况下)。
测试
我们有一些关于 jQuery 项目中的测试套件和测试方法的公告。
* 我们现在完全支持,并且测试套件在 Internet Explorer 8rc1 和 Chrome 2(Nightly)(除了我们通常的浏览器选择之外)中完全通过。
* 测试套件已打破 1500 个测试(确切地说为 1504 个)。
这意味着我们现在积极地在 11 个浏览器中进行测试 - 并通过测试套件 - Chrome 1、Chrome Nightly、IE 6、IE 7、IE 8rc1、Opera 9.6、Safari 3.2、WebKit Nightly、Firefox 2、Firefox 3、Firefox Nightly。
(我们正在等待 Opera 10 的下一个 beta 版,然后再开始完全支持它,当前 beta 版存在一些严重问题。)
为了衡量 jQuery 不同部分的性能,我们使用了修改后的 SlickSpeed 测试套件副本运行我们的测试(适应处理非选择器测试)。测试运行的原始结果可以在下面找到(所有时间都以毫秒为单位)。
选择器测试
我们使用 Yahoo 主页的副本(一个具有代表性的复杂网页)并使用人们实际使用的选择器集。针对人们当前使用的选择器将有助于提高现有和未来应用程序的性能。
Frameworks jQuery 1.2.6 jQuery 1.3 jQuery 1.3.2 IE 6 1059 799 626
:hidden/:visible 测试
我们在测试页面中的多个元素上测试了 :hidden 和 :visible 选择器。
Frameworks jQuery 1.3 jQuery 1.3.2 Firefox 3 1512 190 Firefox 3.1 1202 161 Safari 3.2 592 80 Safari Nightly 334 43 Opera 9.6 1307 497 IE 6 1948 738 IE 7 1295 830 Chrome 490 30
宽度/高度测试
我们在测试页面上测试了 width、height、innerWidth、innerHeight、outerWidth 和 outerHeight 方法。
Frameworks jQuery 1.3 jQuery 1.3.2 Firefox 3 310 106 Firefox 3.1 281 84 Safari 3.2 146 37 Safari Nightly 166 32 Opera 9.6 345 116 IE 6 313 124 IE 7 283 123 Chrome 113 27