构建工具

jQuery 全面研究报告

jQuery 是由 John Resig 于 2006 年 1 月 14 日发布的轻量级 JavaScript 库,核心理念为 "Write Less, Do More"(写更少代码,做更多事情)。它...

作者:洋柿子·2026-09-01·共 6 篇 · 当前 6

jQuery 全面研究报告

一、jQuery 概述

jQuery 是由 John Resig 于 2006 年 1 月 14 日发布的轻量级 JavaScript 库,核心理念为 "Write Less, Do More"(写更少代码,做更多事情)。它封装了 DOM 操作、事件处理、动画效果和 AJAX 交互等复杂逻辑,解决了早期浏览器兼容性问题,成为前端开发领域的革命性工具。

截至 2026 年 5 月,最新稳定版本为 4.0.0(2026 年 1 月 17 日发布,20 周年献礼),压缩后仅约30KB,全球仍有超过 70% 的网站在使用。


二、核心特性与原理

1. 核心设计理念

  • 简化 DOM 操作:通过$()函数(或jQuery())封装复杂的 DOM 选择与操作
  • 链式调用:方法返回 jQuery 对象,支持连续调用,减少代码量
  • 跨浏览器兼容:屏蔽不同浏览器 API 差异,提供统一接口
  • 插件生态:丰富的第三方插件扩展功能
  • 事件委托:优化事件绑定,支持动态元素事件处理

2. 核心原理

2.1 jQuery 对象机制

javascript

运行

// 核心构造函数
function jQuery(selector, context) {
  return new jQuery.fn.init(selector, context);
}
// 原型扩展
jQuery.fn = jQuery.prototype = {
  constructor: jQuery,
  // 方法定义...
};
// 关键技巧:共享原型,减少内存占用
jQuery.fn.init.prototype = jQuery.fn;

2.2 选择器引擎(Sizzle)

  • 基于 CSS 选择器,支持 CSS1-CSS3 标准选择器
  • 提供扩展选择器(如:visible、:animated、:input)
  • 采用 "从右到左" 匹配策略,提升选择效率

2.3 事件系统

  • 封装addEventListener和attachEvent,统一事件绑定接口
  • 事件委托机制(.on()方法):利用事件冒泡,减少直接绑定
  • 事件命名空间:支持精确事件管理,避免冲突

2.4 AJAX 封装

  • 统一XMLHttpRequest接口,支持GET、POST等请求方法
  • 提供$.ajax()、$.get()、$.post()等便捷方法
  • 支持 Promise 风格链式调用(4.0 版本强化)

三、核心功能详解

1. 选择器系统(jQuery 灵魂)

表格

选择器类型 语法示例 说明
基本选择器 $('p')、$('#id')、$('.class') 元素、ID、类选择器
层级选择器 $('div > p')、$('div + p')、$('div ~ p') 子元素、相邻兄弟、后续兄弟
过滤选择器 $('p:first')、$('p:eq(2)')、$('p:visible') 位置、状态过滤
属性选择器 $('input[type="text"]') 基于属性值选择
表单选择器 $(':input')、$(':checkbox') 表单元素快捷选择

2. DOM 操作

2.1 内容操作

// 获取/设置文本
$('#box').text(); // 获取
$('#box').text('新内容'); // 设置

// 获取/设置HTML
$('#box').html(); // 获取
$('#box').html('<p>新HTML</p>'); // 设置

// 表单值操作
$('input').val(); // 获取
$('input').val('新值'); // 设置

2.2 属性操作

// 获取/设置属性
$('#box').attr('class'); // 获取
$('#box').attr('class', 'new-class'); // 设置

// 类操作(推荐)
$('#box').addClass('new-class');
$('#box').removeClass('old-class');
$('#box').toggleClass('active');
$('#box').hasClass('active'); // 检查

2.3 元素操作

// 创建元素
$('<div>').text('新元素');

// 插入元素
$('#box').append('<p>末尾</p>'); // 内部末尾
$('#box').prepend('<p>开头</p>'); // 内部开头
$('#box').after('<p>后面</p>'); // 外部后面
$('#box').before('<p>前面</p>'); // 外部前面

// 删除元素
$('#box').remove(); // 彻底删除
$('#box').empty(); // 清空内容

3. 事件处理

// 基础事件绑定
$('button').click(function() {
  alert('点击了按钮');
});

// 多事件绑定
$('button').on({
  click: function() { /* 点击处理 */ },
  mouseenter: function() { /* 鼠标进入处理 */ },
  mouseleave: function() { /* 鼠标离开处理 */ }
});

// 事件委托(推荐)
$('#list').on('click', 'li', function() {
  // 处理列表项点击,支持动态添加的li
  console.log($(this).text());
});

// 事件触发
$('button').trigger('click');

4. AJAX 操作

// 基础AJAX
$.ajax({
  url: '/api/data',
  method: 'GET',
  data: { id: 1 },
  success: function(response) {
    console.log('成功:', response);
  },
  error: function(xhr, status, error) {
    console.error('失败:', error);
  }
});

// 快捷方法
$.get('/api/data', { id: 1 })
  .done(function(response) { /* 成功 */ })
  .fail(function(error) { /* 失败 */ });

$.post('/api/save', { name: 'test' })
  .done(function(response) { /* 成功 */ });

5. 动画效果

// 显示/隐藏
$('#box').show(); // 显示
$('#box').hide(); // 隐藏
$('#box').toggle(); // 切换

// 淡入淡出
$('#box').fadeIn(); // 淡入
$('#box').fadeOut(); // 淡出
$('#box').fadeToggle(); // 切换
$('#box').fadeTo(1000, 0.5); // 淡到指定透明度

// 滑动效果
$('#box').slideDown(); // 下滑显示
$('#box').slideUp(); // 上滑隐藏
$('#box').slideToggle(); // 切换

// 自定义动画
$('#box').animate({
  left: '250px',
  opacity: 0.5,
  height: '+=150px',
  width: '+=150px'
}, 1000); // 1秒完成

四、版本历史与兼容性

主要版本里程碑

版本 发布时间 重大变化
1.0 2006.01 首次发布,核心功能完善
1.3 2009.01 引入 Sizzle 选择器引擎,性能大幅提升
2.0 2013.04 放弃 IE6-8 支持,体积更小
3.0 2016.06 支持 Promise,优化动画性能
4.0 2026.01 放弃 IE10 及更早支持,清理废弃 API,增强现代标准支持jQuery

兼容性说明

  • jQuery 4.0:支持 IE11+、Chrome、Firefox、Safari 等现代浏览器jQuery
  • IE11:将在 jQuery 5.0 中逐步淘汰jQuery
  • 移动端:支持 iOS 12+、Android 7+jQuery

五、jQuery 4.0 新特性(2026 年)

  1. 移除过时 API:删除load()、unload()、error()等废弃方法
  2. Promise 优化:$.ajax()返回标准 Promise 对象,增强异步流程控制
  3. 性能提升:精简代码,优化 DOM 操作和事件处理性能
  4. 现代标准支持:更好支持 CSS 变量、Web Components 等新特性
  5. 模块化改进:支持 ES 模块导入,适配现代构建工具

六、优缺点分析

优点

  1. 简化开发:大幅减少代码量,提高开发效率
  2. 跨浏览器兼容:解决 90% 以上的浏览器兼容性问题
  3. 学习曲线平缓:语法直观,易于上手
  4. 插件生态丰富:海量第三方插件(UI、图表、表单验证等)
  5. 链式调用:代码简洁优雅,可读性强

缺点

  1. 性能开销:比原生 JavaScript 多一层封装,存在性能损耗
  2. 功能冗余:现代浏览器原生 API 已实现大部分 jQuery 功能
  3. 不适合大型 SPA:缺乏组件化和状态管理机制
  4. 依赖问题:增加额外 HTTP 请求,影响页面加载速度
  5. 与现代框架冲突:在 Vue/React 项目中使用可能导致 DOM 操作冲突

七、现代替代方案对比

表格

方案 核心优势 适用场景
原生 JavaScript 无依赖、性能最佳、无需学习新 API 轻量级页面、性能敏感场景
Vue.js 响应式数据绑定、组件化、易上手 中小型 SPA、企业应用
React 虚拟 DOM、单向数据流、生态丰富 大型复杂应用、跨平台开发
Vanilla JS 库 轻量级、专注单一功能(如 axios、lodash) 替代 jQuery 特定功能,减少体积

原生 JS 替代 jQuery 常用功能示例

表格

jQuery 功能 原生 JS 等价实现
选择器 document.querySelector()/document.querySelectorAll()
类操作 element.classList.add()/remove()/toggle()
事件绑定 element.addEventListener()
AJAX fetch() API(支持 Promise)
动画 CSS transitions/animations

八、适用场景与最佳实践

适合使用 jQuery 的场景

  1. 传统多页网站:需要简单交互,无需复杂状态管理
  2. 遗留系统维护:已有大量 jQuery 代码,迁移成本高
  3. 快速原型开发:追求开发速度,无需考虑长期维护
  4. 小型工具 / 插件:轻量级需求,无需引入大型框架
  5. 浏览器扩展开发:环境受限,需要兼容多种浏览器

最佳实践

  1. 避免过度使用:仅在必要时引入,优先使用原生 API

  2. 使用最新版本:享受性能提升和安全修复

  3. 模块化引入:使用 jQuery Slim 版(不含 AJAX 和动画)或按需引入组件

  4. 事件委托优先:减少直接事件绑定,提升性能和兼容性

  5. 缓存 jQuery 对象:避免重复选择 DOM 元素

    // 推荐
    const $box = $('#box');
    $box.addClass('active');
    $box.text('新内容');
    
  6. 与现代框架共存:在 Vue/React 中使用ref获取 DOM 元素,避免直接操作 DOM


九、总结与未来展望

jQuery 作为前端开发的 "老前辈",在 Web 发展史上留下了浓墨重彩的一笔。它解决了早期前端开发的核心痛点,推动了 Web 技术的普及与发展。

尽管现代前端框架(Vue、React 等)和原生 API 的进步削弱了 jQuery 的必要性,但它在特定场景下仍有不可替代的价值。jQuery 4.0 的发布表明其团队仍在积极维护,适应现代 Web 标准,确保其在未来几年内仍能发挥作用。

对于开发者而言,理解 jQuery 的设计思想和核心原理,不仅有助于维护遗留系统,更能加深对 JavaScript 和 DOM 的理解,为学习现代前端框架打下坚实基础。

需要我把上述内容整理成一份可直接用于面试的 “jQuery 核心考点清单 + 常见面试题” 吗?