1. 什么是jQuery
jQuery 是一个高效、精简并且功能丰富的 JavaScript 工具库。它提供的 API 易于使用且兼容众多浏览器,这让诸如 HTML 文档遍历和操作、事件处理、动画和 Ajax 操作更加简单。
jQuery只是一个JavaScript库。jQuery的所有功能都可以通过JavaScript进行访问,因此对JavaScript的深入了解,对于理解,构建和调试代码至关重要。随着时间的流逝,定期使用jQuery可以提高您对JavaScript的熟练程度,但是如果不具备JavaScript的内置构造和语法的使用知识,可能很难开始编写jQuery。
参考链接
官网:https://jquery.com/
官方教程: https://learn.jquery.com/
中文API文档:https://jquery.cuishifeng.cn/
前端开源镜像加速服务器: https://www.bootcdn.cn/
jQuery下载地址: https://www.bootcdn.cn/jquery/
1.1 jQuery的优势
- 强大的选择器 - 帮助我们快速选择元素
- 出色的DOM封装 - 提供更方便的DOM元素操作
- 可靠的事件处理机制 - 事件绑定更简单
- 出色浏览器的兼容性
- 隐式迭代简化编程 - 减少操作多个的内容的for循环
- 丰富的第三方插件
2. jQuery的环境搭建
2.1 获取jQuery库文件
从Jquery的官方下载页下载jquery即可。https://jquery.com/download/
Jquery版本:
- 生产版: 压缩版本,项目上线时使用的版本,比较小。
- 开发版: 非压缩版本,在项目开发时使用的版本,稍微大一些。
2.2 引入jQuery文件
在页面中使用
<script>
标签导入到项目即可
<!-- 导入生开发版本 -->
<script type="text/javascript" src='./lib/jquery-3.5.1.js'></script>
<!-- 或者使用生产版本 -->
<script type="text/javascript" src='./lib/jquery-3.5.1.min.js'></script>
3. jQuery的基础语法
//页面初始化方法
$(document).ready(function() {
alert("大吉大利,晚上吃鸡!");
});
//简化的写法
$ (function() {
alert("大吉大利,晚上吃鸡!");
});
与原生JS的对比:
区别 | window.onload | $(document).ready() |
---|---|---|
执行时机 | 必须等待网页中所有的内容加载完毕后(包括图片、flash、视频等)才能执行 | 网页中所有DOM文档结构绘制完毕后即刻执行, 可能与DOM元素关联的内容(图片、flash、视频等)并没有加载完 |
编写个数 | 同一页面不能同时编写多个 | 同一页面能同时编写多个 |
3.1 jQuery工厂函数$()
说明:
- jQuery的执行入口,也称之为jQuery工厂函数。通常情况下为ready函数传递一个函数作为希望jQuery执行的代码。
- 在文档“就绪”之前,无法安全地操纵页面,jQuery检测到这种就绪状态开始执行。
$( document ).ready()
仅在页面文档对象模型(DOM)准备好执行JavaScript代码之后,内部代码开始运行。很多前段开发者使用window.onload
事件开始运行js代码。但是需要整个页面完整加载(包括dom、图像、iframe等)之后才开始执行。- 在jQuery中
$
表示的是jQuery
模板对象$()
表示一个简写的jQuery工厂函数,即$()
等效于$(document).ready()
。
3.2 jQuery工厂函数作用
查找DOM元素节点对象,并将DOM元素节点对象封装为一个jQuery对象
将DOM元素节点对象封装为jQuery对象
直接将HTML结构封装为一个jQuery对象
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery工厂函数功能演示</title>
</head>
<body>
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//1.查找DOM元素节点对象(查找出来的默认就将其转换为jQuery对象):工厂函数中可以填写CSS选择器
let $lis = $('li');
console.log($lis);
//2.将DOM元素节点对象转换为jQuery对象
let lis = document.querySelectorAll('li');
console.log(lis);
console.log($(lis));
//3.直接将HTML结构转换为jQuery对象
let $newLi = $('<li>新的一项内容</li>');
console.log($newLi);
document.querySelector('ul').appendChild($newLi[0]);
});
</script>
</body>
</html>
3.3 jQuery对象与DOM元素节点对象
- jQuery对象就是通过jQuery包装DOM元素节点对象后产生的对象,它能够使用jQuery中的函数
- DOM元素节点对象与jQuery对象可以相互转换
注意:DOM元素节点对象和jQuery对象是两个完全不同的对象,因此它们具备的内置函数是不能互相使用的
示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery对象与DOM节点对象的相互转换</title>
</head>
<body>
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//获取DOM元素节点对象
let ul = document.querySelector('ul');
console.log(ul);
//DOM元素节点对象转换为jQuery对象
let $ul = $(ul);
console.log($ul);
//jQuery对象转换为DOM元素节点对象
let $lis = $('li');
//方法1:通过数组的索引来获取
console.log($lis[0]);
//方法2:通过get来获取,参数是索引
console.log($lis.get(1));
});
</script>
</body>
</html>
4. jQuery选择器
jQuery的选择器大部分与CSS3的选择器一致,只有少部分的额外新增,因为CSS3的选择器足以应对各种情况,且用起来也比较方便,因此新增的选择器了解即可。
4.1 jQuery基础选择器
名称 | 语法构成 | 描述 |
---|---|---|
元素选择器 | element | 根据给定的元素名匹配元素 |
类选择器 | .class | 根据给定的class匹配元素 |
ID选择器 | #id | 根据给定的id匹配元素 |
并集选择器 | selector1,selector2,…,selectorN | 将每一个选择器匹配的元素合并后一起返回 |
全局选择器 | ***** | 匹配所有元素 |
4.2 层级选择器
名称 | 语法构成 | 描述 |
---|---|---|
后代选择器 | ancestor descendant | 选取ancestor元素里的所有descendant后代元素 |
子选择器 | parent > child | 选取parent元素下所有child子元素 |
相邻选择器 | prev + next | 选取紧邻prev元素之后的next元素 |
同辈选择器 | prev~sibings | 选取prev元素之后的所有siblings元素 |
4.3 属性选择器
语法构成 | 描述 |
---|---|
[attribute] | 选取包含给定属性的元素 |
[attribute=value] | 选取等于给定属性是某个特定值的元素 |
[attribute!=value] | 选取给定属性不是某个特定值的元素(没写该属性的元素也算) |
[attribute^=value] | 选取给定属性是以某些特定值开始的元素 |
[attribute$=value] | 选取给定属性是以某些特定值结尾的元素 |
[attribute*=value] | 选取给定属性是以包含某些值的元素 |
[attribute!=value]是CSS3选择器中没有的,属于jQuery新增的
4.4 子元素选择器
语 法 | 说 明 |
---|---|
E:first-child | 选择属于选择器的第一个子元素 |
E:last-child | 选择属于选择器的最后一个子元素 |
E:nth-child(n) | 选择属于选择器的指定位置的子元素 |
E:first-of-type | 选择属于选择器的第一个指定选择器的子元素 |
E:last-of-type | 选择属于选择器的最后一个指定选择器的子元素 |
E:nth-of-type(n) | 选择属于选择器的指定位置的指定选择器的子元素 |
E:nth-last-child(n) | 选择所有他们父元素的第n个子元素。计数从最后一个元素开始到第一个 |
E:nth-last-of-type(n) | 选择的所有他们的父级元素的第n个子元素,计数从最后一个元素到第一个 |
E:only-child | 如果某个元素是父元素中唯一的子元素,那么对应的元素将会被匹配 |
E:only-of-type | 没有其它相同类型的兄弟元素,那么对应的元素将会被匹配 |
4.4 jQuery的特殊选择器
这些选择器,部分是CSS3中有的,不过jQuery对它们进行了一些调整;其它的是jQuery提供出来的。
4.4.1 基本筛选器
语 法 | 说 明 |
---|---|
E:first | 匹配第一个元素E |
E:last | 匹配最后一个元素E |
E:not(selector) | 匹配不具有指定选择器的元素E |
E:even | 匹配所有索引值为偶数的元素E,从 0 开始计数 |
E:odd | 匹配所有索引值为奇数的元素,从 0 开始计数 |
E:eq(index) | 匹配一个给定索引值的元素E |
E:gt(index) | 匹配所有大于给定索引值的元素E |
E:lt(index) | 匹配所有小于给定索引值的元素E |
E:lang(language) | 匹配指定语言的所有元素E |
:header | 匹配如h1 、h2 、h3 之类的标题元素 |
:animated | 匹配所有正在执行动画效果的元素(这里的动画不是CSS3的animate,而是jQuery提供的动画) |
E:focus | 匹配当前获取焦点的元素E |
:root | 匹配文档的根元素,永远是<html> 元素 |
E:target | 代表一个唯一的页面元素(目标元素),其id 与当前URL片段匹配 |
演示模板:
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
4.4.2 可见性选择器
名称 | 说 明 |
---|---|
:hidden | 匹配所有隐藏的元素(display为none的;可以在前面指定选择器) |
:visible | 匹配所有可视的元素(display非none的;可以在前面指定选择器) |
4.4.3 内容选择器
名称 | 说 明 |
---|---|
:contains(text) | 匹配包含指定文本内容的元素(可以在前面指定选择器) |
:empty | 匹配没有任何子元素或者文本的元素(可以在前面指定选择器) |
:has(selector) | 匹配含有选择器所匹配的元素的元素(可以在前面指定选择器) |
:parent | 匹配含有子元素或者文本的元素(可以在前面指定选择器) |
4.4.4 表单选择器
语 法 | 说 明 |
---|---|
:input | 匹配所有 input, textarea, select 和 button 元素 |
:text | 匹配所有的单行文本框(也就是type设定为text的input元素) |
:password | 匹配所有密码框(也就是type设定为password的input元素) |
:radio | 匹配所有单选按钮(也就是type设定为radio的input元素) |
:checkbox | 匹配所有复选框(也就是type设定为checkbox的input元素) |
:submit | 匹配所有提交按钮,理论上只匹配type为"submit" 的input或者button,但是现在的很多浏览器,button元素默认的type即为submit,所以很多情况下,不设置type的button也会成为筛选结果。为了防止歧义或者误操作,建议所有的button在使用时都添加type属性。 |
:image | 匹配所有图像域(也就是type设定为image的input元素) |
:reset | 匹配所有重置按钮(也就是type设定为reset的input元素) |
:button | 匹配所有按钮,包括type设定为button的input元素以及button元素 |
:file | 匹配所有文件域(也就是type设定为file的input元素) |
4.4.5 表单对象属性选择器
名称 | 说 明 |
---|---|
:enabled | 匹配所有未被禁用元素(可以在前面指定选择器) |
:disabled | 匹配所有被禁用的元素(可以在前面指定选择器) |
:checked | 匹配所有选中的被选中元素(复选框、单选框等,select中的option),对于select元素来说,获取选中推荐使用 :selected |
:selected | 匹配所有选中的option元素 |
5. jQuery操作样式(重要)
5.1 操作行内样式(style)
5.1.1 设置单个样式
$('选择器').css('样式名','属性值')
5.1.2 设置多个样式
$('选择器').css({
'样式名':'属性值',
'样式名':'属性值',
...
})
5.1.3 获取单个样式值
$('选择器').css('样式名');
对于获取而言,不管选择器有多少个元素被选中,只能获取第一个选择器匹配元素的样式值
5.1.4 示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery操作行内样式</title>
<style type="text/css">
li:last-child {
background-color: rgb(233, 150, 122);
}
</style>
</head>
<body>
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//设置单个行内样式
$('li').css('font-size','18px');
//设置第一个li字体风格为斜体
$('li:first-child').css('font-style','italic');
//设置多个行内样式
$('li:nth-child(2n)').css({
'color': 'red',
'font-weight': '700'
});
//获取指定样式
console.log($('li:last-child').css('background-color'));
});
</script>
</body>
</html>
5.2 操作class类样式
5.2.1 追加类样式
//单个类样式
$(selector).addClass(class)
//多个类样式,多个类样式用空格隔开
$(selector).addClass(class1 class2 ... classN)
5.2.2 移除指定类样式
//移除单个类样式
$(selector).removeClass(class)
//移除多个类样式
$(selector).removeClass(class1 class2 ... classN)
5.2.3 判断是否存在指定类样式
//判断是否存在单个类样式
$(selector).hasClass(class)
//判断是否存在多个类样式
$(selector).hasClass(class1 class2 ... classN)
5.2.4 切换指定类样式
如果对应样式存在,那么移除,否则添加
//切换单个类样式
$(selector).toggleClass(class)
//切换多个类样式
$(selector).toggleClass(class1 class2 ... classN)
5.2.5 示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery操作类样式</title>
<style type="text/css">
li {
cursor: pointer;
transition: all .2s linear;
}
li.active {
font-size: 24px;
font-weight: 700;
}
</style>
</head>
<body>
<ul>
<li class="active">第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//获取所有li
let lis = document.querySelectorAll('li');
//记录当前激活的li(默认第一项)
let activeLi = lis[0];
//给是所有的li添加点击事件
lis.forEach(value => {
value.addEventListener('click', e => {
//如果当前点击的是已经激活的,那么结束后续逻辑
if(value === activeLi) return;
//激活当前点击的项
$(value).addClass('active');
//取消激活原本项
$(activeLi).removeClass('active');
//记录当前激活的项
activeLi = value;
});
});
});
</script>
</body>
</html>
6. jQuery操作内容、属性以及值(重要)
6.1 jQuery操作内容
方法 | 说明 |
---|---|
$(selector).html(content) | 设置对象中的内容(HTML格式) |
$(selector).html() | 获取对象中的内容(HTML格式) |
$(selector).text(content) | 设置对象中的内容(文本格式) |
$(selector).text() | 获取对象中的内容(文本格式) |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery操作内容</title>
</head>
<body>
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
let $ul = $('ul');
//获取$ul jQuery对象中的HTML内容
console.log($ul.html())
//设置第三项li的HTML内容
$('ul li:nth-child(3)').html(`
<h1>新的标题</h1>
<p>新的内容</p>
<a href="#">新的超链接</a>
`);
//获取$ul jQuery对象中的文本内容
console.log($ul.text())
//设置第五项li的文本内容
$('ul li:nth-child(5)').text(`
<h1>新的标题</h1>
<p>新的内容</p>
<a href="#">新的超链接</a>
`);
});
</script>
</body>
</html>
6.2 jQuery操作值
函数 | 获取 |
---|---|
$(selector).val(value) | 设置匹配元素的值 |
$(selector).val() | 获得匹配元素的当前值 |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery操作值</title>
</head>
<body>
<form>
<label>
<span>账号:</span>
<input type="text" name="account" />
</label>
<label>
<span>密码:</span>
<input type="password" name="pwd" />
</label>
<input type="submit" value="登录" />
</form>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//设置账号的值为admin
$('input[name="account"]').val('admin');
//表单提交事件
$('form')[0].addEventListener('submit',e => {
//禁止默认事件
e.preventDefault();
//获取密码框的值
console.log($('input[name="pwd"]').val());
});
});
</script>
</body>
</html>
6.3 jQuery操作属性
函数 | 获取 |
---|---|
$(selector).attr(name,value) | 追加单个属性 |
$(selector).attr({name1:value1,name2:value2,…}) | 追加多个属性 |
$(selector).attr(name) | 获取指定属性 |
$(selector).removeAttr(name) | 移除单个属性 |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery操作属性</title>
<style type="text/css">
.cus-checkbox {
display: inline-block;
width: 16px;
height: 16px;
border: 1px solid #d9d9d9;
cursor: pointer;
position: relative;
border-radius: 2px;
}
.cus-checkbox::after {
content: '';
position: absolute;
width: 8px;
height: 8px;
left: calc(50% - 4px);
top: calc(50% - 4px);
transition: background-color .2s linear;
}
.cus-checkbox:hover,.cus-checkbox[data-checked='checked'] {
border-color: #40a9ff;
}
.cus-checkbox[data-checked='checked']::after {
background-color: #1890ff;
}
</style>
</head>
<body>
<span class="cus-checkbox"></span>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
let $cus = $('.cus-checkbox');
$cus[0].addEventListener('click', e => {
//获取多选框当前的选中状态
let status = $cus.attr('data-checked');
//判断当前的选中状态
if(status !== "checked") {
//如果当前状态不是选中的,那么将其状态设定为选中状态
$cus.attr('data-checked',"checked");
}else {
$cus.removeAttr('data-checked');
}
});
});
</script>
</body>
</html>
7. jQuery添加、移除元素节点(重要)
7.1 添加子元素节点
方法名 | 语法 | 说明 |
---|---|---|
append | $(selector).append(content) | 在被选元素内部的结尾插入指定内容 |
appendTo | $(content).appendTo(selector) | 将选择的内容追加到被选元素内部的结尾 |
prepend | $(selector).prepend(content) | 在被选元素内部的开头插入指定内容 |
prependTo | $(content).prependTo(selector) | 将选择内容插入到被选元素内部的开头 |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery添加子元素节点</title>
</head>
<body>
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//在ul的尾部添加一个新的li
let $ul = $('ul');
$ul.append(`<li>新的尾部项内容</li>`);
//在ul的首部添加一个新的li
$ul.prepend(`<li>新的首部项内容</li>`);
});
</script>
</body>
</html>
7.2 添加同级元素节点
方法名 | 语法 | 说明 |
---|---|---|
after | $(selector).after(content) | 在被选元素后插入指定内容 |
insertAfter | $(content).insertAfter(selector) | 将指定内容追加到被选元素后 |
before | $(selector).before(content) | 在被选元素前插入指定内容 |
insertBefore | $(content).insertBefore(selector) | 将指定内容插入到被选元素前 |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery添加同级元素节点</title>
</head>
<body>
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//在第四项li的后面添加一个新的li
$('li:nth-child(4)').after(`<li>新的一项内容1</li>`);
//在第三项li的前面添加一个新的li
$('li:nth-child(3)').before(`<li>新的一项内容2</li>`);
});
</script>
</body>
</html>
7.3 删除子元素节点
方法名 | 语法 | 说明 |
---|---|---|
remove | $(selectorRang).remove(selector) | 移除被选元素(包含数据和事件) selectorRang:用于首次圈定要移除元素,可能是多个也可能是一个 selector:是一个可选参数,用于在圈定移除元素中再次筛选(一般情况下,selector都会忽略,直接在selectorRang中就选好) |
empty | $(selector).empty() | 从被选元素移除所有子节点和内容 |
detach | $(selectorRange).detach(selector) | 移除被选元素(保留数据和事件) |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery删除子元素节点</title>
</head>
<body>
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//移除第四项li
$('li:nth-child(4)').remove();
});
</script>
</body>
</html>
8. jQuery访问元素节点(重要)
方法名 | 语法 | 说明 |
---|---|---|
children | $(selectorRang).children(selector) | 获取所有子元素节点(selector用于进行二次筛选) |
next | $(selectorRang).next(selector) | 获取下一个兄弟元素节点(selector用于进行二次筛选) |
prev | $(selectorRang).prev(selector) | 获取前一个兄弟元素节点(selector用于进行二次筛选) |
siblings | $(selectorRang).siblings(selector) | 获取前面以及后面所有的兄弟元素节点(selector用于进行二次筛选) |
parent | $(selectorRang).parent(selector) | 获取父级元素节点(selector用于进行二次筛选) |
parents | $(selectorRang).parents(selector) | 获取祖先元素节点(父级的父级…)(selector用于进行二次筛选) |
closest | $(selectorRang).closest(selector) | 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素节点(selector用于进行二次筛选) |
find | $(selectorRang).find(selector) | 获取其下指定选择器的元素节点(selector用于进行二次筛选) |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery访问元素节点</title>
</head>
<body>
<table>
<thead>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>联系电话</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr data-id="1">
<td>1</td>
<td>张三</td>
<td>男</td>
<td>37</td>
<td>13110987564</td>
<td>
<a href="#" data-action="del">删除</a>
<a href="#" data-action="edit">编辑</a>
</td>
</tr>
<tr data-id="2">
<td>2</td>
<td>李四</td>
<td>女</td>
<td>24</td>
<td>18888987564</td>
<td>
<a href="#" data-action="del">删除</a>
<a href="#" data-action="edit">编辑</a>
</td>
</tr>
<tr data-id="3">
<td>3</td>
<td>王五</td>
<td>男</td>
<td>31</td>
<td>13450234564</td>
<td>
<a href="#" data-action="del">删除</a>
<a href="#" data-action="edit">编辑</a>
</td>
</tr>
</tbody>
</table>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
let $tbody = $('tbody');
//获取tbody下面所有的子元素节点
let $trs = $tbody.children();
console.log($trs);
//获取第二个tr
let $twoTr = $tbody.find('tr:nth-child(2)');
console.log($twoTr);
//获取第二个tr的下一个兄弟元素节点
console.log($twoTr.next());
});
</script>
</body>
</html>
9. jQuery访问链与断链(重要)
9.1 访问链
jQuery对象的方法可以采用链式进行调用的
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery访问链</title>
<style type="text/css">
li {
cursor: pointer;
transition: all .2s linear;
}
li.active {
font-size: 24px;
font-weight: 700;
}
</style>
</head>
<body>
<ul>
<li class="active">第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//获取所有li
let lis = document.querySelectorAll('li');
//给是所有的li添加点击事件
lis.forEach(value => {
value.addEventListener('click', e => {
// 给当前点击的li添加active样式,然后查找具有.active的兄弟元素节点,然后移除它的active样式
$(value).addClass('active').siblings('.active').removeClass('active');
});
});
});
</script>
</body>
</html>
9.2 断链
使用end方法用于结束当前链条中最近一个破坏性筛选操作,并将匹配元素集还原为之前的状态
破坏性操作包括:
children
、filter
、find
、map
、next
、nextAll
、not
、parent
、parents
、prev
、prevAll
、siblings
、slice
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery断链</title>
<style type="text/css">
li {
cursor: pointer;
transition: all .2s linear;
}
li.active {
font-size: 24px;
font-weight: 700;
}
</style>
</head>
<body>
<ul>
<li class="active">第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//获取所有li
let lis = document.querySelectorAll('li');
//给是所有的li添加点击事件
lis.forEach(value => {
value.addEventListener('click', e => {
// 找到当前点击的li且具有.active的兄弟元素节点,然后移除其active样式,
// 然后使用end将当前的元素重新回调当前点击的li,然后为其添加active样式
$(value)
.siblings('.active').removeClass('active')
.end().addClass('active');
});
});
});
</script>
</body>
</html>
10. jQuery的CSS-DOM操作
方 法 | 说 明 |
---|---|
offset() | 获取匹配元素在当前视口的相对偏移(此方法仅对可见元素有效)。返回的对象包含两个值:top和left,以像素为单位 |
position() | 获取匹配元素相对父元素的偏移(此方法仅对可见元素有效)。返回的对象包含两个值:top和left,以像素为单位【受到父级的position值的影响,如果父级未设置相对或者绝对定位,那么left的值会以视口为参照物】 |
height(value) | 设置或返回匹配元素的高度(参数可选,无参代表返回)。如果没有规定长度单位,则使用默认的px作为单位【这里的宽度是内容宽度】 |
width(value) | 设置或返回匹配元素的宽度(参数可选,无参代表返回)。如果没有规定长度单位,则使用默认的px作为单位【这里的高度是内容高度】 |
scrollTop(position) | 参数可选。设置或返回匹配元素相对滚动条顶部的偏移(此方法对可见和隐藏元素均有效) |
scrollLeft(position) | 参数可选。设置或返回匹配元素相对滚动条左侧的偏移(此方法对可见和隐藏元素均有效) |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery的CSS-DOM操作</title>
<style type="text/css">
.box {
width: 300px;
height: 300px;
padding: 50px;
overflow: auto;
background-color: darkseagreen;
border: 4px solid #426142;
}
ul {
background-color: brown;
height: 100vh;
}
</style>
</head>
<body>
<div class="box">
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
</div>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
let $box = $('.box');
let $ul = $box.find('ul');
//获取$box的宽度和高度
console.log(`$box的宽度为:${$box.width()}`);
console.log(`$box的高度为:${$box.height()}`)
//获取$ul相对于视口的距离
let offset = $ul.offset();
console.log(`$ul距离视口顶部的距离为:${offset.top}`);
console.log(`$ul距离视口左侧的距离为:${offset.left}`);
//获取$ul相对于其父级box的距离
let position = $ul.position();
console.log(`$ul距离父级顶部的距离为:${position.top}`);
//如果父级没有设置position为相对或者绝对定位,那么left会以视口为参照物
console.log(`$ul距离父级左侧的距离为:${position.left}`);
//设置$box的滚动条位置在100
$box.scrollTop(100);
});
</script>
</body>
</html>
11. jQuery的事件处理(掌握)
jQuery提供的各种事件名与原生JS的一样,不过其还提供了一些额外的事件以及绑定方式
jQuery具有隐式迭代功能,我们可以直接给jQuery对象集合绑定事件
11.1 鼠标事件
名称 | 说明 |
---|---|
click | 单击 |
dbclick | 双击 |
mousedown | 按下 |
mouseup | 松开 |
mouseenter | 光标移入元素时触发 |
mouseleave | 光标移出元素时触发 |
mouseover | 光标移入元素时触发,进入子元素也会触发 |
mouseout | 光标移出元素时触发,离开子元素也会触发 |
mousemove | 光标在元素上移动时触发 |
11.2 键盘事件
名称 | 说明 |
---|---|
keydown | 键盘按下 |
keyup | 键盘松开 |
keypress | 键盘按下并产生字符时的事件(ctrl、shift之类的键不会触发) |
11.3 特殊事件
名称 | 说明 |
---|---|
focus | 输入框获取焦点 |
blur | 输入框失去焦点 |
select | 内容选中 |
input | 输入框输入内容 |
change | 元素内容发生改变 |
submit | 表单提交时 |
resize | 浏览器窗口大小发生变化时 |
11.4 事件切换
名称 | 说明 |
---|---|
hover(enter,leave) | 模拟鼠标移入移出的复合事件,相当于mouseenter与mouseleave事件的组合 |
toggle(speed,easing,fn) | 实现元素进行显示与隐藏的切换 speed:显示与动画切换的效果速度,默认为0毫秒,可以是slow、normal、fast、数值 easing:动画曲线,默认是"swing",可以是linear fn:动画完成后执行的回调函数,每个元素执行一次 |
11.5 jQuery的事件绑定
以上的事件,我们可以使用jQuery对象直接绑定
也可以使用下面的方法绑定,使用下面的方法绑定,我们可以进行额外的管控
方法名 | 语法 | 说明 |
---|---|---|
on | $(selector).on(events,childSelector,data,fn) | 给指定的元素绑定一个或多个事件的处理函数 events:一个或多个事件名(多个用空格间隔) childSelector:二次筛选的选择器(一般不会用) data:给事件传递的额外数据(该数据放置在回调函数Event对象的data字段中) fn:事件触发时的回调函数 |
off | $(selector).off(events,childSelector,fn) | 移除指定的元素使用on绑定的一个或多个事件的处理函数(实测,直接绑定也会被移除) events:一个或多个事件名(多个用空格间隔) childSelector:二次筛选的选择器(一般不会用) fn:事件处理前的回调函数 |
one | $(selector).one(events,childSelector,data,fn) | 整体与on一样,只不过对应事件只会触发一次,之后就不会再触发了 |
trigger | $(selector).trigger(event,data) | 触发指定元素的指定事件 |
triggerHandler | $(selector).triggerHandler(event,data) | 与trigger相似,但有三个区别: 1.他不会触发浏览器默认事件 2.只触发jQuery对象集合中第一个元素的事件处理函数 3.这个方法的返回的是事件处理函数的返回值,而不是据有可链性的jQuery对象 |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery的事件绑定</title>
<style type="text/css">
li {
cursor: pointer;
transition: all .2s linear;
}
li.active {
font-size: 24px;
font-weight: 700;
}
</style>
</head>
<body>
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
let $lis = $('li');
//配合jQuery的隐式迭代功能,给所有li绑定click事件
$lis.click(e => {
//每次li被点击,切换自身的active类样式
$(e.target).toggleClass('active');
});
//鼠标移入ul中,触发所有li的click事件
$('ul').mouseenter(e => {
$lis.trigger('click');
});
});
</script>
</body>
</html>
12. jQuery的隐式迭代与显示迭代函数each
12.1 隐式迭代概念
当我们通过选择器得到一个jQuery对象集合时,如果我们对这个jQuery对象集合的操作是一致的且执行的是jQuery为我们提供的方法,那么我们就可以直接使用jQuery为我们提供的方法
jQuery会自动的帮我们迭代这个jQuery对象集合,然后自动的执行对应的方法
12.2 显示迭代函数each
通过each函数,我们可以针对一个jQuery对象集合,手动的进行迭代
注意:此函数仅针对于jQuery对象或者对象集合
语法:
index代表,迭代的索引值
element,代表jQuery对象集合中的每个元素节点对象(注意,这里获取到的不是jQuery对象)
$(selector).each(callback(index,element))
示例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery的事件绑定</title>
<style type="text/css">
li {
cursor: pointer;
transition: all .2s linear;
}
li.active {
font-size: 24px;
font-weight: 700;
}
</style>
</head>
<body>
<ul>
<li>第一项内容</li>
<li>第二项内容</li>
<li>第三项内容</li>
<li>第四项内容</li>
<li>第五项内容</li>
<li>第六项内容</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//使用each手动迭代li jQuery对象集合
$('li').each((index,element) => {
//如果索引为偶数,那么添加active类样式
if(index % 2 === 0) $(element).addClass('active');
});
});
</script>
</body>
</html>
13. jQuery的动画(了解)
方法 | 说明 |
---|---|
show(speed,easing,fn) | 显示处于隐藏的元素,如果选择的元素是可见的,这个方法将不会改变任何东西。无论这个元素是通过hide()方法隐藏的还是设置了display:none;这个方法都将有效。 speed:默认值为0毫秒,可以是slow、normal、fast、数值 easing:动画曲线,默认是"swing",可以是linear fn:动画完成后执行的回调函数,每个元素执行一次 |
hide(speed,easing,fn) | 隐藏处于显示的元素,如果选择的元素是隐藏的,这个方法将不会改变任何东西。 speed:默认值为0毫秒,可以是slow、normal、fast、数值 easing:动画曲线,默认是"swing",可以是linear fn:动画完成后执行的回调函数,每个元素执行一次 |
fadeIn(speed,easing,fn) | 通过透明度的变化来实现所有匹配元素的淡入效果,并在动画完成后可选地触发一个回调函数。 speed:默认值为0毫秒,可以是slow、normal、fast、数值 easing:动画曲线,默认是"swing",可以是linear fn:动画完成后执行的回调函数,每个元素执行一次 |
fadeOut(speed,callback) | 通过透明度的变化来实现所有匹配元素的淡出效果,并在动画完成后可选地触发一个回调函数。 speed:默认值为0毫秒,可以是slow、normal、fast、数值 easing:动画曲线,默认是"swing",可以是linear fn:动画完成后执行的回调函数,每个元素执行一次 |
fadeIn(speed,opacity,easing,fn) | 所有匹配元素的透明度调整到指定的值,并在动画完成后可选地触发一个回调函数。 speed:默认值为0毫秒,可以是slow、normal、fast、数值 opacity:一个0~1之间表示透明度的数字 easing:动画曲线,默认是"swing",可以是linear fn:动画完成后执行的回调函数,每个元素执行一次 |
fadeToggle(speed,easing,fn) | 通过透明度的变化来实现所有匹配元素的淡入或淡出效果,并在动画完成后可选地触发一个回调函数。 speed:默认值为0毫秒,可以是slow、normal、fast、数值 easing:动画曲线,默认是"swing",可以是linear fn:动画完成后执行的回调函数,每个元素执行一次 |
slideDown(speed,easing,fn) | 通过高度变化(向下增大)来动态地显示所有匹配的元素,在显示完成后可选地触发一个回调函数。 speed:默认值为0毫秒,可以是slow、normal、fast、数值 easing:动画曲线,默认是"swing",可以是linear fn:动画完成后执行的回调函数,每个元素执行一次 |
slideUp(speed,easing,fn) | 通过高度变化(向上减小)来动态地隐藏所有匹配的元素,在隐藏完成后可选地触发一个回调函数。 speed:默认值为0毫秒,可以是slow、normal、fast、数值 easing:动画曲线,默认是"swing",可以是linear fn:动画完成后执行的回调函数,每个元素执行一次 |
slideToggle(speed,easing,fn) | 通过高度变化来动态地显示或隐藏所有匹配的元素,在隐藏完成后可选地触发一个回调函数。 speed:默认值为0毫秒,可以是slow、normal、fast、数值 easing:动画曲线,默认是"swing",可以是linear fn:动画完成后执行的回调函数,每个元素执行一次 |
animate(params,speed,easing,fn) | 自定义动画{"opacity":"255","height":"30px"} |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery的动画</title>
<style type="text/css">
li {
cursor: pointer;
}
</style>
</head>
<body>
<ul>
<li>hide动画</li>
<li>fadeOut动画</li>
<li>slideUp动画</li>
<li>animate自定义动画</li>
</ul>
<script type="text/javascript" src="./lib/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
$(function () {
//hide动画
$('li:first-child').click(e => {
$(e.target).hide(1000,'linear',() => {
console.log('hide动画执行完毕');
});
});
//fadeOut动画
$('li:nth-child(2)').click(e => {
$(e.target).fadeOut(1000,() => {
console.log('fadeOut动画执行完毕');
});
});
//slideUp动画
$('li:nth-child(3)').click(e => {
$(e.target).slideUp(1000,() => {
console.log('slideUp动画执行完毕');
});
});
//animate自定义动画
$('li:last-child').click(e => {
$(e.target).animate({
"font-size": "36px",
"height": "150px"
},1000,() => {
console.log('animate自定义动画执行完毕');
});
});
});
</script>
</body>
</html>