jQuery 3 有哪些新东西

jQuery 的横空出世,至今已有十个年头了,而它的长盛不衰显然不是没有理由的。jQuery 提供了极为友好的接口,使得开发者们可以方便地进行 DOM 操作、发起 Ajax 请求、生成动画……不一而足。此外,与 DOM API 不同的是,jQuery 采用了 。这意味着你可以在任何一个 jQuery 集合身上调用 jQuery 方法,而不用关心它到底包含了几个元素(不管是零个、一个或多个,都没问题)。

在未来的几周内,jQuery 就将抵达一个重要的里程碑——正式发布 3.0 版本。jQuery 3 修复了大量的 bug,增加了新的方法,同时移除了一些接口,并修改了少量接口的行为。在这篇文章中,我将为大家重点讲解 jQuery 3 所引入的那些最重要的变化。

New Features 新增特性

In the following sections I’ll discuss the most important features added in jQuery 3.

我们先来讨论 jQuery 3 中最重要的几个新增特性。

for...of 循环

在 jQuery 3 中,我们可以用 for...of 循环语句来迭代一个 jQuery 集合中的所有 DOM 元素。这种新的迭代方法是 ECMAScript 2015(即 ES6)规范中的一部分。这个方法可以对 “可迭代对象”(比如 Array、Map、Set 等)进行循环。

当使用这种新的迭代方法时,你在循环体内每次拿到的值并不是一个 jQuery 对象,而是一个 DOM 元素(译注:这一点跟 .each() 方法类似)。当你在对一个 jQuery 集合进行操作时,这个新的迭代方法可以少许改善你的代码。

为了搞清楚这种迭代方法到底是怎么工作的,我们来假设一个场景——你需要给页面中的每个 input 元素分配一个 ID。在 jQuery 3 之前,你可能会这样写:

var $inputs = $('input'); for(var i = 0; i < $inputs.length; i++) { $inputs[i].id = 'input-' + i; }

In jQuery 3 you can write:

而在 jQuery 3 中,你就可以这样写了:

var $inputs = $('input'); var i = 0; for(var input of $inputs) { input.id = 'input-' + i++; }

(译注:其实 jQuery 自己是有个 .each() 方法的,可读性也不赖。)

$.get() 和 $.post() 函数的新签名

jQuery 3 为 $.get() 和 $.post() 这两个工具函数增加了新签名,从而使得它们和 $.ajax() 的接口风格保持一致。新签名是这样的:

$.get([settings]) $.post([settings])

settings 是一个对象,它包含多个属性。它的格式和你以前传给 $.ajax() 的参数格式是一样的。如果你想更清楚地了解这个参数对象,请参考 中的相关描述。

$.get() 和 $.post() 的参数对象与传给 $.ajax() 的参数相比,唯一的区别就是前者的 method 属性总是会被忽略。原因其实也很简单,$.get() 和 $.post() 本身就已经预设了发起 Ajax 请求的 HTTP 方法了(显然 $.get() 就是 GET,而 $.post() 就是 POST)。也就是说,正常人类应该是不会想用 $.get() 方法来发送一个 POST 请求的。

Consider the following code:

假设有以下一段代码:

$.get({ url: 'https://www.audero.it', method: 'POST' // This property is ignored // 这个属性将被忽略 });

Despite the method property, this statement won’t send a POST request but a GET request.

不管我们把 method 属性写成什么,这个请求总是会以 GET 的方式发出去的。

采用 requestAnimationFrame() 来实现动画

所有现代浏览器(包括 IE10 及以上)。jQuery 3 将会在内部采用这个 API 来实现动画,以便达到更流畅、更省资源的动画效果。

unwrap() 方法

jQuery 3 为 unwrap() 方法增加了一个可选的 selector 参数。这个方法的新签名是这样的:

unwrap([selector])

有了这个特性,你就可以给这个方法传入一个包含选择符表达式的字符串,用它来在父元素内进行匹配。如果存在匹配的子元素,则这个子元素的父层将被解除;如果没有匹配,则不进行操作。

Features Changed 有变更的特性

jQuery 3 还修改了一些特性的行为。

:visible 和 :hidden

jQuery 3 将会修改 :visible 和 :hidden 过滤器的含义。只要元素具有任何布局盒,哪怕宽高为零,也会被认为是 :visible。举个例子,br 元素和不包含内容的行内元素现在都会被 :visible 这个过滤器选中。

因此,如果你的页面中包含如下的结构:

<div></div> <br />

然后运行以下语句:

console.log($('body :visible').length);

在 jQuery 1.x 和 2.x 中,你得到的结果会是 0;但在 jQuery 3 中,你会得到 2。

data() 方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6f34d8d921afad2c8faf5c776a6740de.html