jQuery 在很久以前就引入了 on() 方法,它提供了一个统一的接口,用以取代 bind()、delegate() 和 live() 等方法。与此同时,jQuery 还引入了 off() 这个方法来取代 unbind()、undelegated() 和 die() 等方法。从那时起,bind()、delegate()、unbind() 和 undelegate() 就已经不再推荐使用了,但它们还是一直存在着。
jQuery 3 终于开始将这些方法标记为 “废弃” 了,并计划在未来的某个版本(很可能是 jQuery 4)中将它们彻底移除。因此,请在你的项目中统一使用 on() 和 off() 方法,这样你就不用担心未来版本的变更了。
移除 load()、unload() 和 error() 方法jQuery 3 彻底抛弃了 load()、unload() 和 error() 等已经标记为废弃的方法。这些方法在很早以前(从 jQuery 1.8 开始)就已经被标记为废弃了,但一直没有去掉。如果你正在使用的某款插件仍然依赖这些方法,那么升级到 jQuery 3 会把你的代码搞挂。因此,在升级过程中请务必留意。
移除 context、support 和 selector 属性jQuery 3 彻底抛弃了 context、support 和 selector 等已经标记为废弃的属性。同上,在升级到 jQuery 3 时,请留意你正使用的插件。
Bugs fixed 已修复的 BugjQuery 3 修复了以往版本中的一些非常重要的 bug。在本节中,我将着重介绍其中两处,因为这两者应该会对你写代码的习惯带来显著影响。
width() 和 height() 的返回值将不再取整jQuery 3 修复了 width()、height() 和其它相关方法的一个 bug。这些方法的返回值将不再舍入取整,因为这种取整行为在某些情况下不便于对元素进行定位。
我们来详细看一看。假设你一个宽度为 100px 的容器元素,它包含了三个子元素,宽度均为三分之一(即 33.333333%):
<div class="container"> <div>My name</div> <div>is</div> <div>Aurelio De Rosa</div> </div>
在 jQuery 3 以前的版本中,如果你尝试通过以下代码来获取子元素的宽度……
$('.container div').width();
……那么你得到结果将是 33。原因在于 jQuery 会把 33.33333 这个值取整。而在 jQuery 3 中,这个 bug 已经被修复了,因此你将会得到更加精确的结果(即一个浮点数)。
wrapAll() 方法jQuery 3 还修复了 wrapAll() 方法中的一个 bug,这个 bug 出现在把一个函数作为参数传给它的情况下。在 jQuery 3 以前的版本中,当一个函数被传给 wrapAll() 方法时,它会把 jQuery 集合中的每个元素单独包裹起来。换句话说,这种行为和把一个函数传给 wrap() 时的行为是完全一样的。
在修复这个问题的同时,还引入了另外一个变更:由于在 jQuery 3 中,这个函数只会调用一次了,那就无法把 jQuery 集合中每个元素都传给它。因此,这个函数的执行上下文(this)将只能指向当前 jQuery 集合中的第一个元素。
Downloading jQuery 3 beta 1 如何下载 jQuery 3 beta 1If this article was of any interest to you, you might want to try the first beta of jQuery 3. You can obtain it by accessing one of the two URLs below.
既然你已经读到了这里,那说明你很可能想试试 jQuery 3 的第一个 beta 测试版。你可以通过以下两个地址来获取这个版本:
It’s also available on npm and you can download it by running the command:
当然,你还可以通过 npm 来下载:
npm install jquery@3.0.0-beta1
Conclusion 结论Many people state that jQuery is dead and it doesn’t have a place in modern web development anymore. However, its development continues and contradict these claims.
很多人一直在唱衰 jQuery,说它在现代网页开发中已经没有一席之地了。但不管怎样,jQuery 的开发仍在继续,客观的统计数据(在排名前一百万名的网站中占有率高达 78.5%)也让这些论调不攻自破。
In this article, I’ve walked you through the main changes that jQuery 3 will feature. As you might have noticed, this version is unlikely to break any of your existing projects as it doesn’t introduce many breaking changes. Nonetheless, there are some points to keep in mind when upgrading such as the improvement of the Deferred object. As is always the case before update a third-party dependency, a review of the project will help you spot any unexpected behavior or broken functionality.