jQuery技术

jQuery 3.0 升级指南 亚洲城线上娱乐(2)

字号+ 作者:H5之家 来源:H5之家 2017-08-23 10:01 我要评论( )

现在大多数浏览器都支持通过jQuery 3.0使用use strict,jQuery 就是用这个指令构建的。您的代码不需要在严格模式下运行,所以大多数现有代码不需要做任何修改。我们三年前遇到的一个案件是ASP.NET 4.0使用arguments

现在大多数浏览器都支持通过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版本从视图中删除了几个方法,意图是私有方法,并且文档中从未记录过:

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 处理器

    由于历史兼容性问题,有多种方式设置 document-ready 处理程序。以下所有方式都是等效的,并在 document-ready 时调用函数fn:

    $(fn); $().ready(fn); $(document).ready(fn); $("selector").ready(fn);

    从jQuery 3.0开始,添加 document-ready 处理程序的推荐方式是第一个方法,$(fn)。如事件部分所述,$(document).on("ready", fn)事件形式具有略微不同的语义并在jQuery 3.0中被删除。

    Data 更改:.data()名称包含中划线

    从jQuery 3.0开始,所有 data 名称都以驼峰拼写方式(例如,clickCount)存储在jQuery内部的数据对象中,而不是中划线形式(例如,click-count)。将中划线名称转换为驼峰拼写法的方式,这与标准DOM在CSS和 data 属性中的JavaScript名称是一致的。

    一般来说,当设置或获取指定数据项时,例如 .data("right-aligned"),中划线形式在jQuery 3.0中仍然能够工作,但是如果取回data对象,它将具有驼峰拼写法的形式的 data 项(rightAligned)。3.0中的主要区别是 当你在data对象上使用中划线形式的名称时,不要使用.data()API 来获取或设置他们。

    例如:

    var $div = $("<div />"); $div.data("clickCount", 2); $div.data("clickCount"); // 2 $div.data("click-count", 3); $div.data("clickCount"); // 3 $div.data("click-count"); // 3 var allData = $div.data(); allData.clickCount; // 3 allData["click-count"]; // undefined allData["click-count"] = 14; $div.data("click-count"); // 3, 不是 14 ,但是在jQuery 2.x中,返回14 allData.clickCount; // 3 allData["click-count"]; // 14

     

    https://github.com/jquery/jquery/issues/2070

    https://github.com/jquery/jquery/issues/2257

    https://github.com/jquery/jquery/issues/1751

    Deferred 更改和功能:jQuery.Deferred 现在兼容 Promises/A+

    Deferred已更新,兼容了 Promises/A+ 和 ES2015(也称为 ES6)Promise ,这个变化带来重大影响。

    https://github.com/jquery/jquery/issues/1722

    https://github.com/jquery/jquery/issues/2102

    Resolution

    .resolve,.reject和.notify现在设置undefined的上下文,而不是使用与它们相关联的Deferred对象的promise。要设置显式上下文,使用.resolveWith,.rejectWith和.notifyWith。

    https://github.com/jquery/jquery/issues/3060

    Callback exit

     

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

    相关文章
    • jquery基础教程中关于内部函数问题

      jquery基础教程中关于内部函数问题

      2017-08-23 09:00

    • jQuery.Validate 使用笔记(jQuery Validation范例 )

      jQuery.Validate 使用笔记(jQuery Validation范例 )

      2017-08-23 08:02

    • 如何用jQuery做选项卡界面

      如何用jQuery做选项卡界面

      2017-08-22 16:03

    • 《jQuery基础教程》中文第四版

      《jQuery基础教程》中文第四版

      2017-08-22 14:05

    网友点评