jQuery 演变史
一、说明
最近我读完了 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 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.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 演变史的更多相关文章
- [转载]大型网站应用中 MySQL 的架构演变史
没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...
- 大型网站应用中MySQL的架构演变史
没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...
- 【转】图说Android的8年演变史
原文网址:http://tech.gmw.cn/2016-02/17/content_18916338_14.htm 图说Android的8年演变史 我有话说 0 2011年10月谷歌 ...
- IOS演变史
我是从iOS5开始接触iPhone操作系统,对此系统也算是有爱有恨,今天从网上整理以下整个iOS发展的历史,了解了解也算做以后闲时讨论的一个话题. 电脑需要操作系统,手机也需要,2007年,苹果带着旗 ...
- 【译】异步JavaScript的演变史:从回调到Promises再到Async/Await
我最喜欢的网站之一是BerkshireHathaway.com--它简单,有效,并且自1997年推出以来一直正常运行.更值得注意的是,在过去的20年中,这个网站很有可能从未出现过错误.为什么?因为它都 ...
- 窥探QQ基础数据库架构演变史
作为腾讯最核心最基础的后台服务之一,QQ基础数据库是存储QQ用户帐户信息和关系链信息的海量集群,它承载了百万级每秒的访问量.十亿级的账户数.百亿级关系链.如此大规模的集群,它是如何从300万的数量级一 ...
- 剖析虚幻渲染体系(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. ...
- Android 开发平台的演变史
Android开发平台的发展(并不是很懂) Eclipse 首先是由IBM的一个项目小组花了两年时间开发完成的,当时主要解决IBM开发工具 Visual Age for Java 和 WebSpher ...
- C#基础——谈谈.NET异步编程的演变史
http://www.cnblogs.com/fzrain/p/3545810.html 前言 C#5.0最重要的改进,就是提供了更强大的异步编程.C#5.0仅增加两个新的关键字:async和awai ...
随机推荐
- fn project 扩展
目前支持的扩展方式 Listeners - listen to API events such as a route getting updated and react accordingly. ...
- 《笔者带你剖析Apache Commons DbUtils 1.6》(转)
前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更 多的是依靠Hibernate.Ibatis.Spring JDBC.JPA等大厂提供的持久层技术解决方案, ...
- 7 函数——《Swift3.0从入门到出家
6 函数 函数就是对某个功能的封装,一个swift程序可能由多个函数组成 swift中定义函数的格式: func 函数名称(参数列表) —>函数返回值类型{ 函数体 return } 函数定义要 ...
- 双击 cui
//改变属性块的双击事件 //将菜单文件中的双击改一下,退出时还原文件 acad.bak.cui 改这个名字 每次用这个更新为新的 acad.cui进行修改 //退出时再用 acad.bak.cui还 ...
- HTTP重要概念
connection连接 一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间. 在http1.1,request和reponse头中都有可能出现一个connection的头,此header的含 ...
- 2016女生赛 HDU 5710 Digit-Sum(数学,思维题)
Digit-Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total S ...
- 011. 解决VS2015中CS1528: Expected ; or = (cannot specify constructor arguments in declaration)
编译器错误消息: CS1528: Expected ; or = (cannot specify constructor arguments in declaration) 源错误: 行 94: ...
- Unity3D 4.3在Windows下打包iOS资源
想当年,想弄iOS的版本必须弄台mac机器,虽然一开始要弄iOS的时候觉得在mac上开发感觉挺高富帅的,但是做多了之后就觉得在mac上开发各种不方便.现在好了,Unity3D 4.3开始支持在Wind ...
- Java 对象和实例的区别
本来我以为是一样的,其实是不一样的 参看:http://www.blogjava.net/dreamstone/archive/2011/06/03/101733.html
- python学习——练习题(4)
""" 题目:输入某年某月某日,判断这一天是这一年的第几天? """ import datetime import time from fu ...