一、说明

最近我读完了 jQuery 官方的博客仓库,目的是为了梳理清楚 jQuery API 接口的演变过程。从而明确知道在对应版本下使用正确、合适的 API,以下便是我的总结笔记。

jQuery 有三个版本,1.*2.*3.*,下面给出它们的区别:

1.*:IE6+ 的浏览器支持。只做 Bug 维护。最终版本 1.12.4。对于一般项目来说,使用它就够了。

2.*:IE9+ 的浏览器支持。只做 Bug 维护。最终版本 2.2.4。很少使用。

3.*:IE9+ 的浏览器支持。最新版本。jQuery.Deferred 对象更新为兼容 Promises/A+ 和 ES2015 原生 Promises 的对象模式。

jQuery CDN:新浪unpkg

版本迭代历史

jQuery 1.1.4

引入 $.noConflict()

var jq = $.noConflict();

使用后,全局环境 $jQuery 都变无效,有效的仅是变量 jq

jQuery 1.5.0

引入了 deferred 对象

jQuery 1.6.1

引入 .prop() 方法,对 .attr() 方法进行了少许修改。目的是为了区别开操作 DOM 元素属性和 HTML 标签特性,改变了之前仅有.attr() 方法的局面。

下面列举了在 1.6.1 版本后,最好使用 .prop() 方法的举例:

1.6.1 之前使用 1.6.1 之后最好用
$(window).attr… $(window).prop…
$(document).attr… $(document).prop…
$(“:checkbox”).attr(“checked”, true); $(“:checkbox”).prop(“checked”, true);
$(“option”).attr(“selected”, true); $(“option”).prop(“selected”, true);

下面列举的 boolean 类型的 HTML 特性/对象属性都推荐使用 .prop() 方法操作:

autofocus, autoplay, async, checked, controls, defer, disabled, hidden, loop, multiple, open, readonly, required, scoped, selected

下面这张表格里,最左面一列是 HTML 特性/对象属性,右边两列(attr.prop() 方法)下面打钩的表示推荐使用该方法操作(灰色钩表示也可以这样用,但不是推荐的)。

HTML 特性/对象属性 .attr() .prop()
accesskey
align
async
autofocus
checked
class
contenteditable
defaultValue
draggable
href
id
label
location *
multiple
nodeName
nodeType
readOnly
rel
selected
selectedIndex
src
style
tabindex
tagName
title
type
width **

* 例如 window.location

** 如果需要覆盖 .width() 方法

需要额外注意的是,操作 HTML 属性 value 的方法依旧使用 .val()

通过 .prop() 方法获得的是动态的值,但 .attr() 不是。例如当修改表单 <input type="text" value="abc"> 里的值为 abcdef 时,.prop("value") 值为 abcdef 但是 .attr("value") 的值依旧为 abc

<input type="checkbox" checked>checked 的值其实是个空字符串(没有就是 undefined),即 .attr("checked")"",但它的 .prop("checked")true

jQuery 1.7

引入了事件绑定方法 .on().off()。在 1.7 版本之前,给元素绑定事件的方法有三种:.bind().live().delegate(),它们已经不再推荐使用。现在统一使用 .on().off() 方法替代上面三个方法,而且使用起来也非常简单。

$(elems).on(events, selector, data, fn);
$(elems).off(events, selector, fn);

提供了 selector 参数,即被认为是委派事件,否则认为是直接绑定事件,下面列举正确使用.on().off() 方法的例子:

.bind()、.live() 和 .delegate() 使用 .on() 和 .off() 后
$(elems).bind(events, fn) $(elems).on(events, fn)
$(elems).bind(events, { mydata: 42 }, fn) $(elems).on(events, { mydata: 42 }, fn)
$(elems).unbind(events, fn) $(elems).off(events, fn)
$(elems).delegate(selector, events, fn) $(elems).on(events, selector, fn)
$(elems).undelegate(selector, events, fn) $(elems).off(events, selector, fn)
$(selector).live(events, fn) $(document).on(events, selector, fn)
$(selector).die(events, fn) $(document).off(events, selector, fn)

jQuery 1.9

引入了检索回指定 CSS 选项值的方法 $(element).css([ name1, name2 … ])

var dims = $("#box").css([ "width", "height", "backgroundColor" ]);
// { width: "10px", height: "20px", backgroundColor: "#D00DAD" }

提供了跨浏览器 CSS3 支持:

:nth-last-child, :nth-of-type, :nth-last-of-type, :first-of-type, :last-of-type, :only-of-type, :target, :root, :lang

jQuery 1.10.0 和 2.0.1 同时发行

同时发行的目的是为了统一 1.x 和 2.x 版本的 API 行为,就是说 1.x 和 2.x 版本除了浏览器兼容性(1.x 支持 IE6+ ,2.x 支持 IE9+)不同外,其它都一样,两个版本的切换是没有问题的:

2015 年 jQuery 版本几乎无更新,都是 bug 修改,而且博客少更新,跟 2008 年一样。jQuery 1.12 还没有音讯。

jQuery 1.10.0 - 1.12.4 与 2.0.1 - 2.2.4 同时开发,目的是提供统一的公共 API,除了内部代码实现不同外,还有浏览器支持上的不同。

但看样子,用 1.10.2 版本就够了,因为会发现后续版本没有 API 改变,且每一次次版本升级带来的都是漫长的 bug 修改期。

支持 IE8 的话,用 1.10.2,否则(适用现代浏览器)用 2.0.3 就可以了。

jQuery 1.12.4 和 2.2.4

1.12.4:IE6+ 的浏览器支持,1.* 的最终版本。

2.2.4:IE9+ 的浏览器支持。2.* 的最终版本。

jQuery 3.0

2016 年起 jQuery 团队开发重点放在 3.0 版本,1.x 和 2.x 版本在 5 月份停止更新。

2016 年 1 月 14 号,jQuery 10 周年,3.0 版本面世

[译] jQuery 3 有哪些新东西

jQuery.Deferred 对象更新为兼容 Promises/A+ 和 ES2015 原生 Promises 对象模式。

Slim 版本,不包括 ajax 和效果模块(基本效果函数除外)代码。

jQuery 3.1.0

修复 jQuery(document).ready(function() {}) 里的无声抛错 Bug。

$(function() {
throw new Error('boom!')
$('#app').text('hello world');
});

(完)

jQuery 演变史的更多相关文章

  1. [转载]大型网站应用中 MySQL 的架构演变史

    没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...

  2. 大型网站应用中MySQL的架构演变史

    没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...

  3. 【转】图说Android的8年演变史

    原文网址:http://tech.gmw.cn/2016-02/17/content_18916338_14.htm 图说Android的8年演变史 我有话说    0      2011年10月谷歌 ...

  4. IOS演变史

    我是从iOS5开始接触iPhone操作系统,对此系统也算是有爱有恨,今天从网上整理以下整个iOS发展的历史,了解了解也算做以后闲时讨论的一个话题. 电脑需要操作系统,手机也需要,2007年,苹果带着旗 ...

  5. 【译】异步JavaScript的演变史:从回调到Promises再到Async/Await

    我最喜欢的网站之一是BerkshireHathaway.com--它简单,有效,并且自1997年推出以来一直正常运行.更值得注意的是,在过去的20年中,这个网站很有可能从未出现过错误.为什么?因为它都 ...

  6. 窥探QQ基础数据库架构演变史

    作为腾讯最核心最基础的后台服务之一,QQ基础数据库是存储QQ用户帐户信息和关系链信息的海量集群,它承载了百万级每秒的访问量.十亿级的账户数.百亿级关系链.如此大规模的集群,它是如何从300万的数量级一 ...

  7. 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)

    目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...

  8. Android 开发平台的演变史

    Android开发平台的发展(并不是很懂) Eclipse 首先是由IBM的一个项目小组花了两年时间开发完成的,当时主要解决IBM开发工具 Visual Age for Java 和 WebSpher ...

  9. C#基础——谈谈.NET异步编程的演变史

    http://www.cnblogs.com/fzrain/p/3545810.html 前言 C#5.0最重要的改进,就是提供了更强大的异步编程.C#5.0仅增加两个新的关键字:async和awai ...

随机推荐

  1. C#网络编程(同步传输字符串) - Part.2

    服务端客户端通信 在与服务端的连接建立以后,我们就可以通过此连接来发送和接收数据.端口与端口之间以流(Stream)的形式传输数据,因为几乎任何对象都可以保存到流中,所以实际上可以在客户端与服务端之间 ...

  2. Python学习系列(二)(基础知识)

    Python基础语法 Python学习系列(一)(基础入门) 对于任何一门语言的学习,学语法是最枯燥无味的,但又不得不学,基础概念较繁琐,本文将不多涉及概念解释,用例子进行相关解析,适当与C语言对比, ...

  3. Oracle中的存储过程简单例子

    --创建表create table TESTTABLE(  id1  VARCHAR2(12),  name VARCHAR2(32))select t.id1,t.name from TESTTAB ...

  4. git超速掌握之一(基本使用)

    前言: 无论你是运维.开发还是IT爱好者,都会听说github了吧?动不动哪位大神就说在github上有什么什么项目,我的github地址是xxxxx,甚至有自己个github在找新工作时都能给自己加 ...

  5. 在PHP中对查询出得数据库数据进行json编码

    select.php <?php $con = mysql_connect("localhost","Thh","920920thh" ...

  6. cowboy的例子

    大体参考的这里,非常感谢他的例子 开发的时候先下载好cowboy的库,放到~/.erlang里面 code:add_pathz("/Users/mmc/erlang/3rd_libs/cow ...

  7. 终端启动tomcat报错 command not found 解决方法 (含启动和关闭命令)

    Tomcat配置步骤: 1.cd命令进入Tomcat安装路径的bin下 2.sudo chmod 755*.sh 输入appleID密码获得相关权限 3.sudo sh ./startup.sh启动T ...

  8. python's sixteenth day for me 员工信息表

    import os user_dic = { 'username':None, 'password':None, 'login':True } flag = False name_list = ['i ...

  9. 利用JS 在网页上获取并显示当前日期 星期

    下边的HTML代码,可以取出日期与星期 <html><body><h1><script language=JavaScript>var d, s = & ...

  10. Android 学习 - Telnet 控制AVD

    启动Android Virtual Device之后,使用telnet,可以方便地控制AVD. 首先,获取端口号.启动AVD后,在标题栏上方会出现端口号:设备名,在下面的截图中为5554:N4-15- ...