在众多JavaScript框架(或JavaScript库)中,jQuery一枝独秀早已是不争的事实。在Google Trends中搜一下“jquery, prototype,dojo,yui,underscore”,你就会看到什么叫遥遥领先。为什么会这样呢?

jQuery是2006年1月14日诞生的,它的“父亲”是一位年轻帅气的80后小伙子,名叫John Resig。Resig在刚写出jQuery的时候,Dojo和Prototype等JavaScript库已经比较有名了。当时,“Ajax”这个新词儿刚刚发明不到1年,由Jesse James Garrett那篇名垂青史的文章(“Ajax: A New Approach to Web Applications”)引发的全球学习JavaScript的热潮还在持续升温。在这个大背景下,JavaScript框架如雨后春笋般纷纷破土而出。

为了快速开发时髦的Ajax应用,不少前端开发人员在日常工作中就选用Dojo、Prototype及Scriptaculous这样的JavaScript功能及效果库。这些库的主要特点是包装和扩展JavaScript核心及BOM和DOM已有的功能,为开发人员提供大量便捷的实用函数。从根本上说,这些库大都以功能为中心,而且处处迎合传统面向对象程序员的开发习惯。jQuery不然,它借鉴了很多脚本语言的动态特性,集多项创新于一身,开创了全新的编程风格。

尽管并不是第一个JavaScript框架,但jQuery后来居上;刚一发布,就“引无数英雄竞折腰”。很多其他框架的拥趸迅速迷上了jQuery,“弃暗投明”。用后来成为jQuery核心团队成员的Yehuda Katz 的话说:“(看到jQuery的)第一眼我就喜欢上了这个框架。我想,这不就是我梦寐以求的编程方式吗!”

Katz所说的“梦寐以求的编程方式”,指的就是“以DOM元素为核心,一点一点地给它们添加新功能”(by centering on DOM Elements and tacking bits of functionality on top of them, jQuery made JavaScript fun again,http://visualjquery.com/magazine/issue1.pdf)。用今天jQuery开发人员的话说,jQuery的特色就是“面向集合和方法连缀”。闭上眼睛想一想,jQuery利用CSS选择符创建jQuery对象,为这些对象提供丰富的方法,批量操作其中的DOM元素,而且让所有方法尽可能再返回这个对象以实现方法连缀调用,这些绝妙的创意组合在一起,无异于重新发明了JavaScript(就像CoffeeScript和Sass现在所做的一样)。难怪Katz说完刚才那句话,紧接着又补充道:“jQuery让写JavaScript代码变得妙趣横生!”

即便是6年后的今天,jQuery简洁、灵活的编程风格所具有的表达能力照样让人一见倾心。在前仆后继、强手如林的JavaScript框架社区中,jQuery依然是当之无愧的翘楚。今天,一名精通JavaScript的前端攻城师,很可能也是一位jQuery高手;一个JavaScript驱动的富Web应用,很可能完全是用jQuery代码写就的。简言之,学JavaScript,不能不学jQuery。

回到书的话题上。从2007年开始,介绍jQuery的书渐渐地多起来。人民邮电出版社图灵公司慧眼独具,率先在国内引进了本书(Learning jQuery)第1版,而我也有幸成为国内第一本jQuery中文图书的译者。不久后上市的《jQuery基础教程(第1版)》深受JavaScript及jQuery学习者欢迎。2009年11月,与时俱进的《jQuery基础教程(第2版)》问世,jQuery之父John Resig专门为之作序。时光荏苒,几度春秋。如今,本书第3版又要跟读者见面了。回想起几年来本书一版再版,长销不衰,心中不禁产生一种莫名的自豪感。根据已有的数字,应该说至少已经有近两万名读者通过这本书迈入了jQuery开发的殿堂。(当然,这个数字并未包含网络上广为流传的“扫描版”;对于“扫描版”,我绝不支持,只希望有能力购买正版的朋友不要在知识面前吝啬。)

jQuery赢在理念,本书同样不落俗套。鉴于jQuery已经成为最流行的JavaScript库,开发者队伍日益庞大、开发层次越来越高,在这个新版本中,作者重新规划了全书内容。全书总体上分为入门与提高两个部分,共包含13章3个附录。前8章是“从入门到精通”的基础部分,在上一版基础上做了很多增删改的工作,涵盖了选择元素、处理事件、样式动画、操作DOM、发送数据(Ajax),以及使用和开发插件。第9章至第13章是高级部分,每一章的章名均冠以“高级”二字:高级选择符和遍历、高级事件、高级效果、高级DOM操作和高级Ajax。不言而喻,这几章是前半部分内容的延伸和拓展,包括了各种高级应用和复杂技巧,比如优化遍历性能、使用事件委托、自定义动画效果、本地化数据和HTML5等。

另外,需要向读者说明的是,在翻译本书这一版的过程中,jQuery 1.7于2011年11月3日发布了。事实上,这个时间距jQuery 1.6.4的发布还不到两个月。虽然本书这一版的英文版基于jQuery 1.6.x,但jQuery 1.7相对于1.6.x的变化不大,而且完全向后兼容,所以本书内容同样适合jQuery 1.7,所有代码示例均可以1.7下正常运行。为了满足广大读者对jQuery 1.7的好奇心,同时也为了弥补图书出版滞后于库版本更新速度的缺憾,译者在征得英文版出版方同意的情况下,新增了附录D,简要介绍了jQuery 1.7的主要新特性和新API。

最后,感谢本书编辑丁晓昀,她认真负责的工作让本书得以完整无缺地呈现在读者面前(当然,如果再有缺失也全都是我一人的疏漏),也多亏了她的督促,才让这篇译者序得以写成。丁晓昀也是我即将出版的另一本译著《深入HTML5应用开发》的编辑,借此机会一并感谢。

最应该感谢的,还是我的妻子宋慧敏和儿子李嘉浩。妻子为家庭做出了难以想象的牺牲,分担了大部分责任,如果没有她的宽容和理解,我不可能每天沉浸在翻译的世界里。儿子则是我们俩最大的骄傲,除了时不时带给我们意外的惊喜,本书中有几句话也是他翻译录入的。

2012年2月