jQuery类库
一、jQuery简介
1.特点
一款轻量级的JS框架。jQuery核心js文件才几十kb,不会影响页面加载速度。
丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象的相邻元素,JS可能要写好几行代码,而jQuery一行代码就搞定了,再比如要将一个表格的隔行变色,jQuery也是一行代码搞定。
链式表达式。jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。
jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信。
jQuery基本兼容了现在主流的浏览器,不用再为浏览器的兼容问题而伤透脑筋。
jQuery有着丰富的第三方的插件
2.使用jQuery的不同方式
- 下载核心文件到本地引入(本地环境,没有网络也可以使用)
- CDN网络资源加载
3.jQuery底层本质
jQuery封装了JS代码,让编写更简单,但是没有原生JS代码运行的更快
| let pEle = document.getElementsByTagName('p')[0] |
| undefined |
| |
| pEle.style.color = 'red' |
| 'red' |
| |
| pEle.nextElementSibling.style.color = 'green' |
| $('p').first().css('color','yellow').next().css('color','blue') |
4.标签对象与jQuery对象
- 不同的对象能调用的方法是不同的,在编写代码的时候一定要知道正在操作的是jQuery对象还是标签对象
- 标签对象与jQuery对象互相转换
可以把jQuery对象看成一个特殊的列表,通过jQuery对象索引取值的方式来获取标签对象
二、jQuery查找标签
1.基本选择器
2.组合选择器
- 查找id是d1,或者class中包含为c1,或者span标签
3.层级选择器
| $('div p') 查找含有div中所有的后代p标签 |
| $('div>p') 查找div里面的儿子p标签 |
| $('div+p') 查找div同级别下面紧挨着的p标签 |
| $('div~p') 查找div同级别下面所有的p标签 |
4.属性选择器
| $('[username]') 查找含有username属性名的标签 |
| $('[username="duoduo"]') 查找含有username属性名且值为“duoduo”的标签 |
| $('div[username="duoduo"]') 查找含有username属性名且值为“duoduo”的div标签 |
5.基本筛选器
筛选器 |
作用 |
:first |
第一个 |
:last |
最后一个 |
:eq(index) |
索引等于index的那个元素 |
:even |
匹配所有索引值为偶数的元素,从 0 开始计数 |
:odd |
匹配所有索引值为奇数的元素,从 0 开始计数 |
:gt(index) |
匹配所有小于给定索引值的元素 |
:lt(index) |
匹配所有小于给定索引值的元素 |
:not(元素选择器) |
移除所有满足not条件的标签 |
:has(元素选择器) |
选取所有包含一个或多个标签在其内的标签(指的是从后代元素找) |
- 例子:通过jQuery代码操作返回的都是jQuery对象
| $('span') |
| jQuery.fn.init(6) [span, span, span, span#d2, span, span, prevObject: jQuery.fn.init(1)] |
| |
| $('span:first') |
| jQuery.fn.init [span, prevObject: jQuery.fn.init(1)]0: spanlength: 1prevObject: jQuery.fn.init [document][[Prototype]]: Object(0) |
| |
| $('span:even') |
| jQuery.fn.init(3) [span, span, span, prevObject: jQuery.fn.init(1)]0: span1: span2: spanlength: 3prevObject: jQuery.fn.init [document][[Prototype]]: Object(0) |
| |
| $('span:gt(3)') |
| jQuery.fn.init(2) [span, span, prevObject: jQuery.fn.init(1)] |
| |
| $('span:not(#d1)') |
| jQuery.fn.init(6) [span, span, span, span#d2, span, span, prevObject: jQuery.fn.init(1)]0: span1: span2: span3: span#d24: span5: spanlength: 6prevObject: jQuery.fn.init [document][[Prototype]]: Object(0) |
| |
| $('span:has(#d2)') |
| jQuery.fn.init [prevObject: jQuery.fn.init(1)] |
6.表单筛选器
仅限于表单标签内部使用
| :text |
| :password |
| :file |
| :radio |
| :checkbox |
| |
| :submit |
| :reset |
| :button |
| :enabled |
| :disabled |
| :checked |
| :selected |
:checked
除了查找到checked
的标签,还会查找到selected
标签
:selected
只会查找到selected
的标签

7.筛选器方法
| $("#id").next() |
| $("#id").nextAll() |
| $("#id").nextUntil("#i2") |
| $("#id").prev() |
| $("#id").prevAll() |
| $("#id").prevUntil("#i2") |
| $("#id").parent() |
| $("#id").parents() |
| $("#id").parentsUntil() |
| $("#id").children(); |
| $("#id").siblings(); |
搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法。

8.链式操作的本质
为什么在jQuery中为什么可以通过点的操作不断的点属性这种链式操作在python中用代码模拟
通过每次操作之后返回了操作的对象,这样就可以通过对象点方法后继续点方法了,进行链式操作了
| class MyClass(object): |
| def func1(self): |
| print('执行了func1') |
| return self |
| |
| def func2(self): |
| print('执行了func2') |
| return self |
| |
| obj = MyClass() |
| obj.func1().func2() |
三、操作标签
1.class操作
| addClass(); |
| removeClass(); |
| hasClass(); |
| toggleClass(); |
2.位置操作
| $(window).scrollTop() |
| 6618.5 |
3.文本操作
| text() innerText |
| html() innerHTML |
| val() value |
| jQuery对象[0].files files[0] |
4.创建标签
| document.createElement() $('<a>') |
5.属性操作
| attr(attrName) |
| attr(attrName, attrValue) |
| attr({k1: v1, k2:v2}) |
| removeAttr() |
attr
对于动态变化的属性,获取会失真
| prop('value') |
| prop('checked',true); |
| removeProp('value') |
这已经可以证明attr的局限性,它的作用范围只限于HTML标签内的属性,而prop获取的是这个DOM对象的属性,选中返回true,没选中返回false。
总结一下:
- 对于标签上有的能看到的属性和自定义属性都用attr
- 对于返回布尔值的比如checkbox、radio和option的是否被选中都用prop。
6.文档处理
添加到指定元素内部的后面
| $(A).append(B) |
| $(A).appendTo(B) |
添加到指定元素内部的前面
| $(A).prepend(B) |
| $(A).prependTo(B) |
添加到指定元素外部的后面
| $(A).after(B) |
| $(A).insertAfter(B) |
添加到指定元素外部的前面
| $(A).before(B) |
| $(A).insertBefore(B) |
移除和清空元素
四、jQuerty事件
1.JS绑定事件与jQuery绑定事件
(1)JS绑定事件
| 标签对象.on事件名 = function () { |
| this |
| } |
(2)jQuery事件绑定
| jQuery对象.事件名(function(){ |
| |
| }) |
| jQuery对象.on('事件名', function(){ |
| |
| }) |

2.常用事件
| click(function(){...}) |
| hover(function(){...}) |
| blur(function(){...}) |
| focus(function(){...}) |
| change(function(){...}) |
| keyup(function(){...}) |
| <input type="text"> |
| |
| <script> |
| $(":text").on('input',function(){ |
| |
| console.log($(this).val()) |
| }) |
| </script> |
4.克隆事件
clone()
默认不克隆事件,加true就可以
| <!DOCTYPE html> |
| <html lang="zh-CN"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta http-equiv="x-ua-compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <title>克隆</title> |
| <style> |
| #b1 { |
| background-color: deeppink; |
| padding: 5px; |
| color: white; |
| margin: 5px; |
| } |
| #b2 { |
| background-color: dodgerblue; |
| padding: 5px; |
| color: white; |
| margin: 5px; |
| } |
| </style> |
| </head> |
| <body> |
| |
| <button id="b1">屠龙宝刀,点击就送</button> |
| <hr> |
| <button id="b2">屠龙宝刀,点击就送</button> |
| |
| <script src="jquery-3.2.1.min.js"></script> |
| <script> |
| |
| $("#b1").on("click", function () { |
| $(this).clone().insertAfter(this); |
| }); |
| |
| $("#b2").on("click", function () { |
| $(this).clone(true).insertAfter(this); |
| }); |
| </script> |
| </body> |
| </html> |
| <button id="d1" style="border: 3px solid dodgerblue">没有克隆的影分身</button> |
| <hr> |
| <button id="d2" style="border: 3px solid orange">真正的影分身</button> |
| <script> |
| $('#d2').on('click',function (){ |
| $('body').append($(this).clone(true)) |
| }) |
| $('#d1').on('click',function (){ |
| $('body').append($(this.clone())) |
| }) |
| </script> |

5.事件相关补充
(1)阻止后续功能
事件本身有功能了,如何取消本身默认的功能
在事件函数的最后return false
return false; // 常见阻止表单提交等
e.preventDefault()
;
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script> |
| </head> |
| <body> |
| <form action=""> |
| <p>用户名: |
| <input type="text"> |
| </p> |
| <p> |
| <input type="submit" id="d1"> |
| </p> |
| </form> |
| |
| <script> |
| $('#d1').click(function (event) { |
| alert('弹出警告框') |
| return false |
| |
| }) |
| |
| </script> |
| </body> |
| </html> |
(2)事件冒泡
多个标签互相嵌套,并且有相同的功能要执行的时候,会发生事件冒泡的现象
当只想点击span标签发生弹出警告框事件的时候,绑定p标签和div标签的弹出警告框事件也会发生

| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script> |
| |
| </head> |
| <body> |
| <div> |
| <p> |
| <span>点击span</span> |
| </p> |
| </div> |
| |
| |
| <script> |
| $('span').click(function (){ |
| alert('span') |
| }) |
| $('p').click(function (){ |
| alert('p') |
| }) |
| $('div').click(function (){ |
| alert('div') |
| }) |
| |
| </script> |
| </body> |
| </html> |
| |

(3)等待页面加载完毕再执行JS代码
| $(document).ready(function(){ |
| |
| }) |
(4)事件委托
事件委托是通过事件冒泡的原理,让父标签去捕获子标签的事件
- 将body中的所有的点击事件委托给button标签
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script> |
| </head> |
| <body> |
| <button>点我</button> |
| |
| <script> |
| |
| |
| |
| $('body').on('click','button',function () { |
| alert('哈哈哈') |
| }) |
| </script> |
| </body> |
| </html> |
五、jQuery的简单的动画效果
1.点赞+1
| <!DOCTYPE html> |
| <html lang="zh-CN"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta http-equiv="x-ua-compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <title>点赞动画示例</title> |
| <style> |
| div { |
| position: relative; |
| display: inline-block; |
| } |
| div>i { |
| display: inline-block; |
| color: red; |
| position: absolute; |
| right: -16px; |
| top: -5px; |
| opacity: 1; |
| } |
| </style> |
| </head> |
| <body> |
| |
| <div id="d1">点赞</div> |
| <script src="jquery-3.2.1.min.js"></script> |
| <script> |
| $("#d1").on("click", function () { |
| var newI = document.createElement("i"); |
| newI.innerText = "+1"; |
| $(this).append(newI); |
| $(this).children("i").animate({ |
| opacity: 0 |
| }, 1000) |
| }) |
| </script> |
| </body> |
| </html> |
| |
| 点赞特效简单示例 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY