跳到主要内容JavaScript大前端
jQuery 从入门到实战全解:前端高效开发核心
系统讲解 jQuery 从入门到实战的核心知识。涵盖 jQuery 定义、引入方式、基础语法、DOM 操作(选择器、样式、内容、属性)、事件处理(绑定、委托、对象)、动画效果(预设、自定义、控制)、AJAX 数据交互(简化与通用方法)及工具方法。同时分析插件开发基础、优缺点及适用场景,帮助开发者快速掌握这一经典前端库,理解其与原生 JS 的区别,并在实际项目中合理应用。
墨染流年27 浏览 jQuery 从入门到实战全解:前端高效开发核心
在前端开发的发展历程中,jQuery 曾是当之无愧的'明星工具库'。它以'write less, do more'为核心理念,极大简化了原生 JavaScript 的 DOM 操作、事件处理、AJAX 请求等繁琐流程,同时完美解决了不同浏览器之间的兼容性问题。即便如今 Vue、React 等框架盛行,jQuery 在后端模板渲染、简单交互开发、老项目维护等场景中仍有着广泛应用。对于前端初学者而言,掌握 jQuery 不仅能快速上手实际开发,更能加深对 DOM、事件流等前端核心概念的理解。本文将从入门到实战,全面拆解 jQuery 的核心知识点,搭配可直接运行的示例代码与实用拓展,助你彻底掌握这一高效开发利器。
一、jQuery 入门:什么是 jQuery?为什么要用它?
1.1 核心定义
jQuery 是一个基于原生 JavaScript 封装的轻量级、高效的 JavaScript 库,它封装了原生 JS 中常用的 DOM 操作、事件处理、动画效果、AJAX 请求等功能,提供了简洁、直观的 API,让开发者能用更少的代码完成更多的功能。
简单理解:jQuery 就像是原生 JS 的'升级版工具包'。原生 JS 操作 DOM 时需要写大量重复代码,还需处理浏览器兼容,而 jQuery 把这些复杂逻辑封装成了简单的方法,我们直接调用即可。
1.2 为什么要学习 jQuery?
- 简化 DOM 操作:原生 JS 获取 DOM 元素、修改样式/内容需要繁琐的代码,jQuery 用简洁的选择器和方法就能完成,效率大幅提升。
- 解决浏览器兼容:jQuery 内部已经处理了 IE、Chrome、Firefox 等不同浏览器的兼容问题,开发者无需关注底层兼容细节。
- 丰富的功能封装:内置动画效果、AJAX 请求、事件处理等常用功能,无需重复造轮子。
- 轻量级且易用:核心文件体积小(压缩后仅几十 KB),学习成本低,API 直观易懂。
- 广泛的应用场景:大量老项目仍基于 jQuery 开发,后端模板(如 JSP、Thymeleaf)开发中常用 jQuery 实现前端交互,许多插件(如轮播图、表单验证)也依赖 jQuery。
1.3 jQuery 的引入方式
使用 jQuery 前必须先引入,主要有两种引入方式:
1.3.1 引入本地文件
先从 jQuery 官网(https://jquery.com/)下载 jQuery 文件(推荐 1.x 版本,兼容 IE8 及以上;3.x 版本不兼容低版本 IE),然后通过 script 标签引入本地文件:
<body>
<script src="jquery-1.12.4.min.js"></script>
<script>
</script>
</body>
1.3.2 引入 CDN 文件
无需下载文件,直接引入第三方 CDN(内容分发网络)提供的 jQuery 文件,加载速度快,适合线上项目:
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script>
1.3.3 引入验证
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
console.log($);
console.log(jQuery);
$(function(){
alert("jQuery 引入成功!");
});
</script>
二、jQuery 核心语法:基础入门必备
2.1 核心思想:选择器 + 方法
jQuery 的核心语法可以概括为:$(选择器).方法()。
$:jQuery 的全局别名,等价于 jQuery,用于获取 DOM 元素并返回一个 jQuery 对象。
- 选择器:和 CSS 选择器语法一致,用于精准定位需要操作的 DOM 元素(如标签选择器、类选择器、ID 选择器等)。
- 方法:jQuery 封装的功能方法,用于对选中的 DOM 元素执行操作(如修改样式、绑定事件、修改内容等)。
示例:修改 ID 为 title 的元素内容和样式:
<h1 id="title">原始标题</h1>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$("#title").text("jQuery 核心语法").css({color:"red",fontSize:"24px"});
</script>
2.2 入口函数:DOM 加载完成后执行
原生 JS 中,若要在 DOM 加载完成后执行代码,需使用 DOMContentLoaded 事件;jQuery 提供了更简洁的入口函数,确保代码在 DOM 加载完成后执行(避免操作尚未加载的 DOM 元素)。
2.2.1 两种常用写法
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
console.log("DOM 加载完成,可执行 jQuery 代码");
$("#title").text("入口函数示例");
});
$(document).ready(function(){
});
</script>
2.2.2 和 window.onload 的区别
原生 JS 的 window.onload 也会等待页面加载完成,但和 jQuery 入口函数有明显区别:
| 对比项 | jQuery 入口函数($(function())) | window.onload |
|---|
| 触发时机 | DOM 结构加载完成后立即触发(无需等待图片、视频等资源加载) | 页面所有资源(DOM、图片、视频等)加载完成后才触发 |
| 执行次数 | 可多次定义,依次执行 | 只能定义一次,多次定义会覆盖前面的 |
| 简洁度 | 简洁,代码量少 | 相对繁琐 |
| 开发建议 | 优先使用 jQuery 入口函数,确保代码在 DOM 加载完成后执行,避免出现'无法找到 DOM 元素'的错误。 | |
2.3 jQuery 对象与原生 DOM 对象的区别与转换
使用 jQuery 时必须区分'jQuery 对象'和'原生 DOM 对象',两者不能混用方法(如 jQuery 对象不能调用原生 JS 的方法,反之亦然)。
2.3.1 核心区别
- 原生 DOM 对象:通过
document.getElementById()、document.querySelector() 等原生方法获取的对象,只能调用原生 JS 方法(如 innerHTML、style 等)。
- jQuery 对象:通过
$() 选择器获取的对象(本质是一个包含原生 DOM 元素的类数组),只能调用 jQuery 方法(如 text()、css() 等)。
<div id="box"></div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
const boxDom = document.getElementById("box");
boxDom.innerHTML = "原生 DOM 对象";
boxDom.style.color = "blue";
const $box = $("#box");
$box.text("jQuery 对象");
$box.css("fontSize","18px");
boxDom.text("错误");
$box.innerHTML = "错误";
</script>
2.3.2 相互转换
实际开发中可能需要相互转换(如使用 jQuery 选择器获取元素后,调用原生 JS 方法):
- jQuery 对象 → 原生 DOM 对象:jQuery 对象是类数组,可通过索引(
$obj[索引])或 get(索引) 方法获取原生 DOM 对象。
- 原生 DOM 对象 → jQuery 对象:将原生 DOM 对象传入
$() 即可。
<div id="box"></div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
const $box = $("#box");
const boxDom1 = $box[0];
const boxDom2 = $box.get(0);
boxDom1.innerHTML = "jQuery 转原生";
const boxDom = document.getElementById("box");
const $box2 = $(boxDom);
$box2.css("color","red");
</script>
三、jQuery 核心功能:DOM 操作
DOM 操作是 jQuery 最核心的功能之一,包括'查找元素(选择器)''修改样式''修改内容''操作属性''增删 DOM 元素'等,比原生 JS 简洁得多。
3.1 选择器:精准查找 DOM 元素
jQuery 选择器完全兼容 CSS 选择器语法,同时扩展了部分专属选择器,可快速精准定位 DOM 元素。常用选择器分类如下:
3.1.1 基础选择器(最常用)
| 选择器语法 | 功能描述 | 示例代码 |
|---|
| 标签选择器:$('标签名') | 选中所有指定标签的元素 | $('div') → 选中所有 div 元素 |
| 类选择器:$('.类名') | 选中所有带指定类名的元素 | $('.box') → 选中所有 class="box"的元素 |
| ID 选择器:$('#ID 名') | 选中指定 ID 的元素(唯一) | $('#title') → 选中 id="title"的元素 |
| 通配符选择器:$('*') | 选中页面所有元素 | $('*') → 选中所有元素(慎用,性能差) |
| 组合选择器:$('选择器 1,选择器 2') | 选中多个选择器匹配的元素 | $('div,.box,#title') → 选中所有 div、.box、#title 元素 |
3.1.2 层级选择器
| 选择器语法 | 功能描述 | 示例代码 |
|---|
| 后代选择器:$('父选择器 子选择器') | 选中父元素下所有后代子元素(包括子、孙、曾孙等) | $('ul li') → 选中 ul 下所有 li 元素 |
| 子选择器:$('父选择器 > 子选择器') | 选中父元素下直接子元素(仅一级) | $('ul > li') → 选中 ul 下直接子元素 li(不包含孙级 li) |
| 相邻兄弟选择器:$('元素 + 兄弟元素') | 选中指定元素的下一个相邻兄弟元素 | $('div + p') → 选中 div 后面紧邻的 p 元素 |
| 通用兄弟选择器:$('元素 ~ 兄弟元素') | 选中指定元素后面所有同级兄弟元素 | $('div ~ p') → 选中 div 后面所有同级 p 元素 |
3.1.3 过滤选择器(jQuery 扩展)
在选中的元素集合中,根据特定条件过滤出需要的元素,语法以 : 开头:
| 选择器语法 | 功能描述 | 示例代码 |
|---|
| :first | 选中元素集合中的第一个元素 | $('li:first') → 选中所有 li 中的第一个 |
| :last | 选中元素集合中的最后一个元素 | $('li:last') → 选中所有 li 中的最后一个 |
| :eq(index) | 选中元素集合中索引为 index 的元素(索引从 0 开始) | $('li:eq(2)') → 选中所有 li 中索引为 2 的元素(第三个) |
| :gt(index) | 选中元素集合中索引大于 index 的元素 | $('li:gt(1)') → 选中所有 li 中索引大于 1 的元素(第三个及以后) |
| :lt(index) | 选中元素集合中索引小于 index 的元素 | $('li:lt(2)') → 选中所有 li 中索引小于 2 的元素(前两个) |
| :odd | 选中元素集合中索引为奇数的元素(0 为偶数) | $('li:odd') → 选中索引 1、3、5…的 li 元素 |
| :even | 选中元素集合中索引为偶数的元素 | $('li:even') → 选中索引 0、2、4…的 li 元素 |
| :not(选择器) | 选中不匹配指定选择器的元素 | $('li:not(.active)') → 选中所有 li 中不包含.active 类的元素 |
3.1.4 表单选择器(jQuery 扩展)
| 选择器语法 | 功能描述 | 示例代码 |
|---|
| :input | 选中所有表单元素(input、textarea、select、button) | $(':input') → 选中所有表单元素 |
| :text | 选中所有单行文本框(type="text") | $(':text') → 选中所有单行文本框 |
| :password | 选中所有密码框(type="password") | $(':password') → 选中所有密码框 |
| :radio | 选中所有单选按钮(type="radio") | $(':radio') → 选中所有单选按钮 |
| :checkbox | 选中所有复选框(type="checkbox") | $(':checkbox') → 选中所有复选框 |
| :checked | 选中所有被选中的单选按钮/复选框 | $(':checked') → 选中所有选中的单选/复选框 |
| :selected | 选中所有被选中的下拉列表项 | $('select option:selected') → 选中下拉列表中被选中的项 |
3.2 样式操作:修改元素样式
jQuery 提供了 css()、addClass()、removeClass() 等方法,用于修改元素样式,比原生 JS 的 style 属性更灵活。
3.2.1 单个样式操作:css(属性名,属性值)
修改单个 CSS 样式,属性名可使用驼峰命名(如 fontSize)或中划线命名(如 font-size,需加引号):
<div id="box">样式操作示例</div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $box = $("#box");
$box.css("fontSize","20px");
$box.css("color","red");
const fontSize = $box.css("fontSize");
console.log("当前字体大小:", fontSize);
});
</script>
3.2.2 多个样式操作:css(对象)
<div id="box">多个样式操作</div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#box").css({
fontSize:"24px",
color:"white",
backgroundColor:"#333",
padding:"10px 20px",
borderRadius:"5px"
});
});
</script>
3.2.3 类操作:addClass/removeClass/toggleClass
通过操作 CSS 类名修改样式(推荐,便于样式与逻辑分离):
<style>
.box{width: 200px;height: 200px;background-color: #eee;padding: 20px;}
.active{background-color: blue;color: white;font-size: 18px;}
</style>
<div id="box" class="box">类操作示例</div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $box = $("#box");
$box.addClass("active");
$box.click(function(){
$(this).toggleClass("active");
});
const hasActive = $box.hasClass("active");
console.log("是否有 active 类:", hasActive);
});
</script>
3.3 内容操作:修改元素文本/HTML
jQuery 提供 text()、html()、val() 方法,分别用于操作元素的文本内容、HTML 内容、表单值。
3.3.1 text():操作文本内容
用于设置或获取元素的纯文本内容(不解析 HTML 标签):
<div id="box">原始文本</div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $box = $("#box");
const text = $box.text();
console.log("原始文本:", text);
$box.text("新的文本内容<strong>加粗</strong>");
});
</script>
3.3.2 html():操作 HTML 内容
用于设置或获取元素的 HTML 内容(解析 HTML 标签):
<div id="box"><p>原始 HTML</p></div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $box = $("#box");
const html = $box.html();
console.log("原始 HTML:", html);
$box.html("新的<strong>HTML 内容</strong>");
});
</script>
3.3.3 val():操作表单值
用于设置或获取表单元素(输入框、下拉框、单选/复选框等)的值:
<input type="text" id="username" value="默认值"><br>
<select id="city">
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="guangzhou">广州</option>
</select>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $username = $("#username");
console.log("原始值:", $username.val());
$username.val("张三");
const $city = $("#city");
console.log("原始城市:", $city.val());
$city.val("shanghai");
$("input:checkbox").val(["apple","banana"]);
});
</script>
3.4 属性操作:修改元素属性
jQuery 提供 attr()、prop()、removeAttr() 等方法,用于操作元素的属性(如 src、href、id、class 等)。
3.4.1 attr():操作普通属性
用于设置或获取元素的普通属性(如 src、href、title 等):
<img id="img" src="default.jpg" alt="默认图片" title="默认标题">
<a id="link" href="https://www.baidu.com">百度</a>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $img = $("#img");
console.log("原始 src:", $img.attr("src"));
console.log("原始 title:", $img.attr("title"));
$img.attr({src:"new.jpg",alt:"新图片",title:"新标题"});
const $link = $("#link");
$link.attr("href","https://www.jQuery.com");
$link.text("jQuery 官网");
});
</script>
3.4.2 prop():操作布尔属性
对于'布尔类型'的属性(如 checked、selected、disabled 等),推荐使用 prop()(attr() 在某些浏览器下可能出现兼容性问题):
<input type="checkbox" id="agree" checked> 同意协议 <button id="btn" disabled>禁用按钮</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $agree = $("#agree");
console.log("是否同意:", $agree.prop("checked"));
$agree.prop("checked",false);
const $btn = $("#btn");
console.log("是否禁用:", $btn.prop("disabled"));
$btn.prop("disabled",false);
});
</script>
注意:attr() 和 prop() 的区别:attr() 获取的是'HTML 属性'(标签上写的属性),prop() 获取的是'DOM 元素的属性'(JS 对象的属性)。对于布尔类型属性,优先用 prop();对于普通属性,用 attr()。
3.4.3 removeAttr():移除属性
<img id="img" src="default.jpg" alt="默认图片">
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#img").removeAttr("alt");
});
</script>
3.5 DOM 增删改:动态操作 DOM 元素
实际开发中常需要动态添加、删除、替换 DOM 元素(如动态渲染列表、添加评论等),jQuery 提供了便捷的方法。
3.5.1 动态添加元素
常用方法:append()(添加到元素内部末尾)、prepend()(添加到元素内部开头)、after()(添加到元素外部后面)、before()(添加到元素外部前面)。
<ul id="list"><li>原始列表项</li></ul>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $list = $("#list");
$list.append("<li>append 添加的项(末尾)</li>");
$list.prepend("<li>prepend 添加的项(开头)</li>");
$list.after("<p>after 添加的内容(外部后面)</p>");
$list.before("<p>before 添加的内容(外部前面)</p>");
const $newLi = $("<li>新创建的 li</li>");
$list.append($newLi);
});
</script>
3.5.2 动态删除元素
常用方法:remove()(删除元素本身及所有子元素)、empty()(清空元素内部所有子元素,保留自身)。
<ul id="list"><li>列表项 1</li><li>列表项 2</li><li id="item3">列表项 3</li></ul>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#item3").remove();
$("li:contains('列表项 1')").remove();
});
</script>
3.5.3 动态替换元素
使用 replaceWith() 方法替换指定元素:
<div id="box">原始内容</div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#box").replaceWith("<div>替换后的内容</div>");
});
</script>
四、jQuery 核心功能:事件处理
事件处理是前端交互的核心(如点击按钮、输入文本、鼠标移动等),jQuery 封装了原生 JS 的事件处理逻辑,提供了更简洁、兼容的事件绑定方法。
4.1 基础事件绑定:on() 方法(推荐)
jQuery 1.7+ 版本推荐使用 on() 方法绑定事件,支持绑定多个事件、事件委托,功能强大且统一。语法:$(选择器).on("事件类型", [事件委托目标], 事件处理函数)。
4.1.1 绑定单个事件
<button id="btn">点击按钮</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#btn").on("click",function(){
$(this).text("已点击");
alert("按钮被点击了!");
});
});
</script>
4.1.2 绑定多个事件(同一处理函数)
<div id="box" style="width: 200px;height: 200px;background: #eee;"></div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#box").on("mouseenter mouseleave",function(){
$(this).toggleClass("active");
});
});
</script>
4.1.3 绑定多个事件(不同处理函数)
<input type="text" id="input" placeholder="输入文本...">
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#input").on({
focus:function(){
$(this).css("borderColor","blue");
},
blur:function(){
$(this).css("borderColor","#ccc");
console.log("输入的内容:",$(this).val());
},
input:function(){
console.log("实时输入:",$(this).val());
}
});
});
</script>
4.2 事件解绑:off() 方法
使用 off() 方法解绑通过 on() 绑定的事件,语法灵活:
<button id="btn">点击按钮</button>
<button id="unbindBtn">解绑点击事件</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
function clickHandler(){
alert("按钮被点击了!");
}
$("#btn").on("click", clickHandler);
$("#unbindBtn").on("click",function(){
$("#btn").off("click", clickHandler);
});
});
</script>
4.3 事件委托:解决动态元素事件绑定问题
动态添加的元素(如通过 append() 添加的 li),直接绑定事件会失效(因为绑定事件时元素还未存在)。此时需要使用'事件委托':将事件绑定到静态的父元素上,由父元素委托处理子元素的事件。
事件委托核心原理:事件冒泡(子元素触发的事件会向上冒泡到父元素),父元素通过事件对象判断触发事件的目标子元素是否匹配指定规则,若匹配则执行对应的事件处理函数。简单来说,就是'父元素帮子元素代收事件并处理'。
4.3.1 事件委托语法
使用 on() 方法实现事件委托的完整语法:
$(父选择器).on("事件类型", "子选择器", 事件处理函数)
参数说明:
- 父选择器:必须是静态存在的父元素(页面加载时就已存在,不是动态添加的);
- 子选择器:需要委托事件的目标子元素(可以是动态添加的);
- 事件处理函数:事件触发时执行的逻辑。
4.3.2 事件委托示例(动态元素事件绑定)
以下示例演示动态添加 li 元素后,通过事件委托实现点击 li 弹窗的效果:
<ul id="list"><li>原始列表项 1</li><li>原始列表项 2</li></ul>
<button id="addLi">添加新列表项</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#list").on("click","li",function(){
alert("点击了:"+$(this).text());
});
$("#addLi").on("click",function(){
const newLi = "<li>动态添加的列表项"+($("li").length +1)+"</li>";
$("#list").append(newLi);
});
});
</script>
示例说明:动态添加的 li 元素无需单独绑定点击事件,因为父元素 ul 已经通过事件委托接管了所有 li 的点击事件,即使后续新增 li,点击时事件仍会冒泡到 ul 并被处理。
4.3.3 事件委托的优势
- 支持动态元素:解决了动态添加元素无法绑定事件的问题,无需在元素添加后重复绑定事件;
- 提升性能:减少事件绑定的数量(只需给父元素绑定一次,而非给每个子元素单独绑定),尤其适合子元素数量较多的场景(如长列表);
- 简化代码:统一管理子元素的事件逻辑,无需编写重复的事件绑定代码。
4.3.4 注意事项
- 父元素必须是'静态元素':即页面加载时就已存在的元素,不能是动态添加的(否则父元素本身都不存在,无法委托事件);
- 子选择器要精准:确保只匹配需要委托事件的子元素,避免无关元素触发事件;
- 事件类型支持冒泡:大部分事件(如 click、mouseenter、input 等)支持冒泡,但少数不支持冒泡的事件(如 focus、blur)无法直接使用事件委托,需改用事件捕获或其他替代方案(如 focusin、focusout)。
4.4 事件对象:获取事件相关信息
当事件触发时,jQuery 会自动将一个'事件对象'(Event Object)传入事件处理函数。该对象包含了事件触发时的详细信息(如触发事件的元素、事件类型、鼠标位置等),并提供了控制事件行为的方法(如阻止默认行为、停止事件冒泡等)。
4.4.1 事件对象的获取
直接在事件处理函数中接收参数即可获取事件对象,常用命名为 e 或 event:
<button>点击按钮</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#btn").on("click", function(e){
console.log("事件对象:", e);
});
});
</script>
4.4.2 事件对象的常用属性
通过事件对象的属性可获取事件相关信息,常用属性如下:
| 属性名 | 功能描述 | 示例代码 |
|---|
| e.target | 触发事件的'原始目标元素'(原生 DOM 对象),可能是子元素(事件冒泡场景下) | console.log(e.target); // 输出触发事件的 DOM 元素 |
| e.currentTarget | 绑定事件的'当前元素'(原生 DOM 对象),等价于 this | console.log(e.currentTarget === this); // 输出 true |
| e.type | 获取当前触发的事件类型(如"click"、'mouseenter') | console.log(e.type); // 输出"click" |
| e.pageX / e.pageY | 获取鼠标触发事件时相对于文档左上角的坐标(包含滚动距离) | console.log('X 坐标:', e.pageX, 'Y 坐标:', e.pageY); |
| e.clientX / e.clientY | 获取鼠标触发事件时相对于浏览器可视区左上角的坐标(不包含滚动距离) | console.log('可视区 X:', e.clientX); |
4.4.3 事件对象的常用方法
| 方法名 | 功能描述 | 适用场景 |
|---|
| e.preventDefault() | 阻止事件的'默认行为'(如链接跳转、表单提交、鼠标右键菜单等) | 禁止链接跳转、禁止表单默认提交 |
| e.stopPropagation() | 阻止事件'冒泡'(避免事件向上传递给父元素) | 子元素和父元素都绑定了 click 事件,避免父元素事件触发 |
| e.stopImmediatePropagation() | 阻止事件冒泡 + 阻止当前元素后续绑定的同类型事件执行 | 同一元素绑定了多个 click 事件,需终止后续事件 |
4.4.4 实际应用示例
示例 1:阻止链接跳转(preventDefault())
<a href="https://www.baidu.com">百度(点击不跳转)</a>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#link").on("click", function(e){
e.preventDefault();
alert("链接被点击,但已阻止跳转");
});
});
</script>
示例 2:阻止事件冒泡(stopPropagation())
<div id="parent">
<div id="child"></div>
</div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#parent").on("click", function(){
alert("父元素被点击");
});
$("#child").on("click", function(e){
e.stopPropagation();
alert("子元素被点击");
});
});
</script>
示例说明:点击子元素时,仅触发子元素的事件(弹出'子元素被点击');若注释掉 e.stopPropagation(),点击子元素会先触发子元素事件,再触发父元素事件(事件冒泡)。
4.5 常用简化事件绑定方法
除了通用的 on() 方法,jQuery 还提供了一系列简化的事件绑定方法(语法糖),本质是对 on() 方法的封装,更简洁直观。常用简化方法如下:
| 简化方法 | 等价于 on() 写法 | 功能描述 |
|---|
| click(function(){}) | on('click', function(){}) | 绑定点击事件 |
| dblclick(function(){}) | on('dblclick', function(){}) | 绑定双击事件 |
| mouseenter(function(){}) | on('mouseenter', function(){}) | 绑定鼠标进入事件(不冒泡) |
| mouseleave(function(){}) | on('mouseleave', function(){}) | 绑定鼠标离开事件(不冒泡) |
| focus(function(){}) | on('focus', function(){}) | 绑定元素获得焦点事件 |
| blur(function(){}) | on('blur', function(){}) | 绑定元素失去焦点事件 |
| input(function(){}) | on('input', function(){}) | 绑定输入框内容变化事件 |
<button>点击按钮</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#btn").click(function(){
alert("点击事件(简化方法)");
});
});
</script>
注意:简化事件方法仅适用于简单的事件绑定场景,若需要事件委托、绑定多个事件或后续解绑事件,仍推荐使用 on() 和 off() 方法。
五、jQuery 核心功能:动画效果
jQuery 内置了丰富的动画效果方法,无需编写复杂的 CSS 动画或原生 JS 定时器,就能快速实现元素的显示隐藏、滑动、淡入淡出、自定义运动等交互效果,极大提升了前端页面的生动性。核心动画方法分为'基础预设动画''自定义动画'和'动画控制'三类。
5.1 基础预设动画:快速实现常用效果
jQuery 提供了一系列预设动画方法,语法简洁,可直接调用,适用于大部分简单交互场景(如弹窗显示/隐藏、菜单展开/收起等)。
5.1.1 显示与隐藏:show() / hide() / toggle()
用于控制元素的显示和隐藏,默认通过改变元素的 width、height、opacity 属性实现渐变动画效果。
show([speed], [easing], [callback]):显示隐藏的元素
hide([speed], [easing], [callback]):隐藏显示的元素
toggle([speed], [easing], [callback]):切换元素的显示/隐藏状态(显示变隐藏,隐藏变显示)
speed(可选):动画持续时间,可选值为'slow'(600ms)、'fast'(200ms)、具体毫秒数(如 500)
easing(可选):动画运动曲线,默认'swing'(先慢后快再慢)、'linear'(匀速)
callback(可选):动画完成后执行的回调函数
<div id="box" style="width: 100px;height: 100px;background: red;display: none;"></div>
<button id="showBtn">显示</button>
<button id="hideBtn">隐藏</button>
<button id="toggleBtn">切换</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $box = $("#box");
$("#showBtn").click(function(){
$box.show(500,"linear",function(){
alert("显示动画完成!");
});
});
$("#hideBtn").click(function(){
$box.hide("slow");
});
$("#toggleBtn").click(function(){
$box.toggle("fast");
});
});
</script>
5.1.2 滑动动画:slideDown() / slideUp() / slideToggle()
通过改变元素的 height 属性实现'向下滑动展开''向上滑动收起'的效果,适合用于菜单、下拉列表等场景。
slideDown([speed], [easing], [callback]):向下滑动展开元素
slideUp([speed], [easing], [callback]):向上滑动收起元素
slideToggle([speed], [easing], [callback]):切换滑动状态
<ul id="menu" style="width: 200px;border: 1px solid #ccc;padding: 0;">
<li style="padding: 10px;background: #eee;cursor: pointer;" id="menuTitle">菜单列表</li>
<li style="padding: 10px;display: none;border-top: 1px solid #ccc;">选项 1</li>
<li style="padding: 10px;display: none;border-top: 1px solid #ccc;">选项 2</li>
<li style="padding: 10px;display: none;border-top: 1px solid #ccc;">选项 3</li>
</ul>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#menuTitle").click(function(){
$("#menu li:gt(0)").slideToggle(300);
});
});
</script>
5.1.3 淡入淡出动画:fadeIn() / fadeOut() / fadeToggle() / fadeTo()
通过改变元素的 opacity 属性实现'淡入''淡出'效果,适合用于图片轮播、提示框渐变等场景。
fadeIn([speed], [easing], [callback]):淡入显示元素(从透明到不透明)
fadeOut([speed], [easing], [callback]):淡出隐藏元素(从不透明到透明)
fadeToggle([speed], [easing], [callback]):切换淡入淡出状态
fadeTo([speed], opacity, [easing], [callback]):将元素淡入/淡出到指定透明度(opacity 为 0-1 的数值,元素不会隐藏)
<img src="https://picsum.photos/200/150" id="img" style="display: none;">
<button id="fadeInBtn">淡入</button>
<button id="fadeOutBtn">淡出</button>
<button id="fadeToBtn">淡到 50% 透明</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $img = $("#img");
$("#fadeInBtn").click(function(){
$img.fadeIn(600);
});
$("#fadeOutBtn").click(function(){
$img.fadeOut(600);
});
$("#fadeToBtn").click(function(){
$img.fadeTo(300,0.5);
});
});
</script>
5.2 自定义动画:animate() 方法
基础预设动画无法满足复杂需求时,可使用 animate() 方法实现自定义动画,支持任意 CSS 属性的渐变过渡(需是可计算的数值类型属性,如 width、left、fontSize 等,color 等属性需额外引入 jQuery Color 插件)。
5.2.1 基本语法
$(选择器).animate(styles,[speed],[easing],[callback]);
styles(必选):对象类型,包含要动画的 CSS 属性和目标值(如{left: '300px', top: '200px'})
speed(可选):动画持续时间,同基础动画
easing(可选):动画运动曲线,同基础动画
callback(可选):动画完成后的回调函数
5.2.2 自定义动画示例
实现元素移动、缩放、改变背景色的组合动画(背景色动画需引入 jQuery Color 插件):
<div id="box" style="width: 100px;height: 100px;background: red;position: absolute;left: 0;top: 100px;"></div>
<button id="animateBtn">执行自定义动画</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://apps.bdimg.com/libs/jquerycolor/2.1.2/jquery.color.min.js"></script>
<script>
$(function(){
$("#animateBtn").click(function(){
$("#box").animate({
left:"500px",
top:"200px",
width:"200px",
height:"200px",
backgroundColor:"#00f"
},1000,"swing",function(){
$(this).animate({
borderRadius:"50%"
},500);
});
});
});
</script>
5.3 动画控制:stop() 与 delay()
实际开发中可能需要暂停动画、延迟执行动画,jQuery 提供了 stop()(停止动画)和 delay()(延迟动画)方法,解决动画排队、执行时机控制问题。
5.3.1 停止动画:stop()
用于停止当前正在执行的动画,语法:$(选择器).stop([clearQueue], [jumpToEnd])
clearQueue(可选,布尔值):是否清除未执行的动画队列,默认 false(不清除,后续动画继续执行)
jumpToEnd(可选,布尔值):是否让当前动画直接跳转到目标状态,默认 false(停在当前位置)
<div id="box" style="width: 100px;height: 100px;background: red;display: none;"></div>
<button id="startBtn">开始动画</button>
<button id="stopBtn">停止动画</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
const $box = $("#box");
$("#startBtn").click(function(){
$box.slideDown(1000).slideUp(1000);
});
$("#stopBtn").click(function(){
$box.stop(true,true);
});
});
</script>
5.3.2 延迟动画:delay()
用于延迟执行后续动画,语法:$(选择器).delay(duration, [queueName])
duration(必选):延迟时间,单位毫秒
queueName(可选):动画队列名称,默认"fx"(jQuery 默认动画队列)
<div id="box" style="width: 100px;height: 100px;background: red;"></div>
<button id="delayBtn">延迟动画</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#delayBtn").click(function(){
$("#box").fadeOut(500).delay(1000)
.fadeIn(500);
});
});
</script>
动画注意事项:1. 动画属性需是数值类型(如 width、opacity),非数值属性(如 display、backgroundColor)需特殊处理(如 backgroundColor 需 Color 插件);2. 连续触发动画可能导致队列堆积,建议使用 stop(true, true) 清除队列;3. 动画执行时会影响元素性能,避免同时执行大量复杂动画。
六、jQuery 核心功能:AJAX 数据交互
AJAX(Asynchronous JavaScript and XML,异步 JavaScript 和 XML)是前端与后端进行数据交互的核心技术,能实现页面无刷新更新数据,提升用户体验。jQuery 封装了原生 AJAX 的复杂逻辑,提供了简洁的 API,支持 GET、POST 等请求方式,同时解决了浏览器兼容性问题。
jQuery 的 AJAX 相关方法分为两类:「简化方法」(如 load()、$.get()、$.post())和「通用方法」($.ajax())。简化方法适用于简单场景,通用方法功能更强大,支持自定义请求头、超时设置等复杂需求。
6.1 简化 AJAX 方法:快速实现数据交互
6.1.1 load():加载远程 HTML 内容到指定元素
load() 方法是最简洁的 AJAX 方法,直接将远程服务器返回的 HTML 内容插入到指定元素中,语法:$(选择器).load(url, [data], [callback])
url(必选):请求的服务器接口地址
data(可选):发送给服务器的参数,可传入对象({key: value})或字符串('key1=value1&key2=value2');传入对象时为 POST 请求,传入字符串或不传入时为 GET 请求
callback(可选):请求完成后的回调函数,接收三个参数:responseText(服务器返回内容)、statusText(请求状态)、xhr(XMLHttpRequest 对象)
<div id="content">加载中...</div>
<button id="loadBtn">加载远程内容</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#loadBtn").click(function(){
$("#content").load("test.html", {
id: 1,
name: "jQuery"
}, function(response, status, xhr){
if(status === "success"){
console.log("加载成功,返回内容:", response);
} else {
console.log("加载失败:", xhr.status);
}
});
});
});
</script>
6.1.2 $.get():发送 GET 请求获取数据
专门用于发送 GET 请求,获取服务器返回的数据(通常为 JSON、XML 或文本),语法:$.get(url, [data], [callback], [dataType])
url(必选):请求接口地址
data(可选):发送的请求参数,对象或字符串形式
callback(可选):请求成功后的回调函数,参数为:data(服务器返回数据,已根据 dataType 解析)、statusText(请求状态)、xhr(XMLHttpRequest 对象)
dataType(可选):预期的服务器返回数据类型,可选值:'json'、'xml'、'text'、'html',默认自动判断
<button id="getBtn">发送 GET 请求</button>
<div id="result"></div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#getBtn").click(function(){
$.get("/api/users", {page: 1, size: 10}, function(data, status, xhr){
if(status === "success"){
if(data.code === 0){
let html = "<ul>";
data.data.forEach(user => {
html += `<li>${user.id} - ${user.name}</li>`;
});
html += "</ul>";
$("#result").html(html);
}
}
}, "json");
});
});
</script>
6.1.3 $.post():发送 POST 请求提交数据
专门用于发送 POST 请求,向服务器提交数据(如表单提交、新增数据等),语法与 $.get() 完全一致:$.post(url, [data], [callback], [dataType])
核心区别:$.get() 将参数拼接在 URL 后(可见,不安全),适合获取数据;$.post() 将参数放在请求体中(不可见,相对安全),适合提交敏感数据(如密码)。
<form id="userForm">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<button type="submit">提交表单</button>
</form>
<div id="msg"></div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#userForm").submit(function(e){
e.preventDefault();
const formData = $(this).serializeObject();
$.post("/api/login", formData, function(data, status){
if(data.code === 0){
$("#msg").css("color", "green").text("登录成功!");
} else {
$("#msg").css("color", "red").text(data.msg);
}
}, "json");
});
$.fn.serializeObject = function(){
const obj = {};
const arr = this.serializeArray();
arr.forEach(item => {
obj[item.name] = item.value;
});
return obj;
};
});
</script>
6.2 通用 AJAX 方法:$.ajax()(推荐)
$.ajax() 是 jQuery 最核心的 AJAX 方法,功能全面,支持自定义请求方式、请求头、超时时间、错误处理等所有 AJAX 特性,适用于复杂的数据交互场景。语法:$.ajax(options),其中 options 是配置对象,包含所有请求参数。
6.2.1 核心配置参数
| 配置参数 | 功能描述 | 可选值/示例 |
|---|
| url | 请求接口地址(必选) | '/api/users'、'https://api.example.com/data' |
| type/method | 请求方式(可选,默认 GET) | 'GET'、'POST'、'PUT'、'DELETE' |
| data | 发送给服务器的参数(可选) | 对象:{id:1, name:"test"};字符串:'id=1&name=test' |
| dataType | 预期返回数据类型(可选) | 'json'、'xml'、'text'、'html' |
| contentType | 请求体内容类型(可选,默认 application/x-www-form-urlencoded) | 提交 JSON 时:'application/json' |
| timeout | 请求超时时间(可选,单位毫秒) | 3000(3 秒超时) |
| headers | 自定义请求头(可选) | {"Authorization": "Bearer token"} |
| success | 请求成功后的回调函数(可选) | function(data, status, xhr){}(data 为解析后的数据) |
| error | 请求失败后的回调函数(可选) | function(xhr, status, error){}(error 为错误信息) |
| complete | 请求完成后的回调函数(无论成功/失败,可选) | function(xhr, status){}(常用于关闭加载动画) |
6.2.2 $.ajax() 示例:提交 JSON 数据并处理异常
<button id="ajaxBtn">发送 AJAX 请求</button>
<div id="ajaxResult"></div>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#ajaxBtn").click(function(){
$("#ajaxResult").text("加载中...");
$.ajax({
url: "/api/addUser",
method: "POST",
data: JSON.stringify({
username: "李四",
age: 25,
email: "[email protected]"
}),
contentType: "application/json",
dataType: "json",
timeout: 3000,
headers: {
"X-Request-Id": "123456"
},
success: function(data){
if(data.code === 0){
$("#ajaxResult").css("color", "green").text("新增用户成功!用户 ID:" + data.data.id);
} else {
$("#ajaxResult").css("color", "orange").text("新增失败:" + data.msg);
}
},
error: function(xhr, status, error){
let errMsg = "请求失败:";
if(status === "timeout"){
errMsg += "请求超时(3 秒)";
} else if(status === "error"){
errMsg += `状态码:${xhr.status},错误信息:${error}`;
} else if(status === "parsererror"){
errMsg += "数据解析失败";
}
$("#ajaxResult").css("color", "red").text(errMsg);
},
complete: function(){
const text = $("#ajaxResult").text();
if(text === "加载中..."){
$("#ajaxResult").text("请求完成");
}
}
});
});
});
</script>
6.3 AJAX 辅助方法:序列化表单数据
提交表单时,需将表单元素的值转为请求参数,jQuery 提供了两个序列化方法:
serialize():将表单数据转为字符串形式(key1=value1&key2=value2),适合直接作为 data 参数传递
serializeArray():将表单数据转为数组形式([{name:"key1", value:"value1"}, …]),适合进一步处理为对象
<form id="form">
用户名:<input type="text" name="username" value="张三"><br>
密码:<input type="password" name="password" value="123456"><br>
爱好:<input type="checkbox" name="hobby" value="game" checked>游戏 <input type="checkbox" name="hobby" value="read" checked>阅读<br>
</form>
<button id="serializeBtn">序列化表单</button>
<script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#serializeBtn").click(function(){
const $form = $("#form");
const strData = $form.serialize();
console.log("serialize 字符串:", strData);
const arrData = $form.serializeArray();
console.log("serializeArray 数组:", arrData);
const objData = {};
arrData.forEach(item => {
if(objData[item.name]){
objData[item.name] = [].concat(objData[item.name], item.value);
} else {
objData[item.name] = item.value;
}
});
console.log("转为对象:", objData);
});
});
</script>
AJAX 注意事项:1. 跨域问题:默认情况下,AJAX 不允许跨域请求(不同域名、端口、协议),需后端配置 CORS(跨域资源共享)或使用 JSONP 方案;2. 数据格式:提交 JSON 数据时,需将数据转为字符串(JSON.stringify())并指定 contentType: 'application/json';3. 错误处理:必须添加 error 回调,处理超时、网络异常、服务器错误等场景;4. 安全性:避免在 GET 请求中传递敏感数据(如密码),建议使用 POST 请求并配合 HTTPS 协议。
七、jQuery 工具方法
jQuery 除了操作 DOM 和事件的实例方法外,还提供了一系列静态工具方法(无需获取 DOM 元素,直接通过 $. 调用),用于处理数据、数组、对象等,简化通用业务逻辑。常用工具方法如下:
7.1 数组/对象遍历:$.each()
用于遍历数组或对象,替代原生的 for/for-in 循环,语法:$.each(待遍历对象,function(index/key, value){})
const arr = [1, 2, 3, 4, 5];
$.each(arr, function(index, value) {
console.log(`数组索引${index}:${value}`);
});
const obj = { name: "张三", age: 20, gender: "男" };
$.each(obj, function(key, value) {
console.log(`对象属性${key}:${value}`);
});
$("li").each(function(index, domEle) {
$(domEle).text(`列表项${index + 1}`);
});
7.2 数组转换:$.map()
用于对数组元素进行处理并返回新数组,语法:$.map(数组,function(value, index){ return 处理后的值; })
const arr = [1, 2, 3, 4, 5];
const newArr = $.map(arr, function(value, index) {
return value * 2;
});
console.log(newArr);
const filterArr = $.map(arr, function(value) {
return value > 3 ? value : null;
});
console.log(filterArr);
7.3 数据类型判断:$.type()
用于精准判断数据类型,比原生 typeof 更准确(如区分数组、null、日期等),语法:$.type(数据)
console.log($.type(123));
console.log($.type("abc"));
console.log($.type(true));
console.log($.type([1,2,3]));
console.log($.type({}));
console.log($.type(null));
console.log($.type(new Date()));
console.log($.type(function(){}));
7.4 字符串处理:$.trim()
用于去除字符串首尾的空白字符(空格、制表符、换行符等),语法:$.trim(字符串)
const str = " Hello jQuery ";
const trimStr = $.trim(str);
console.log(trimStr);
console.log(trimStr.length);
7.5 对象扩展:$.extend()
用于合并多个对象的属性,将后续对象的属性合并到第一个对象中,语法:$.extend(目标对象,源对象 1,源对象 2, ...),支持深拷贝(第一个参数传 true)。
const target = { a: 1, b: 2 };
const source1 = { b: 3, c: 4 };
const source2 = { d: 5 };
$.extend(target, source1, source2);
console.log(target);
const target2 = { a: 1, b: { b1: 10 } };
const source3 = { b: { b2: 20 }, c: 3 };
$.extend(true, target2, source3);
console.log(target2);
八、jQuery 插件开发基础
jQuery 的强大之处在于其丰富的插件生态,同时也支持自定义插件扩展功能。插件开发核心是通过扩展 $.fn(实例方法插件)或 $(静态工具插件)实现,以下介绍最常用的实例方法插件开发。
8.1 插件开发核心原理
jQuery 实例对象(如 $("div"))的方法都挂载在 $.fn 对象上,自定义插件本质是向 $.fn 添加新方法,让所有 jQuery 实例都能调用。开发时需注意:
- 插件方法内部通过
this 获取当前 jQuery 实例,支持链式调用(最后返回 this);
- 避免污染全局作用域,使用自执行函数包裹代码;
- 支持传入配置参数,提高插件灵活性。
8.2 简单插件开发示例:自定义高亮插件
开发一个 highlight() 插件,实现元素文本高亮效果,支持自定义颜色参数:
(function($) {
$.fn.highlight = function(options) {
const defaults = {
color: "red",
backgroundColor: "yellow"
};
const settings = $.extend({}, defaults, options);
this.each(function() {
$(this).css({
color: settings.color,
backgroundColor: settings.backgroundColor,
fontWeight: "bold"
});
});
return this;
};
})(jQuery);
$(function() {
$("h3").highlight();
$("#box").highlight({ color: "white", backgroundColor: "blue" });
$("p").highlight({ color: "green" }).css("fontSize", "16px");
});
8.3 插件调用与扩展
自定义插件开发完成后,可像 jQuery 内置方法一样调用,支持多元素批量处理和链式调用。若需扩展插件功能,可在原有插件基础上添加子方法,或通过 $.extend() 扩展配置。
插件开发注意事项:1. 插件命名规范:避免与 jQuery 内置方法或其他常用插件重名,建议添加前缀(如 myHighlight);2. 兼容性:若需兼容低版本 jQuery,需注意 API 差异(如 jQuery 3.x 移除的方法);3. 调试:开发时可通过 console.log(this) 查看当前 jQuery 实例,确保方法作用域正确。
九、jQuery 的优缺点与适用场景
9.1 优点
- 简洁易用:语法简洁直观,封装了原生 JS 的复杂逻辑(如 DOM 操作、AJAX),上手成本低;
- 浏览器兼容:自动处理不同浏览器的兼容性问题(如 IE6-8 与现代浏览器的 API 差异),无需手动编写兼容代码;
- 丰富的生态:拥有大量成熟的插件(如轮播图、表单验证、日期选择器等),可直接复用,提高开发效率;
- 链式调用:支持方法链式调用,代码简洁高效,减少变量声明;
- 轻量级:核心文件体积小(压缩后约 30KB),加载速度快,对项目性能影响小。
9.2 缺点
- 依赖 DOM 操作:核心功能围绕 DOM 操作,在现代前端框架(Vue、React)的组件化开发模式中,DOM 操作优先级降低,jQuery 的优势减弱;
- 性能局限:批量 DOM 操作时,若未使用优化手段(如 detach()、文档片段),性能不如原生 JS;
- 功能冗余:现代浏览器已原生支持很多 jQuery 功能(如 querySelector、fetch 替代 AJAX、classList 替代 addClass/removeClass),无需额外引入 jQuery;
- 不支持双向数据绑定:在复杂数据驱动的项目中,需手动维护数据与 DOM 的同步,开发效率低于 Vue、React 等框架。
9.3 适用场景
- 小型项目/静态页面:如企业官网、个人博客等,需求以简单 DOM 交互、动画效果为主,jQuery 足以满足需求,开发效率高;
- 遗留项目维护:大量旧项目使用 jQuery 开发,维护时需熟悉 jQuery 语法;
- 快速原型开发:需快速实现交互效果,无需搭建复杂框架,jQuery 可快速完成需求验证;
- 与后端模板结合:如 JSP、PHP 等后端渲染页面,需前端少量交互代码,jQuery 轻量且易用,适合此类场景。
9.4 不适用场景
- 大型单页应用(SPA):需组件化、数据驱动开发,推荐使用 Vue、React、Angular 等现代前端框架;
- 高性能要求的场景:如数据可视化、大型游戏等,需原生 JS 或专门的框架优化性能;
- 移动端跨平台应用:推荐使用 React Native、Uni-app 等跨平台框架,jQuery 的移动端适配能力较弱。
十、总结
jQuery 是前端发展史上的重要里程碑,其核心价值在于'简化 DOM 操作、解决浏览器兼容、提供便捷的交互能力'。本教程从基础语法、DOM 操作、事件处理、动画效果、AJAX 数据交互、工具方法、插件开发等方面,系统讲解了 jQuery 的核心知识点,适合前端初学者入门学习。
学习 jQuery 时,需重点掌握'选择器''链式调用''事件委托''AJAX'等核心概念,同时理解其与原生 JS 的区别与联系。在实际开发中,应根据项目规模和需求选择合适的技术:小型项目可高效使用 jQuery;大型复杂项目则推荐现代前端框架,必要时可引入 jQuery 辅助处理少量 DOM 交互。
最后,建议在掌握 jQuery 的基础上,进一步学习原生 JS 的高级特性(如闭包、原型、异步编程)和现代前端框架,提升自身技术广度和深度。
相关免费在线工具
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online