With contributions by James Padolsey, Paul Irish, and others. See the GitHub repository for a complete history of contributions.中文版由灰狐翻译团队完成:Hxgdzyuyi、Jack Hsing、Julian Wong、Leegorous、黎展波、Sky hx、Zengzhan、Allen 和其它朋友。

Licensed by Rebecca Murphey under the Creative Commons Attribution-Share Alike 3.0 United States license. You are free to copy, distribute, transmit, and remix this work, provided you attribute the work to Rebecca Murphey as the original author and reference the GitHub repository for the work. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license. Any of the above conditions can be waived if you get permission from the copyright holder. For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to the license.


Table of Contents

1. 欢迎
获得代码
软件
在你的页面里添加JavaScript
JavaScript的调试
练习
本书所使用的一些约定
相关阅读材料
I. JavaScript 101
2. JavaScript 基础
概述
基础语法
运算符
条件语句
循环语句
关键字
数组
对象
函数
测试类型
作用域
闭包
II. jQuery: 基础概念
3. jQuery 基础
$(document).ready()
选择元素
使用选择器
CSS, Styling, & Dimensions
属性
遍历
操作元素
练习
4. jQuery核心
$ vs $()
实用方法
校验类型
数据方法
特色 & 浏览器探测
避免与其它库的冲突
5. 事件
概述
为元素绑定事件Connecting Events to Elements
在事件处理函数中的函数 Inside the Event Handling Function
触发事件处理函数
使用事件委托提高性能
事件助手
练习
6. Effects 特效
概述
基本特效
使用$.fn.animate自定义效果
管理效果
练习
7. Ajax
Overview
Key Concepts
jQuery's Ajax-Related Methods
Ajax and Forms
Working with JSONP
Ajax Events
Exercises
8. 插件
准确来说,什么是一个插件?
如何创建一个基本的插件
寻觅插件
自己动手写插件
使用 jQuery UI Widget Factory 编写有状态的插件(Stateful Plugins)
练习
III. 高级主题
工作进度
9. 性能调优的最佳实践
在循环中缓存 length
在循环外使用 append
保持 DRY
当心匿名函数
优化选择器
使用事件委派
先将元素 detach 出来再操作
应该使用样式表给大量元素修改 CSS
使用 $.data 而不是 $.fn.data
别费时间在空白的选择结果上了
变量定义
条件判断
别把 jQuery 当作黑盒子
10. 代码组织
概述
封装
管理依赖
练习
11. Custom Events
Introducing Custom Events

List of Examples

1.1. 页面内嵌JavaScript的例子
1.2. 引用外部JavaScript的例子
1.3. 例子的样式
2.1. 一个简单的变量声明
2.2. 引号外的空格和制表符是没有意义的
2.3. 括号内的表达式拥有更高的优先级
2.4. 制表符只是为了增加代码可读性,并没有什么其他的作用
2.5. 连接字符串
2.6. 乘法和除法
2.7. 自加和自减
2.8. 如果把数字和字符串相加,最后得到字符串
2.9. 把字符串强制转换成数字类型
2.10. 使用一元运算符的+号,把运算符后的变量转换成数字类型。
2.11. 逻辑与和逻辑或操作符
2.12. 比较运算符
2.13. 流程控制
2.14. 被判断义为 true的值
2.15. 被判定为false的值
2.16. 三元运算符
2.17. 一个switch分支语句
2.18. 循环语句
2.19. 典型的for 循环
2.20. 典型的 while循环
2.21. while 循环,在条件判断部分对计数器i进行自加
2.22. 一个 do-while 循环
2.23. 停止循环
2.24. 跳过下一个循环迭代
2.25. 简单数组
2.26. 通过索引访问数组项
2.27. 测试数组长度
2.28. 改变数组项值
2.29. 加入元素到数组中
2.30. 关于数组
2.31. 创建一个对象常量
2.32. 函数申明
2.33. 命名函数表达式
2.34. 一个简单函数
2.35. 函数返回一个值
2.36. 函数返回另一个函数
2.37. 一个自执行的匿名函数
2.38. 以参数的方式传递一个匿名函数
2.39. 以参数的方式传递一个命名函数
2.40. 测试各种变量的类型
2.41. 函数访问同一作用域内定义的变量
2.42. 代码作用域外定义的变量不能访问该变量Code outside the scope in which a variable was defined does not have access to the variable
2.43. 拥有相同名字的变量可以以不同的值存在不同的作用域中
2.44. 函数定义后可看见变量值的改变
2.45. Scope insanity
2.46. 如何锁定i的值?
2.47. 以一个闭包的方式锁定i的值
3.1. A $(document).ready() block
3.2. $(document).ready() 简写
3.3. 用命名函数替代匿名函数传递
3.4. 通过ID选择元素
3.5. 通过类名选择元素
3.6. 通过属性选择元素
3.7. 通过组合CSS选择器选择元素
3.8. 伪选择器
3.9. 测试选择器是否包含多个元素
3.10. 在变量中保存选择器
3.11. 改善选择器
3.12. 使用表单相关的伪选择器
3.13. 链式
3.14. 格式化链式代码
3.15. 使用 $.fn.end恢复你原来的选择器
3.16. $.fn.html 方法作为一个 setter 使用
3.17. html 方法作为一个 getter 使用
3.18. 取得 CSS 属性
3.19. Setting CSS properties
3.20. 使用类
3.21. 基本尺寸方法
3.22. 设置属性
3.23. 取得属性
3.24. 使用遍历方法围绕DOM移动
3.25. 通过选择器迭代
3.26. 改变一个元素的HTML
3.27. 使用不同的方法移动元素
3.28. 拷贝一个元素
3.29. 创建新元素
3.30. 创建一个包含属性对象的新元素
3.31. 从页中获得一个新元素
3.32. 同一时刻创建和添加元素到页面
3.33. 操作单一属性
3.34. 操作多个属性
3.35. 使用函数去确定新的属性值
4.1. 校验任意值的类型e
4.2. 存储和检索一个元素的相关数据
4.3. 使用 $.fn.data 存储元素之间的关系
4.4. 将 jQuery 设为 no-conflict 模式
4.5. 在自执行匿名函数中使用 $
5.1. 使用便捷的方式绑定
5.2. 使用$.fn.bind方法绑定事件
5.3. 使用$.fn.bind方法将数据绑定到事件
5.4. 使用$.fn.one方法转换处理函数
5.5. 取消选择器下所有的点击事件处理函数绑定
5.6. 取消特定点击事件处理函数绑定
5.7. 命名空间事件 Namespacing events
5.8. 阻止链接被访问
5.9. 以正确的方式触发事件处理函数
5.10. 使用$.fn.delegate委托事件
5.11. 使用$.fn.live委托事件
5.12. 解除委托事件的绑定
5.13. hover助手函数
5.14. toggle助手函数
6.1. 基本的动画效果
6.2. 设置动画效果持续时间
6.3. 增加 jQuery.fx.speeds 自定义动画速度
6.4. 动画执行完后运行代码
6.5. 运行回调函数即使没设置任何参数
6.6. 使用$.fn.animate自定义效果
6.7. easing属性
7.1. Using the core $.ajax method
7.2. Using jQuery's Ajax convenience methods
7.3. Using $.fn.load to populate an element
7.4. Using $.fn.load to populate an element based on a selector
7.5. Turning form data into a query string
7.6. Creating an array of objects containing form data
7.7. Using YQL and JSONP
7.8. Setting up a loading indicator using Ajax Events
8.1. 这个插件用于 hover(鼠标划过)时添加/删除一个 class
8.2. Mike Alsup 的 jQuery 插件设计模式
8.3. 用 jQuery UI widget factory 创建一个简单的有状态的插件
8.4. 给 widget 传递参数
8.5. 给 widget 设置默认值
8.6. 创建 widget 的方法
8.7. 调用插件实例的方法
8.8. 当参数被修改时执行一些操作
8.9. 提供回调功能让用户进行扩展
8.10. 绑定 widget 事件
8.11. 给 widget 添加 destroy 方法
10.1. 对象原语
10.2. 将对象原语用到jQuery特性中
10.3. 组件模式
10.4. 通过jQuery使用组件模式
10.5. 使用RequireJS:一个简单示例
10.6. 使用依赖的简单JavaScript文件
10.7. 定义一个没有依赖性的RequireJS模块
10.8. 定义一个有依赖性的RequireJS模块
10.9. 定义一个返回函数的RequireJS模块
10.10. RequireJS构建配置文件