在jQuery 3.0之前,在未选择任何选项的 <select multiple> 元素上调用 .val() 返回 null 。这是不方便的,因为如果选择至少一个选项,返回值将是一个数组。此外,如果所有选项都被禁用,jQuery返回值将是一个空数组。为了提高一致性,无选项选择的情况下现在返回一个空数组。
https://github.com/jquery/jquery/issues/2562
功能:SVG文档支持类名(class)操作SVG从来没有被jQuery完全支持,并且这点在jQuery 3中没有改变。尽管如此,许多jQuery方法也可以在SVG文档上使用。从jQuery 3开始,操作类名的方法,例如 .addClass() 和 .hasClass() ,支持SVG。
https://github.com/jquery/jquery/issues/2199
弃用:不带参数的 .toggleClass() 和 .toggleClass( Boolean )虽然文档记录了这两种情况的签名,其实际行为从未完全定义。这个不明确的行为现在已被废弃,因此不会被记录。您可能会发现您不小心使用了该功能,因为 .toggleClass( undefined ) 的行为和没有参数的调用是相同的,即使它是无效的输入。
回调( Callback ) 功能:SVG文档支持类名(class)操作如果一个回调对象有一个处理函数在 .fire() 之后调用 .lock() 方法,它只阻止未来执行回调列表并且不立即中止当前列表的执行。要停止当前执行,请使用 stopOnFalse 选项。
https://github.com/jquery/jquery/issues/1990
Core 更改: 在严格模式下运行jQuery 3.0现在大多数浏览器都支持通过jQuery 3.0使用”use strict”,jQuery 就是用这个指令构建的。您的代码不需要在严格模式下运行,所以大多数现有代码不需要做任何修改。我们三年前遇到的一个案件是ASP.NET 4.0使用 arguments.caller.callee 在其 __doPostBack() 方法中尝试跟踪调用堆栈。如果你仍然使用仍然这样做的ASP.NET版本,推荐继续使用jQuery 2.x或更早版本。现代浏览器通过 error.stack 支持堆栈跟踪,所以它不应该有必要检查 arguments.caller.callee 。
https://github.com/jquery/jquery/pull/3061
https://bugs.jquery.com/ticket/13335
更改:文档就绪(document-ready)处理程序现在是异步的在jQuery中,自jQuery 1.6以来,document-ready 处理由 jQuery.Deferred 实现提供支持。作为符合 Promises/A+ 规范的jQuery 3.0 队列的一部分,document-ready 处理程序被异步调用,即使是文档当前已经准备就绪,再添加处理程序。这样提供了代码执行顺序的一致性,与文档是否准备就绪无关。例如,考虑这个代码:
$(function(){console.log("ready");
});
console.log("outside ready");
在jQuery 3.0中,将总是log “outside ready”,紧接着是”ready”,不管文档在执行时候是否准备就绪。早期版本可以按任一顺序log消息。
由于处理程序是彼此独立地执行,所以在一个document-ready处理程序中的异常或失败不会阻止其他document-ready处理程序运行。
如果是自定义构建的jQuery,排除了 deferred 模块,有一种可供选择的document-ready替代品。这个实现支持 jQuery.ready promise,但不是一个 jQuery.Deferred 对象,所以它应该只能通过 jQuery.when() 使用。
https://github.com/jquery/jquery/issues/1823
https://github.com/jquery/jquery/pull/2891
更改: jQuery.isNumeric() 和自定义的 .toString()jQuery.isNumeric() 方法旨在与原始数字,以及可以强制转换为有限数字的字符串一起使用。尤其是,它不再尝试从对象的 .toString() 方法上获取数字。需要对其他数字进行专门检查的用户可以创建自己的验证函数。
https://github.com/jquery/jquery/issues/2662
更改:弃用 .context 并且移除 .selector 属性这些属性在jQuery 1.9中已弃用,因为它们只用于过时的 .live() 方法,并且从未准确地表示当前集合的上下文或选择器。
https://github.com/jquery/jquery/issues/1908
更改:文档中从未记录的内部方法不再暴露3.0版本从视图中删除了几个方法,意图是私有方法,并且文档中从未记录过:
jQuery.swap jQuery.buildFragment jQuery.domManiphttps://github.com/jquery/jquery/issues/2224
https://github.com/jquery/jquery/issues/2225
更改:空集合上返回 undefined 值除了少数例外,任何有返回值的jQuery方法在空的jQuery集合上应该返回 undefined ,以符合我们的 API指南 。以下API已更改,以符合此规则:
尺寸方法: .width() , .height() , .innerWidth() , .innerHeight() , .outerWidth() , 和 .outerHeight() 位置方法: .offsetTop() 和 .offsetLeft()以前,这些方法对于空集合返回 null 而不是 undefined 。
https://github.com/jquery/jquery/issues/2319
功能: for...of 循环可以用于jQuery集合jQuery 3.0支持ES2015中引入的 for...of 循环。它允许循环迭代对象,包括 Array , Map , 和 Set 。当使用这个循环时,获得的值是jQuery集合的DOM元素,一次一个。请注意,使用 for...of 循环请注意支持的环境,支持ES2015或如Babel转换器。这里是一个例子:
var elems = $(".someclass");// 经典的 jQuery 方式
$.each(function(i, elem) {
// 通过 elem (或 "this" 对象)工作
});
// 较漂亮的 ES2015 方式
for ( let elem of elems ) {
// 通过 elem工作
}
https://github.com/jquery/jquery/issues/1693
功能: jQuery.ready promise 正式被支持从jQuery版本1.8开始, jQuery.ready 已经作为一个类似 promise 的对象被使用(”thenable”在Promise中的术语)。从jQuery 3.0开始,这个对象通过 jQuery.when 或原生的 Promise.resolve() 被支持。不要假设这个对象是一个jQuery Deferred 或一些其他类型的promise对象,例如原生的Promise。典型用法如下所示:
$.when( $.ready, $.getScript("optional.js") ).then(function() {// 当 document 准备就绪,并且 optional.js 已经加载或运行
}).catch( function() {
// 一个错误发送时触发
});
https://github.com/jquery/api.jquery.com/pull/530
弃用: jQuery.unique() , 重命名为 jQuery.uniqueSort()jQuery.unique() 方法已重命名为 jQuery.uniqueSort() ,以使其行为更容易理解。这里没有改变其功能,只有重命名。
弃用: jQuery.parseJSON()由于jQuery 3.0支持的所有浏览器都支持原生的 JSON.parse() 方法,因此我们不推荐使用 jQuery.parseJSON() 。
https://github.com/jquery/jquery/issues/2800
弃用:除了 jQuery(function) 以外的 document-ready 处理器