标题：jquery
简介
jQuery是一个兼容多浏览器的javascript库，核心理念是write less,do more(写的更少,做的更多)。jQuery在2006年1月由美国人John Resig在纽约的barcamp发布，吸引了来自世界各地的众多javascript高手加入，现在由Dave Methvin率领团队进行开发。如今，jQuery已经成为最流行的javascript库，在世界前10000个访问最多的网站中，有超过55%在使用jQuery。
jQuery是免费、开源的，使用MIT许可协议。jQuery的语法设计可以使开发者更加便捷，例如操作文档对象、选择DOM元素、制作动画效果、事件处理、使用Ajax以及其他功能。除此以外，jQuery提供API让开发者编写插件。其模块化的使用方式使开发者可以很轻松的开发出功能强大的静态或动态网页。
特点
jQuery包含以下特点：
[1]
1.动态特效
2.AJAX
3.通过插件来扩展
4.方便的工具 - 例如浏览器版本判断
5.渐进增强
6.链式调用
7.多浏览器支持，支持Internet Explorer6.0+、Opera9.0+、Firefox2+、Safari2.0+、Chrome1.0+
开始使用jQuery
jQuery库是一个单独的javascript文件，可以保存到本地或者服务器直接引用，也可以从多个公共服务器中选择引用。有Media Temple、Google、Microsoft等多家公司给jQuery提供CDN服务，比较常用的引用地址如下
<script type="text/javascript" src="http://ajax.googleapis. com/ajax/libs/jquery/1.8/jquery.min.js"></script>
目前的版本是1.9.0（截止2013年1月）
最常使用的jQuery基础方法是.ready()方法
$(document).ready(function(){
//script goes here
});
或者其简写
$(function(){
//script goes here
});
当dom加载完就可以执行（比window.onload更早）。在同一个页面里可以多次出现.ready()
实例
为元素添加单击事件，发生对象隐藏效果
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("p").click(function(){
$(this).hide();
});
});
</script>
</head>
<body>
<p>If you click on me, I will disappear.</p>
</body>
</html>
结果:隐藏页面内的<p>标签
选择器
jQuery 使用 sizzle引擎，支持css选取，Xpath选取等方式。
$("p") 选取全部 <p> 元素。
$("p.intro") 选取所有包含class为"intro"的 <p> 元素。
$("#demo") 选取 id为"demo" 的元素。
$("[href]") 选取所有带有 href 属性的元素。
$("[href='#']") 选取所有带有 href 值等于 "#" 的元素。
$("[href!='#']") 选取所有带有 href 值不等于 "#" 的元素。
$("[href$='.jpg']") 选取所有 href 值以 ".jpg" 结尾的元素。
$("[href^='/imgaes/']") 选取所有 href 值以 /imgaes/" 开头的元素。
更多详细信息请参见jQuery API的Selectors部分。
事件处理
直接绑定指定事件，事件类型即方法名，支持click、focus、blur、submit等。
$("#button").click(function(){
//script goes here
});
用on来绑定事件，off来解绑事件，第一个参数为事件名，第二个参数为回调函数。1.7.2版本开始支持。
$("#button").on('click',function(){
//script goes here
});
在1.7.1或更早版本，需要用bind/unbind（常规绑定），live/die（预绑定）来替代on/off。
更多详细信息请参见jQuery API的Events部分。
动态特效
$("#msg").show("fast");
$("#msg").hide("slow");
$("#msg").fadeIn();
$("#msg").fadeOut();
以上代码实现一个id为Msg的jQuery对象的渐入和淡出。函数接受的参数除了快慢等，还可以接收整型，作为渐入或淡出的完成时间，单位为ms。更多详细信息请参见jQuery API的Effects部分。
AJAX
使用jquery实现ajax方式如下
$.ajax({
type: "POST",
url: "example.php",
data: "name=John&location=Boston"
}).done(function(msg){
alert("Data Saved: " + msg);
}).fail(function(xmlHttpRequest,statusText,errorThrown) {
alert(
"Your form submission failed.\n\n"
+ "XML Http Request: " + JSON.stringify(xmlHttpRequest)
+ ",\nStatus Text: " + statusText
+ ",\nError Thrown: " + errorThrown);
});
这个例子发送name=John和location=Boston两个数据给服务端的example.php，请求成功后会提示用户。
更多详细信息请参见jQuery API的Ajax部分。
插件机制
jQuery的官方插件是jQuery UI。开发者可以任意扩展jQuery的函数库或者按照自己的需求开发UI组件。目前网上已经有数以千计的jQuery插件[2]，覆盖各种各样的需求。例如Ajax辅助、数据表格、动态列表、XML工具、拖曳、cookie处理、弹出层等等。jQuery 的文档说明很全，而且各种应用也说得很详细，同时还有许多成熟的插件可供选择,比如ComponentOne for jQuery.
历史版本
jQuery 1.0（2006年8月）：该库的第一个稳定版本，已经具有了对CSS选择符、事件处理和AJAX交互的稳健支持。
jQuery 1.1（2007年1月）：这一版大幅简化了API。许多较少使用的方法被合并，减少了需要掌握和解释的方法数量。
jQuery 1.1.3（2007年7月）：这次小版本变化包含了对jQuery选择符引擎执行速度的显著提升。从这个版本开始，jQuery的性能达到了Prototype、Mootools以及Dojo等同类JavaScript库的水平。
jQuery 1.2（2007年9月）：这一版去掉了对XPath选择符的支持，原因是相对于CSS语法它已经变得多余了。这一版能够支持对效果的更灵活定制，而且借助新增的命名空间事件，也使插件开发变得更容易。
jQuery UI（2007年9月）：这个新的插件套件是作为曾经流行但已过时的Interface插件的替代项目而发布的。jQuery UI中包含大量预定义好的部件（widget），以及一组用于构建高级元素（例如可拖放的界面元素）的工具。
jQuery 1.2.6（2008年5月）：这一版主要是将Brandon Aaron开发的流行的Dimensions插件的功能移植到了核心库中。
jQuery 1.3（2009年1月）：这一版使用了全新的选择符引擎Sizzle，库的性能也因此有了极大提升。这一版正式支持事件委托特性。
jQuery 1.3.2（2009年2月）：这次小版本升级进一步提升了库的性能，例如改进了：visible/:hidden选择符、.height()/.width()方法的底层处理机制。另外，也支持查询的元素按文档顺序返回。
jQuery 1.4（2010年1月14号)对代码库进行了内部重写组织，开始建立一些风格规范。老的core.js文件被分为attribute.js,css.js,data.js,manipulation.js,traversing.js和queue.js；CSS和attribute的逻辑分离。
jQuery 1.5（2011年1月31日）：该版本修复了83个bug，解决了460个问题。重大改进有：重写了Ajax模块；新增延缓对象（Deferred Objects）；jQuery替身——jQuery.sub()；增强了遍历相邻节点的性能；jQuery开发团队构建系统的改进。
⒈4重要新特性：
·常用方法的性能大幅提升：重写了大部分较早期的函数；
·更容易使用的设置函数（setter function）：为所有对象新增了许多易用的设置函数；
·对Ajax的改进：引入了许多Ajax和JSON处理方面的更新，包括HTML5元素的序列化；
·attribute（改进了.attr()的性能）、jQuery()核心函数、CSS（.css()性能有两倍提升）、特效和事件、DOM操作等也有显著改进
⒈5
美国时间2012年1月31日John Resig在jQuery官方博客发表文章，宣布jQuery 1.5正式版已经如期开发完成，可以下载使用。压缩版本jQuery Minified29KB，不压缩版本jQuery Regular（用于阅读和调试）207KB。由于jQuery已经成为目前最流行的JavaScript库，得到广泛的支持，新版本的发布当然非常引人注目。
重要变化：
1. Ajax重写
Ajax模块完全进行了重写。新增一个jXHR对象，为不同浏览器内置的XMLHttpRequest提供了一致的超集。对于XMLHttpRequest之外的传输机制，比如JSONP请求，jXHR对象也可以进行处理。（详情可以参见：jQuery.ajax文档）
此外，系统的可扩展性大大增强，可以附加各种数据处理器、过滤器和传输机制，为开发新的Ajax插件提供了方便。
2. 延迟对象
延迟对象（Deferred Object，jQuery.Deferred对象）是一个可链接的（chainable）实用工具对象，实现了Promise接口，可以在回调队列中注册多个回调、调用回调队列并转发任何同步/异步函数的成败状态。正如Using Deferreds in jQuery 1.5一文中说明的，其结果是在jQuery中能够将依赖于某个任务（事件）结果的逻辑与任务本身解耦了。这一点在JavaScript中其实并不新鲜，Mochikit和Dojo等已经实现有些日子了。由于jQuery 1.5的Ajax模块内置使用了延迟对象，因此现在通过jQuery编写Ajax程序将自动获得这一功能。
开发人员借此可以使用无法立即获得的返回值（如异步Ajax请求的返回结果），而且第一次能够附加多个事件处理器。
例如，使用了新的jQuery内部Ajax API就可以实现下面的代码了：
// Assign handlers immediately after making the request,// and remember the jxhr object for this request var jxhr = $.ajax({ url: "example.php" }) .success(function() { alert("success"); }) .error(function() { alert("error"); }) .complete(function() { alert("complete"); });// perform other work here ... // Set another completion function for the request above jxhr.complete(function(){ alert("second complete"); });
此外，使用jQuery.Deferred还可以开发自己的延迟对象。更多详情参见：延迟对象文档。
3. jQuery.sub()
jQuery 1.5提供了一种创建和修改jQuery副本的方式。可以用来添加不向外部公开的方法，或者对jQuery的某些方法进行重新定义以提供新功能，或者提供更好的封装、避免名称空间冲突。当然，也可以用来开发插件，但Resig强烈建议在开发插件之前，先考虑jQuery UI widget工厂。
值得注意的是，sub函数并不提供真正的隔离，所有方法、数据、调用仍然依靠jQuery本身来支持。
4. 遍历性能提高
在新版本中.children(),.pre(),.next()几个常用的遍历函数性能有了显著提高。
5. 内部开发系统
John Resig还特别提到了jQuery团队内部开发系统的两点改变：一是服务器端用Node.js替换了老的Java/Rhino系统，使得团队可以专注于JavaScript环境的新变化；二是所用的代码优化程序从Google Closure切换到UglifyJS，新工具的压缩效果非常令人满意。
jQuery 1.5.2 在1.5的基础上修正的大量的bug
jQuery 1.7b
2011年09月29日jQuery 1.7 的第一个 beta 测试版本，该版本修复了超过 50 个的问题以及带来一些新特性。
2011年11月4日jQuery1.7正式版发布。
新版本包含了很多新的特征，特别提升了事件委派时的性能尤其是在IE7下。
新增及改进项：
⒈新的事件 APIs: .on() and .off()；
⒉提升了事件委派时的性能有了大幅度的提升，尤其是在IE7下；
⒊更好的在 IE 6/7/8 上支持 HTML5；
⒋切换动画更加直观；
⒌匿名模块定义 AWD
⒍jQuery.Deferred
⒎jQuery.isNumeric()
被删除的方法：
event.layerX and event.layerY
jQuery.isNaN()
2012年03月24日jQuery 1.7.2正式版发布。
该版本在1.7.1的基础上修复了大量的bug，并改进了部分功能。而相比于1.7.2 RC1，只修复了一个bug。值得注意的是：如果你正在使用jQuery Mobile，请使用最新的jQuery 1.7.2和jQuery Mobile 1.1这两个版本，因为之前的jQuery Mobile版本还基于jQuery core 1.7.1或更早的版本。
2012年11月14日 jQuery 1.8.3 发布，修复 bug 和性能衰退问题
IE8中的HTML相关Bug
jQuery 1.8.2在IE9中调用ajax失败的问题
jQuery 1.7.1不能正确地设置IE7中克隆元素的tabindex属性
压缩的JS文件包含非ASCII字符
如果body样式设置为display:none，则$('body').show()无法工作
在IE9中element.css('filter')返回不明确
在Android 2.3.4的浏览器中，jQuery 1.8.1转场效果崩溃
在iPad上缩放一个灯箱效果后，所有动画效果失效
从1.3.2升级到1.8.2版本后，出现Uncaught TypeError错误
在Chrome和Safari中，无法正确检测包含可编辑内容的DIV的焦点
2013年3月 jQuery 2.0 Beta 2 发布
据jQuery官方博客3月消息，jQuery 2.0 Beta 2 发布。
根据用户对jQuery 2.0 Beta 1 版本的反馈，Beta 2 版做了一些修改。jQuery官方表示，非常需要用户来测试 Beta 2 版，最好同时也能向他们反馈提交建议。
他们相信，Beta 2 版已非常稳定，值得一试，不需要等 2.0 的最终版本。
jQuery 团队在官博中再次提醒用户，jQuery 2.0 不再支持IE 6/7/8 了，但是 jQuery 1.9 会继续支持。因为旧版 IE 浏览器在整个互联网中还有很大部分市场，所以他们非常期望大部分网站能继续使用 jQuery 1.x 一段时间。jQuery 团队也将同时支持 jQuery 1.x 和 2.x 。1.9 和 2.0 版的 API 是相同的，所以不必因为你们网站还在用 jQuery 1.9，就感觉好像错过了什么，或者是落后了。
如果你想继续支持 IE 6/7/8，并且又想尝试 jQuery 2.0，那你可以额外加上一些代码。除了老版的 IE，其他所有浏览器都将使用第二脚本，忽略第一个。
在很多环境中，jQuery 2.0 应当都表现的很好。如下：
Google Chrome plugins
Mozilla XUL apps and Firefox extensions
Firefox OS apps
Chrome OS apps
Windows 8 Store (“Modern/Metro UI”) apps
BlackBerry 10 WebWorks apps
PhoneGap/Cordova apps
Apple UIWebView class
Microsoft WebBrowser control
Cheerio or jsdom with Node.js
Intranet applications