jQuery从入门到实战全解:前端高效开发利器指南

jQuery从入门到实战全解:前端高效开发利器指南

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标签引入本地文件:

<!-- 引入本地jQuery文件,放在head或body结束前均可,建议放body结束前 --><body><!-- 页面内容 --><scriptsrc="jquery-1.12.4.min.js"></script><script>// 此处可编写jQuery代码</script></body>

1.3.2 引入CDN文件

无需下载文件,直接引入第三方CDN(内容分发网络)提供的jQuery文件,加载速度快,适合线上项目:

<!-- 引入百度CDN的jQuery 1.12.4版本 --><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><!-- 或引入微软CDN --><scriptsrc="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>// 方式1:打印jQuery对象 console.log($);// 输出function (a,b){return new n.fn.init(a,b)} 表示成功 console.log(jQuery);// $是jQuery的别名,两者等价// 方式2:弹出提示框$(function(){alert("jQuery引入成功!");});</script>

二、jQuery核心语法:基础入门必备

2.1 核心思想:选择器 + 方法

jQuery的核心语法可以概括为:$(选择器).方法()

  • $:jQuery的全局别名,等价于jQuery,用于获取DOM元素并返回一个jQuery对象。
  • 选择器:和CSS选择器语法一致,用于精准定位需要操作的DOM元素(如标签选择器、类选择器、ID选择器等)。
  • 方法:jQuery封装的功能方法,用于对选中的DOM元素执行操作(如修改样式、绑定事件、修改内容等)。

示例:修改ID为title的元素内容和样式:

<h1id="title">原始标题</h1><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>// 1. 用ID选择器选中#title元素,返回jQuery对象// 2. 调用text()方法修改元素文本内容// 3. 调用css()方法修改元素样式$("#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>// 写法1:推荐,简洁直观$(function(){// 此处编写需要在DOM加载完成后执行的代码 console.log("DOM加载完成,可执行jQuery代码");$("#title").text("入口函数示例");});// 写法2:完整写法,等价于写法1$(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方法(如innerHTMLstyle等)。
  • 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>// 1. 获取原生DOM对象const boxDom = document.getElementById("box");// 原生DOM对象调用原生方法 boxDom.innerHTML ="原生DOM对象"; boxDom.style.color ="blue";// 2. 获取jQuery对象const $box =$("#box");// jQuery对象调用jQuery方法 $box.text("jQuery对象"); $box.css("fontSize","18px");// 错误示范:两者方法不能混用 boxDom.text("错误");// 报错:boxDom.text is not a function $box.innerHTML ="错误";// 报错:$box.innerHTML is undefined</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>// 1. jQuery对象 → 原生DOM对象const $box =$("#box");// 方式1:通过索引const boxDom1 = $box[0];// 方式2:通过get(索引)const boxDom2 = $box.get(0);// 调用原生方法 boxDom1.innerHTML ="jQuery转原生";// 2. 原生DOM对象 → jQuery对象const boxDom = document.getElementById("box");const $box2 =$(boxDom);// 调用jQuery方法 $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,需加引号):

<divid="box">样式操作示例</div><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){const $box =$("#box");// 1. 设置单个样式(驼峰命名) $box.css("fontSize","20px");// 2. 设置单个样式(中划线命名,需加引号) $box.css("color","red");// 3. 获取样式值const fontSize = $box.css("fontSize"); console.log("当前字体大小:", fontSize);// 输出:当前字体大小: 20px});</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><divid="box"class="box">类操作示例</div><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){const $box =$("#box");// 1. 添加类:addClass(类名) $box.addClass("active");// 此时box拥有box和active两个类// 2. 移除类:removeClass(类名)// $box.removeClass("active"); // 移除active类// 3. 切换类:toggleClass(类名)(有则移除,无则添加)// $box.toggleClass("active"); // 点击时切换类 $box.click(function(){$(this).toggleClass("active");});// 4. 判断是否有某个类:hasClass(类名)(返回布尔值)const hasActive = $box.hasClass("active"); console.log("是否有active类:", hasActive);// 输出:true});</script>

3.3 内容操作:修改元素文本/HTML

jQuery提供text()html()val()方法,分别用于操作元素的文本内容、HTML内容、表单值。

3.3.1 text():操作文本内容

用于设置或获取元素的纯文本内容(不解析HTML标签):

<divid="box">原始文本</div><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){const $box =$("#box");// 1. 获取文本内容const text = $box.text(); console.log("原始文本:", text);// 输出:原始文本// 2. 设置文本内容(不解析HTML标签) $box.text("新的文本内容<strong>加粗</strong>");// 页面显示:新的文本内容<strong>加粗</strong>(HTML标签被当作文本)});</script>

3.3.2 html():操作HTML内容

用于设置或获取元素的HTML内容(解析HTML标签):

<divid="box"><p>原始HTML</p></div><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){const $box =$("#box");// 1. 获取HTML内容const html = $box.html(); console.log("原始HTML:", html);// 输出:<p>原始HTML</p>// 2. 设置HTML内容(解析HTML标签) $box.html("新的<strong>HTML内容</strong>");// 页面显示:新的HTML内容(strong标签生效,文本加粗)});</script>

3.3.3 val():操作表单值

用于设置或获取表单元素(输入框、下拉框、单选/复选框等)的值:

<inputtype="text"id="username"value="默认值"><br><selectid="city"><optionvalue="beijing">北京</option><optionvalue="shanghai">上海</option><optionvalue="guangzhou">广州</option></select><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){// 1. 操作文本框值const $username =$("#username");// 获取值 console.log("原始值:", $username.val());// 输出:默认值// 设置值 $username.val("张三");// 2. 操作下拉框值const $city =$("#city");// 获取选中值 console.log("原始城市:", $city.val());// 输出:beijing// 设置选中值(通过value) $city.val("shanghai");// 此时选中“上海”选项// 3. 操作复选框(获取选中值,需结合:checked)$("input:checkbox").val(["apple","banana"]);// 选中value为apple和banana的复选框});</script>

3.4 属性操作:修改元素属性

jQuery提供attr()prop()removeAttr()等方法,用于操作元素的属性(如src、href、id、class等)。

3.4.1 attr():操作普通属性

用于设置或获取元素的普通属性(如src、href、title等):

<imgid="img"src="default.jpg"alt="默认图片"title="默认标题"><aid="link"href="https://www.baidu.com">百度</a><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){// 1. 操作图片属性const $img =$("#img");// 获取属性 console.log("原始src:", $img.attr("src"));// 输出:default.jpg console.log("原始title:", $img.attr("title"));// 输出:默认标题// 设置属性 $img.attr({src:"new.jpg",alt:"新图片",title:"新标题"});// 2. 操作链接属性const $link =$("#link"); $link.attr("href","https://www.jQuery.com"); $link.text("jQuery官网");});</script>

3.4.2 prop():操作布尔属性

对于“布尔类型”的属性(如checked、selected、disabled等),推荐使用prop()(attr()在某些浏览器下可能出现兼容性问题):

<inputtype="checkbox"id="agree"checked> 同意协议 <buttonid="btn"disabled>禁用按钮</button><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){// 1. 操作复选框const $agree =$("#agree");// 获取是否选中(返回布尔值) console.log("是否同意:", $agree.prop("checked"));// 输出:true// 设置选中/取消 $agree.prop("checked",false);// 取消选中// 2. 操作按钮禁用状态const $btn =$("#btn"); console.log("是否禁用:", $btn.prop("disabled"));// 输出:true// 取消禁用 $btn.prop("disabled",false);});</script>

注意:attr()和prop()的区别:attr()获取的是“HTML属性”(标签上写的属性),prop()获取的是“DOM元素的属性”(JS对象的属性)。对于布尔类型属性,优先用prop();对于普通属性,用attr()。

3.4.3 removeAttr():移除属性

用于移除元素的指定属性:

<imgid="img"src="default.jpg"alt="默认图片"><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){$("#img").removeAttr("alt");// 移除alt属性});</script>

3.5 DOM增删改:动态操作DOM元素

实际开发中常需要动态添加、删除、替换DOM元素(如动态渲染列表、添加评论等),jQuery提供了便捷的方法。

3.5.1 动态添加元素

常用方法:append()(添加到元素内部末尾)、prepend()(添加到元素内部开头)、after()(添加到元素外部后面)、before()(添加到元素外部前面)。

<ulid="list"><li>原始列表项</li></ul><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){const $list =$("#list");// 1. append():添加到内部末尾 $list.append("<li>append添加的项(末尾)</li>");// 2. prepend():添加到内部开头 $list.prepend("<li>prepend添加的项(开头)</li>");// 3. after():添加到外部后面 $list.after("<p>after添加的内容(外部后面)</p>");// 4. before():添加到外部前面 $list.before("<p>before添加的内容(外部前面)</p>");// 5. 添加已存在的元素(移动元素)const $newLi =$("<li>新创建的li</li>"); $list.append($newLi);// 将新创建的li添加到列表末尾});</script>

3.5.2 动态删除元素

常用方法:remove()(删除元素本身及所有子元素)、empty()(清空元素内部所有子元素,保留自身)。

<ulid="list"><li>列表项1</li><li>列表项2</li><liid="item3">列表项3</li></ul><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){// 1. remove():删除指定元素(本身+子元素)$("#item3").remove();// 删除id为item3的li元素// 2. empty():清空元素内部(保留自身)// $("#list").empty(); // 清空ul内部所有li,保留ul标签// 3. 带条件删除(删除包含指定文本的元素)$("li:contains('列表项1')").remove();// 删除文本为“列表项1”的li});</script>

3.5.3 动态替换元素

使用replaceWith()方法替换指定元素:

<divid="box">原始内容</div><scriptsrc="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 绑定单个事件

<buttonid="btn">点击按钮</button><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){// 绑定点击事件$("#btn").on("click",function(){// this:原生DOM对象(当前触发事件的元素)// $(this):转换为jQuery对象,可调用jQuery方法$(this).text("已点击");alert("按钮被点击了!");});});</script>

4.1.2 绑定多个事件(同一处理函数)

多个事件共享同一个处理函数,事件类型用空格分隔:

<divid="box"style="width: 200px;height: 200px;background: #eee;"></div><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){// 绑定鼠标进入(mouseenter)和鼠标离开(mouseleave)事件$("#box").on("mouseenter mouseleave",function(){$(this).toggleClass("active");// 切换active类(改变样式)});});</script>

4.1.3 绑定多个事件(不同处理函数)

通过对象形式为不同事件绑定不同处理函数:

<inputtype="text"id="input"placeholder="输入文本..."><scriptsrc="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()绑定的事件,语法灵活:

<buttonid="btn">点击按钮</button><buttonid="unbindBtn">解绑点击事件</button><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){// 定义事件处理函数(便于解绑时指定)functionclickHandler(){alert("按钮被点击了!");}// 绑定点击事件$("#btn").on("click", clickHandler);// 解绑事件$("#unbindBtn").on("click",function(){// 1. 解绑指定事件(推荐)$("#btn").off("click", clickHandler);// 2. 解绑所有事件(不指定事件类型)// $("#btn").off();// 3. 解绑指定类型的所有事件(不指定处理函数)// $("#btn").off("click");});});</script>

4.3 事件委托:解决动态元素事件绑定问题

动态添加的元素(如通过append()添加的li),直接绑定事件会失效(因为绑定事件时元素还未存在)。此时需要使用“事件委托”:将事件绑定到静态的父元素上,由父元素委托处理子元素的事件。

事件委托核心原理:事件冒泡(子元素触发的事件会向上冒泡到父元素),父元素通过事件对象判断触发事件的目标子元素是否匹配指定规则,若匹配则执行对应的事件处理函数。简单来说,就是“父元素帮子元素代收事件并处理”。

4.3.1 事件委托语法

使用on()方法实现事件委托的完整语法:
$(父选择器).on("事件类型", "子选择器", 事件处理函数)
参数说明:

  1. 父选择器:必须是静态存在的父元素(页面加载时就已存在,不是动态添加的);
  2. 子选择器:需要委托事件的目标子元素(可以是动态添加的);
  3. 事件处理函数:事件触发时执行的逻辑。

4.3.2 事件委托示例(动态元素事件绑定)

以下示例演示动态添加li元素后,通过事件委托实现点击li弹窗的效果:

<ulid="list"><li>原始列表项1</li><li>原始列表项2</li></ul><buttonid="addLi">添加新列表项</button><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){// 1. 事件委托:将li的点击事件委托给静态父元素ul$("#list").on("click","li",function(){// $(this) 指向触发事件的子元素li(而非父元素ul)alert("点击了:"+$(this).text());});// 2. 动态添加li元素$("#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 事件对象的获取

直接在事件处理函数中接收参数即可获取事件对象,常用命名为eevent

 <button>点击按钮</button> <script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function(){ $("#btn").on("click", function(e){ // e 即为事件对象 console.log("事件对象:", e); }); }); </script> 

4.4.2 事件对象的常用属性

通过事件对象的属性可获取事件相关信息,常用属性如下:

属性名功能描述示例代码
e.target触发事件的“原始目标元素”(原生DOM对象),可能是子元素(事件冒泡场景下)console.log(e.target); // 输出触发事件的DOM元素
e.currentTarget绑定事件的“当前元素”(原生DOM对象),等价于thisconsole.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> <div></div> </div> <script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function(){ // 父元素绑定click事件 $("#parent").on("click", function(){ alert("父元素被点击"); }); // 子元素绑定click事件 $("#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("点击事件(简化方法)"); }); // 等价于on()写法 // $("#btn").on("click", function(){ // alert("点击事件(on方法)"); // }); }); </script> 

注意:简化事件方法仅适用于简单的事件绑定场景,若需要事件委托、绑定多个事件或后续解绑事件,仍推荐使用on()off()方法。

五、jQuery核心功能:动画效果

jQuery内置了丰富的动画效果方法,无需编写复杂的CSS动画或原生JS定时器,就能快速实现元素的显示隐藏、滑动、淡入淡出、自定义运动等交互效果,极大提升了前端页面的生动性。核心动画方法分为“基础预设动画”“自定义动画”和“动画控制”三类。

5.1 基础预设动画:快速实现常用效果

jQuery提供了一系列预设动画方法,语法简洁,可直接调用,适用于大部分简单交互场景(如弹窗显示/隐藏、菜单展开/收起等)。

5.1.1 显示与隐藏:show() / hide() / toggle()

用于控制元素的显示和隐藏,默认通过改变元素的widthheightopacity属性实现渐变动画效果。

  • show([speed], [easing], [callback]):显示隐藏的元素
  • hide([speed], [easing], [callback]):隐藏显示的元素
  • toggle([speed], [easing], [callback]):切换元素的显示/隐藏状态(显示变隐藏,隐藏变显示)

参数说明:

  • speed(可选):动画持续时间,可选值为“slow”(600ms)、“fast”(200ms)、具体毫秒数(如500)
  • easing(可选):动画运动曲线,默认“swing”(先慢后快再慢)、“linear”(匀速)
  • callback(可选):动画完成后执行的回调函数
<divid="box"style="width: 100px;height: 100px;background: red;display: none;"></div><buttonid="showBtn">显示</button><buttonid="hideBtn">隐藏</button><buttonid="toggleBtn">切换</button><scriptsrc="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]):切换滑动状态
<ulid="menu"style="width: 200px;border: 1px solid #ccc;padding: 0;"><listyle="padding: 10px;background: #eee;cursor: pointer;"id="menuTitle">菜单列表</li><listyle="padding: 10px;display: none;border-top: 1px solid #ccc;">选项1</li><listyle="padding: 10px;display: none;border-top: 1px solid #ccc;">选项2</li><listyle="padding: 10px;display: none;border-top: 1px solid #ccc;">选项3</li></ul><scriptsrc="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的数值,元素不会隐藏)
<imgsrc="https://picsum.photos/200/150"id="img"style="display: none;"><buttonid="fadeInBtn">淡入</button><buttonid="fadeOutBtn">淡出</button><buttonid="fadeToBtn">淡到50%透明</button><scriptsrc="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);// 300ms内淡到50%透明});});</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插件):

<divid="box"style="width: 100px;height: 100px;background: red;position: absolute;left: 0;top: 100px;"></div><buttonid="animateBtn">执行自定义动画</button><!-- 引入jQuery和Color插件(用于颜色动画) --><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><scriptsrc="https://apps.bdimg.com/libs/jquerycolor/2.1.2/jquery.color.min.js"></script><script>$(function(){$("#animateBtn").click(function(){$("#box").animate({left:"500px",// 向右移动到500px位置top:"200px",// 向下移动到200px位置width:"200px",// 宽度放大到200pxheight:"200px",// 高度放大到200pxbackgroundColor:"#00f"// 背景色变为蓝色(需Color插件)},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(停在当前位置)
<divid="box"style="width: 100px;height: 100px;background: red;display: none;"></div><buttonid="startBtn">开始动画</button><buttonid="stopBtn">停止动画</button><scriptsrc="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默认动画队列)
<divid="box"style="width: 100px;height: 100px;background: red;"></div><buttonid="delayBtn">延迟动画</button><scriptsrc="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script><script>$(function(){$("#delayBtn").click(function(){$("#box").fadeOut(500).delay(1000)// 延迟1秒.fadeIn(500);// 1秒后淡入});});</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()、 . g e t ( ) 、 .get()、 .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>加载中...</div> <button>加载远程内容</button> <script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function(){ $("#loadBtn").click(function(){ // 加载远程HTML内容到#content元素 $("#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>发送GET请求</button> <div></div> <script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function(){ $("#getBtn").click(function(){ // 发送GET请求获取用户列表 $.get("/api/users", {page: 1, size: 10}, function(data, status, xhr){ if(status === "success"){ // 假设返回JSON数据:{code:0, data:[{id:1,name:"张三"},...]} if(data.code === 0){ let html = "<ul>"; data.data.forEach(user => { html += `<li>${user.id} - ${user.name}</li>`; }); html += "</ul>"; $("#result").html(html); } } }, "json"); // 指定返回数据类型为JSON }); }); </script> 

6.1.3 $.post():发送POST请求提交数据

专门用于发送POST请求,向服务器提交数据(如表单提交、新增数据等),语法与 . g e t ( ) 完全一致: ‘ .get()完全一致:` .get()完全一致:‘.post(url, [data], [callback], [dataType])`

核心区别: . g e t ( ) 将参数拼接在 U R L 后(可见,不安全),适合获取数据; .get()将参数拼接在URL后(可见,不安全),适合获取数据; .get()将参数拼接在URL后(可见,不安全),适合获取数据;.post()将参数放在请求体中(不可见,相对安全),适合提交敏感数据(如密码)。

 <form> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <button type="submit">提交表单</button> </form> <div></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请求提交表单 $.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"); }); // 扩展:将表单数据转为对象(jQuery未内置,需自定义) $.fn.serializeObject = function(){ const obj = {}; const arr = this.serializeArray(); // 序列化表单为数组 arr.forEach(item => { obj[item.name] = item.value; }); return obj; }; }); </script> 

6.2 通用AJAX方法:$.ajax()(推荐)

. a j a x ( ) 是 j Q u e r y 最核心的 A J A X 方法,功能全面,支持自定义请求方式、请求头、超时时间、错误处理等所有 A J A X 特性,适用于复杂的数据交互场景。语法: ‘ .ajax()是jQuery最核心的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>发送AJAX请求</button> <div></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({ // 提交JSON数据,需转为字符串 username: "李四", age: 25, email: "[email protected]" }), contentType: "application/json", // 必须指定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> 用户名:<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>序列化表单</button> <script src="https://apps.bdimg.com/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function(){ $("#serializeBtn").click(function(){ const $form = $("#form"); // 1. serialize():转为字符串 const strData = $form.serialize(); console.log("serialize字符串:", strData); // 输出:username=张三&password=123456&hobby=game&hobby=read // 2. serializeArray():转为数组 const arrData = $form.serializeArray(); console.log("serializeArray数组:", arrData); // 输出:[{name:"username",value:"张三"}, ...] // 3. 转为对象(自定义扩展) 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); // 输出:{username:"张三", password:"123456", hobby:["game","read"]} }); }); </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){})

 // 1. 遍历数组 const arr = [1, 2, 3, 4, 5]; $.each(arr, function(index, value) { console.log(`数组索引${index}:${value}`); // 输出:数组索引0:1 等 }); // 2. 遍历对象 const obj = { name: "张三", age: 20, gender: "男" }; $.each(obj, function(key, value) { console.log(`对象属性${key}:${value}`); // 输出:对象属性name:张三 等 }); // 3. 遍历DOM元素集合(也可使用实例方法each()) $("li").each(function(index, domEle) { $(domEle).text(`列表项${index + 1}`); // 给每个li设置文本 }); 

7.2 数组转换:$.map()

用于对数组元素进行处理并返回新数组,语法:$.map(数组, function(value, index){ return 处理后的值; })

 const arr = [1, 2, 3, 4, 5]; // 将数组中每个元素乘2,返回新数组 const newArr = $.map(arr, function(value, index) { return value * 2; }); console.log(newArr); // 输出:[2,4,6,8,10] // 过滤掉小于3的元素(返回null/undefined则不加入新数组) const filterArr = $.map(arr, function(value) { return value > 3 ? value : null; }); console.log(filterArr); // 输出:[4,5] 

7.3 数据类型判断:$.type()

用于精准判断数据类型,比原生typeof更准确(如区分数组、null、日期等),语法:$.type(数据)

 console.log($.type(123)); // 输出:number console.log($.type("abc")); // 输出:string console.log($.type(true)); // 输出:boolean console.log($.type([1,2,3])); // 输出:array console.log($.type({})); // 输出:object console.log($.type(null)); // 输出:null console.log($.type(new Date())); // 输出:date console.log($.type(function(){})); // 输出:function 

7.4 字符串处理:$.trim()

用于去除字符串首尾的空白字符(空格、制表符、换行符等),语法:$.trim(字符串)

 const str = " Hello jQuery "; const trimStr = $.trim(str); console.log(trimStr); // 输出:Hello jQuery console.log(trimStr.length); // 输出:11(原字符串长度15) 

7.5 对象扩展:$.extend()

用于合并多个对象的属性,将后续对象的属性合并到第一个对象中,语法:$.extend(目标对象, 源对象1, 源对象2, ...),支持深拷贝(第一个参数传true)。

 // 1. 浅拷贝(默认) const target = { a: 1, b: 2 }; const source1 = { b: 3, c: 4 }; const source2 = { d: 5 }; $.extend(target, source1, source2); console.log(target); // 输出:{a:1, b:3, c:4, d:5}(source1的b覆盖target的b) // 2. 深拷贝(处理嵌套对象) const target2 = { a: 1, b: { b1: 10 } }; const source3 = { b: { b2: 20 }, c: 3 }; $.extend(true, target2, source3); console.log(target2); // 输出:{a:1, b:{b1:10, b2:20}, c:3}(嵌套对象合并,不覆盖原有属性) 

八、jQuery插件开发基础

jQuery的强大之处在于其丰富的插件生态,同时也支持自定义插件扩展功能。插件开发核心是通过扩展$.fn(实例方法插件)或$(静态工具插件)实现,以下介绍最常用的实例方法插件开发。

8.1 插件开发核心原理

jQuery实例对象(如$("div"))的方法都挂载在$.fn对象上,自定义插件本质是向$.fn添加新方法,让所有jQuery实例都能调用。开发时需注意:

  • 插件方法内部通过this获取当前jQuery实例,支持链式调用(最后返回this);
  • 避免污染全局作用域,使用自执行函数包裹代码;
  • 支持传入配置参数,提高插件灵活性。

8.2 简单插件开发示例:自定义高亮插件

开发一个highlight()插件,实现元素文本高亮效果,支持自定义颜色参数:

 // 自执行函数包裹,避免全局污染(传入jQuery,使用$别名) (function($) { // 向$.fn添加highlight方法(插件核心) $.fn.highlight = function(options) { // 默认配置 const defaults = { color: "red", // 默认高亮颜色 backgroundColor: "yellow" // 默认背景色 }; // 合并用户配置和默认配置(浅拷贝) const settings = $.extend({}, defaults, options); // 遍历当前jQuery实例(支持多元素) this.each(function() { // this指向单个原生DOM元素,转为jQuery对象 $(this).css({ color: settings.color, backgroundColor: settings.backgroundColor, fontWeight: "bold" }); }); // 返回this,支持链式调用 return this; }; })(jQuery); // 插件使用示例 $(function() { // 调用插件,使用默认配置 $("h3").highlight(); // 调用插件,传入自定义配置 $("#box").highlight({ color: "white", backgroundColor: "blue" }); // 链式调用(插件返回this,可继续调用其他jQuery方法) $("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的高级特性(如闭包、原型、异步编程)和现代前端框架,提升自身技术广度和深度。

Read more

Vibe Coding - UI UX Pro Max 驱动的现代前端 UI工作流

Vibe Coding - UI UX Pro Max 驱动的现代前端 UI工作流

文章目录 * 一、为什么需要一个“会设计的 AI 技能”? * 二、UI UX Pro Max 到底是什么? * 三、安装与集成:从 0 到 1 搭好环境 * 3.1 安装 uipro-cli * 3.2 在项目中初始化 UI UX Pro Max * 3.3 锁定与更新版本(团队协作建议) * 四、工作原理:一句话需求是怎么变成完整 UI 的? * 4.1 设计决策流程拆解 * 4.2 不同助手中的调用方式 * 五、实战一:用 React + Tailwind

共绩算力 RTX 5090 极速部署 Stable Diffusion WebUI:新手也能秒开 AI 绘图工作站

共绩算力 RTX 5090 极速部署 Stable Diffusion WebUI:新手也能秒开 AI 绘图工作站

还在为本地硬件不足跑不动 AI 绘图模型发愁?想快速拥有高性价比的 Stable Diffusion 绘图环境?今天给大家带来共绩算力 RTX 5090 部署 Stable Diffusion WebUI(增强版)的详细教程,全程零兼容冲突,从云主机配置到生成第一张 AI 画作仅需 30 分钟,步骤清晰可复现,无论是设计爱好者还是 AI 新手都能轻松上手! 目录 一、为什么选择共绩算力部署 Stable Diffusion? 二、环境准备:精准配置云主机 2.1 创建云主机实例 1.2 登录云主机终端 二、完整部署流程 2.1 环境清理与依赖安装 2.2 下载与配置Stable Diffusion WebUI

Flutter 三方库 bones_ui 的鸿蒙化适配指南 - 打造直观、响应式的 Web 风格 UI 交互体验

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 bones_ui 的鸿蒙化适配指南 - 打造直观、响应式的 Web 风格 UI 交互体验 Flutter for OpenHarmony 开发者在构建具有 Web 质感的跨平台应用时,UI 框架的选择至关重要。本文将带大家深度调研 Dart 三方库 bones_ui 在鸿蒙系统上的适配方案,探索如何利用其直观的组件架构,加速鸿蒙桌面级应用的开发效率。 前言 在移动端和桌面端融合的今天,开发者往往希望一套代码能同时适配多种屏幕形态。bones_ui 原生为 Dart Web 打造,但在 Flutter for OpenHarmony 的大前端生态中,其简洁的 UI 组件设计思想对我们构建鸿蒙跨平台应用具有极大的参考价值。

前端错误处理最佳实践:别让你的应用崩溃了!

前端错误处理最佳实践:别让你的应用崩溃了! 毒舌时刻 错误处理?听起来就像是前端工程师为了显得自己很专业而特意搞的一套复杂流程。你以为随便加个try-catch就能解决所有错误?别做梦了!到时候你会发现,错误处理的代码比业务代码还多,维护起来比业务代码还麻烦。 你以为console.error就能记录所有错误?别天真了!console.error只会在控制台打印错误,用户根本看不到,也无法帮助你分析错误原因。还有那些所谓的错误监控工具,看起来高大上,用起来却各种问题。 为什么你需要这个 1. 提高用户体验:良好的错误处理可以避免应用崩溃,提高用户体验。 2. 减少生产环境问题:及时捕获和处理错误可以减少生产环境中的问题。 3. 便于调试:良好的错误处理可以帮助你更快地定位和解决问题。 4. 提高代码可靠性:错误处理可以提高代码的可靠性,减少意外情况的发生。 5. 监控和分析:错误处理可以帮助你监控和分析应用的运行状态,发现潜在问题。 反面教材 // 1. 忽略错误 function fetchData() { fetch('/api/data') .the