jQuery技术

jQuery 3.0 升级指南(2)

字号+ 作者:H5之家 来源:H5之家 2016-11-08 16:00 我要评论( )

在jQuery 3.0之前,在未选择任何选项的 select multiple 元素上调用 .val() 返回 null 。这是不方便的,因为如果选择至少一个选项,返回值将是一个数组。此外,如果所有选项都被禁用,jQuery返回值将是一个空数组。

在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.domManip

https://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 处理器

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 四个步骤,学习jQuery

    四个步骤,学习jQuery

    2016-09-12 16:02

  • JavaScript的jQuery库中ready方法的学习教程

    JavaScript的jQuery库中ready方法的学习教程

    2016-06-17 10:00

  • Jquery 基础学习笔记

    Jquery 基础学习笔记

    2016-05-26 13:01

  • 全面详细的jQuery常见开发技巧手册

    全面详细的jQuery常见开发技巧手册

    2016-02-26 10:02

网友点评