1. jQuery介绍
1.1 概念
jQuery 是一个快速、小型且功能丰富的 JavaScript 库。它使 比如 HTML 文档遍历和操作、事件处理、 动画和 Ajax 通过易于使用的 API 变得更加简单,该 API 可以在 多种浏览器。结合了多功能性和 可扩展性,jQuery 改变了数百万人的编写方式 JavaScript 的 JavaScript 中。
类比于python中的模块,前端称之为"类库"
1.2 导入方式
将网页代码全部复制,在项目中新建jQuery文件,代码粘贴到文件中.
在HTML文件中使用script标签导入
2. 选择器
2.1 基本选择器
$("p") 标签选择器
$("#d1") id选择器
$(".c1") 类选择器
$("div, #d1, .c1") 选择器组合:通过逗号分隔多个选择器,同时选择多个元素
$("p#d1") 配合使用:找到p标签下含有id为d1的选择器
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><div id="d1" style="height: 100px; width: 100px; background-color: deepskyblue"><p id="d2">帅年轻有为</p></div><p class="c1">Canada</p></body>
</html>
2.2 层级选择器
$("a b") //后代选择器:a的所有后代b
$("a > b") //子代选择器:a的所有子代b
$("a + b") //相邻兄弟选择器:紧随a标签之后的兄弟标签b
$("a ~ b") //通用兄弟选择器:a标签之后的所有兄弟标签b
3. 基本筛选器
:first //匹配第一个元素。
:last //匹配最后一个元素。
:even //匹配索引为偶数的元素(索引从0开始)。
:odd //匹配索引为奇数的元素(索引从0开始)。
:eq(index) //匹配索引为指定值index的元素(索引从0开始)。
:gt(index) //匹配索引大于指定值index的元素(索引从0开始)。
:lt(index) //匹配索引小于指定值index的元素(索引从0开始)。
:not(元素选择器) //移除所有满足not条件的标签
:has(元素选择器) //查看后代标签是否含有某个标签
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><ul id="d1"><li>001</li></ul><ul id="d2"><li>002</li></ul><ul id="d3"><li>003</li></ul><ul id="d4"><li>004</li></ul><ul id="d5"><li>005</li></ul><ul id="d6"><li>006</li></ul><ul id="d7"><li>007</li></ul><ul id="d8"><li>008</li></ul><ul id="d9"><li>009</li></ul>
</body>
</html>
4. 属性选择器
<input type="text" name="avril"><p name="Toronto">Canada</p>
5. 表单筛选器
<form action=""><input type="text"><input type="password"><input type="checkbox"><input type="checkbox" checked><input type="submit"><input type="button"><select name="" id="d1"><option value="">11</option><option value="" selected>22</option><option value="">33</option></select></form>
$('input[type="text"]') 筛选器简化 $(':text')
$(':checked') 由于checked为设置默认值,在示例代码中既能匹配到input标签,也能匹配到通过selected设置了默认值的option标签
$(':selected') 只会匹配到option标签
6. 筛选器方法
# 同级别往下查找
$("#id").next()
$("#id").nextAll()
$("#id").nextUntil("#i2")
# 同级别往上查找
$("#id").prev()
$("#id").prevAll()
$("#id").prevUntil("#i2")
# 查找祖先标签
$("#id").parent()
$("#id").parents()
$("#id").parentsUntil()
# 查找子代和兄弟标签
$("#id").children(); //子代标签
$("#id").siblings(); //兄弟标签(同级别上下所有标签)
7. jQuery操作标签
7.1 操作class
jQuery操作 | DOM操作 | |
addClass() | 向标签添加一个或多个类名 | classList.add() |
removeClass() | 从标签移除一个或多个类名 | classList.remove() |
hasClass() | 检查标签是否包含指定的类名 | classList.contains() |
toggleClass() | 不存在,添加类名;存在,移除类名 | classList.toggle() |
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><p class="c1"></p>
</body>
</html>
7.2 操作css
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><p>11</p><p>22</p>
</body>
</html>
7.3 操作位置
.scrollTop() 和 .scrollLeft()
不加参数就是获取,加参数就是设置值
用于获取或设置元素的滚动条的垂直或水平偏移值。
.scrollTop() 返回或设置元素垂直方向的滚动条偏移值
.scrollLeft() 返回或设置元素水平方向的滚动条偏移值。
// 位置操作
// 获取左侧滚动条距离顶端的位移量
$(window).scrollTop()
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><div style="height: 1000px;background-color: deepskyblue"></div><div style="height: 1000px;background-color: orange"></div><script>$(window).scroll(function () {if($(window).scrollTop() > 600){alert('超过600px,弹出提示框')}})
</script>
</body>
</html>
$(window).scroll(function () { ... }):这部分代码绑定了一个滚动事件处理器到窗口对象上。每当用户滚动窗口(无论是使用鼠标滚轮、触摸板滚动、页面内的滚动条还是其他方式),这个函数就会被触发。
if($(window).scrollTop() > 600):这里使用了 jQuery 的 scrollTop() 方法来获取当前垂直滚动的位置。此方法返回的是文档已经滚动走过的距离(以像素为单位)。如果这个值大于600,则表示用户已经滚动超过了600像素。
alert('超过600px,弹出提示框'):当上述条件成立时,即用户滚动的距离超过600像素时,就会执行这行代码。alert() 函数会创建一个警告框,暂停用户的交互并显示消息“超过600px,弹出提示框”。
7.4 操作文本
jQuery操作 | DOM操作 | |
文本内容 | text() | innerText |
HTML内容 | html() | innerHTML |
表单元素的值 | val() | value |
文件 | 转成JavaScript对象再操作 | files |
空括号为获取,括号里面有值为设置
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><p id="d1">帅年轻有为</p>
</body>
</html>
7.5 操作属性
[1] 概念
attr(name) 获取属性值
attr(name,value) 设置单个属性值
attr(name1:value1; name2:value2...) 设置多个属性值
removerAttr(name) 移除属性
[2] 代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><p id="d1">帅年轻有为</p>
</body>
</html>
[3]jQuery 的 prop() 方法
jQuery 的 .prop() 方法用于获取或设置 DOM 元素的属性值。
用法:
获取属性值$(selector).prop(name)
设置属性值$(selector).prop(name, value)
prop() 应用于 DOM 属性,而不是 HTML 特性。
对于布尔属性(如 checked, selected, disabled),prop() 可以正确地处理它们的真/假状态。
prop() 是从 jQuery 1.6 开始引入的,在此之前的版本应该使用 attr() 方法来代替。
prop() 更适合处理DOM属性,而 attr() 更适合处理 HTML 特性。
attr():用于获取或设置元素的 HTML 属性(即那些写在标签中的属性)。例如,<input id="myCheckbox" checked> 可以用 attr('checked') 来获取或设置 checked 属性。
prop():用于获取或设置元素的属性(即那些由元素本身定义的属性)。例如,对于 checked 属性,prop() 更适合处理其状态,因为 checked 实际上是一个布尔属性,它表示复选框的选中状态。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><p>a <input type="checkbox"></p><p>b <input type="checkbox"></p><p>c <input type="checkbox" id="c1" checked></p><p>d <input type="checkbox" id="d1"></p>
</body>
</html>
在运行代码未点击任何选择框的情况下,$("#c1").attr("checked")为'checked',$("#c1").prop("checked")为true
将默认选中c取消后,$("#c1").attr("checked")仍为'checked',而$("#c1").prop("checked")为false
显然,对于布尔属性checked,prop()更适合判断其状态
7.6 操作文档
[1] 概念
添加到指定元素内部的后面
$(A).append(B) //B追加到A
$(A).appendTo(B) //A追加到B
添加到指定元素内部的前面
$(A).prepend(B) //B添加到A内部的前面
$(A).prependTo(B) //A添加到B内部的前面
添加到指定元素外部的后面
$(A).after(B) //B添加到A外部的后面
$(A).insertAfter(B) //A添加到B外部的后面
添加到指定元素外部的前面
$(A).before(B) //B添加到A外部的前面
$(A).insertBefore(B) //A添加到B外部的前面
移除和清空元素
remove() //从DOM中删除所有匹配的元素
empty() //删除匹配的元素集合中所有的子节点
[2] 代码
7.7 操作事件
[1] 概念
JavaScript绑定事件的两种方式:
(1)标签属性中绑定 <p onclick="showDetail()">点击显示详细内容</p>
(2)标签对象绑定 标签对象.onclick = function(){}
jQuery绑定事件的两种方式:
(1)使用.on()方法(从 jQuery 1.7 版本开始,推荐,首选)
$(selector).on(eventName, eventHandler) $('#d1').on('click',function(){})
(2)快捷方法(有时无法生效)
jQuery对象.click(function(){}) jQuery对象.change(function(){})
[2] 克隆事件
(1)只克隆标签不克隆事件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><button id="d1">帅,年轻有为</button><script>$("#d1").click(function (){$("body").append($(this).clone())})</script>
</body>
</html>
点击第一个标签时,依次克隆标签,点击后续标签无法克隆
(2)克隆事件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><button id="d1">帅,年轻有为</button><script>$("#d1").click(function (){$("body").append($(this).clone(true))})</script>
</body>
</html>
点击第一个标签和后续克隆的标签都可以克隆
[3] 悬浮事件
(1)鼠标悬浮上去和移开各触发一次
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><button id="d1">鼠标悬浮展示具体内容</button><script>$("#d1").hover(function (){alert("帅,年轻有为")})</script>
</body>
</html>
鼠标悬浮在按钮和从按钮移开都会弹出显示框
(2)如果想要鼠标悬浮和移开执行不同的操作,需要写两个函数
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><button id="d1">鼠标悬浮展示具体内容</button><script>$("#d1").hover(function (){alert("帅,年轻有为")},function (){alert("已移除悬浮")})</script>
</body>
</html>
[4] input框实时监控
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><input type="text" id="d1"><script>$("#d1").on("input",function (){console.log($(this).val())})</script>
</body>
</html>
输入框内每输入或删除一个字符,控制台都会动态打印
[5] 阻止默认行为
当事件触发时,浏览器通常会执行一些默认的操作,比如点击链接会跳转到另一个页面,提交表单会向服务器发送数据等。如果不希望这些默认行为发生,就可以使用以下两种方法来阻止。
(1)return false
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><form action="">用户名:<input type="text"><input type="submit" id="d1"></form><script>$("#d1").on("click", function (){alert("帅年轻有为")return false})</script>
</body>
</html>
当以上代码没有return false时,点击提交按钮既会弹出显示框,也会将刷新页面提交数据
而加上return false后,d1标签的默认行为提交数据已被阻止,只能弹出显示框
(2)preventDefault()
该方法需要配合参数使用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><form action="">用户名:<input type="text"><input type="submit" id="d1"></form><script>$("#d1").on("click", function (a) {alert("帅年轻有为")a.preventDefault()})</script>
</body>
</html>
[6] 阻止事件冒泡
多个标签嵌套并且有相同事件的情况下,会出现逐级汇报的现象
当事件被触发时,它通常会在DOM树中向上冒泡到根节点
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><div id="d1">div标签<p id="d2">p标签<span id="d3">span标签</span></p></div><script>$("#d1").on("click", function(){alert("这是div标签")})$("#d2").on("click", function(){alert("这是p标签")})$("#d3").on("click", function(){alert("这是span标签")})</script>
</body>
</html>
当触发d3的点击事件时,事件将在DOM树中向上冒泡到根节点,依次弹出d3、d2、d1的显示框
阻止事件冒泡有以下两种方式:
(1)return false
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><div id="d1">div标签<p id="d2">p标签<span id="d3">span标签</span></p></div><script>$("#d1").on("click", function(){alert("这是div标签")})$("#d2").on("click", function(){alert("这是p标签")})$("#d3").on("click", function(){alert("这是span标签")return false})</script>
</body>
</html>
加上return false后,触发d3的点击事件时,只弹出d3的显示框,不再向上冒泡
(2)stopPropagation()
该方法需要配合参数使用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><div id="d1">div标签<p id="d2">p标签<span id="d3">span标签</span></p></div><script>$("#d1").on("click", function(){alert("这是div标签")})$("#d2").on("click", function(){alert("这是p标签")})$("#d3").on("click", function(e){alert("这是span标签")e.stopPropagation()})</script>
</body>
</html>
[7] 事件委托
(1)引出
针对动态创建的标签,提前写好的事件是无法生效的
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><button>点击展示有趣内容</button><button>点击展示有趣内容</button><script>$("button").on("click", function (){alert("帅年轻有为")})</script>
</body>
</html>
点击动态新建的标签,不会弹出显示框,点击其它两个标签会弹出显示框
(2)使用事件委托动态添加元素
基本语法:$('body').on('事件类型','选择器',function(){})
$('body').on('click','button',function(){})
为 body
元素内的所有 button
元素(包括未来动态添加的按钮)绑定一个点击事件处理器。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script>
</head>
<body><button>点击展示有趣内容</button><button>点击展示有趣内容</button><script>$("body").on("click", "button", function (){alert("帅年轻有为")})</script>
</body>
</html>
使用事件委托后,点击动态添加的标签也会弹出显示框。
8. JavaScript对象与jQuery对象转换
可以将jQuery对象看成是数组包了标签对象
JavaScript对象就是标签对象
$('#d1')[0] // jQuery对象转JavaScript对象
$(标签对象) // JavaScript对象转jQuery对象
9. jQuery的动画效果
9.1 fadeIn()和fadeOut()
这两个方法可以实现元素的淡入淡出效果
fadeIn()将元素逐渐显示出来
fadeOut()则使元素逐渐消失
fadeIn() 函数可以接受两个参数:
速度:可以是“slow”、“fast”或者一个表示动画持续时间的数字(毫秒)。如果不指定,默认是“normal”速度,通常等同于400毫秒。
回调函数:一个在动画完成之后执行的函数。
// 淡入显示元素,并在动画完成后执行回调函数
$('#element').fadeIn(function() {
alert('Element is now visible!');
});
9.2 slideUp()和slideDown()
这两个方法可以实现元素的上滑和下滑效果。
slideUp()将元素向上滑动隐藏,
slideDown()则使元素从上方下滑显示出来。
slideUp() 函数可以接受两个参数:
速度:可以是“slow”、“fast”或者一个表示动画持续时间的数字(毫秒)。如果不指定,默认是“normal”速度,通常等同于400毫秒。
回调函数:一个在动画完成之后执行的函数。
// 向上滑动隐藏元素,并在动画完成后执行回调函数
$('#element').slideUp(function() {
alert('Element is now hidden!');
});
9.3 animate()
该方法允许创建自定义动画,通过逐步改变 CSS 属性值来实现动画效果。这个函数非常灵活,可以用来模拟几乎所有的动画行为,包括移动、缩放、旋转、改变透明度等。
animate() 函数的基本语法如下:
$(selector).animate(properties, duration, easing, complete);
selector:选择器或者 jQuery 对象,指定要动画化的元素。
properties:一个对象,包含要改变的 CSS 属性和目标值。
duration:动画持续的时间(例如 "slow"、"fast" 或毫秒数)。
easing:一个字符串,指定动画的缓动函数(例如 "linear"、"swing" 或自定义的函数)。
complete:动画完成后要执行的回调函数。