一. jQuery介绍
1 什么是jQuery
jQuery是一个JavaScript函数库 ,可以处理兼容性问题,方便操作DOM
在早期的时候, 浏览器有很多不同的版本, 如果要做各种浏览器兼容是很头疼的事.
jQuery的出现解决了这个问题, 处理了兼容问题, 并提供了一系列简洁的, 统一的操作DOM的方式
jQuery的口号是”write less, do more”
2 jQuery包含哪些功能
jQuery库包含以下功能:
- HTML 元素选取
- HTML 元素操作
- CSS 操作
- HTML 事件函数
- JavaScript 特效和动画
- HTML DOM 遍历和修改
- AJAX
二. jQuery快速上手
1 jQuery的安装
jQuery的安装只需要引入jQuery的js文件即可, 常用的获取jquery.js文件的方式:
从 jquery.com 下载 jQuery 库
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 本地引入 -->
<script src="./jquery.min.js"></script>
</head>
从 CDN 中载入 jQuery, 如从 jsDelivr 中加载 jQuery
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 网络引入 推荐-->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
</head>
这里, 更推荐大家使用CDN的方式引入
推荐的CDN公共资源网站
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
更多公共资源CDN可以参考: [菜鸟驿站-jQuery安装]
2 jQuery语法
jQuery最主要的作用就是操作DOM
步骤:
- 选择DOM元素
- 执行操作(事件, 属性, 效果…)
语法
$('选择器').action
示例
<script>
//1. $是jQuery的别名
//2. $也是jquery的顶级对象,后面所有的操作都是以$开头,因为jquery里面都是方法,方法是由对象调用($对象调用)
//3. 使用$,可以使我们的书写更加简洁
jQuery(function(){
jQuery('div').hide(3000)
})
</script>
<div>慢慢的你就看不见我了....</div>
3 入口函数
当DOM元素加载完成后执行. 不用等所有内容(包括图片, css)加载完成
示例
$(function(){
// 执行代码
})
4 DOM对象与jQuery对象
dom对象和jquery对象区别
**dom对象是通过原生的js获取过来的.本质是操作元素的属性,不能调用jquery方法**<br />** jquery对象通过jquery方法获取过来的,本质是调用方法,不能使用dom的属性来操作元素**
DOM对象是通过原生的DOM API得到的对象
jQuery对象是通过$()得到的对象
两者可以使用方法不一样
<div>中国移动</div>
<script>
//原生js对象 DOM对象 : 就是通过原生的js获取过来的对象
var div = document.querySelector('div')
console.log(div);
//jquery对象 用jquery的方法获取过来的对象,
var jqDiv = $('div')//本质:利用$对dom对象包装后产生的对象
console.log(jqDiv);//S.fn.init 以伪数组的方式来存储的
//dom对象只能使用原生js的方法,jquery对象也只能使用jquery对象得到方法
//div.style.display='none'
//div.hide(3000) dom对象不能调用jquery方法
//jqDiv.style.display='none'//jquery对象不能使用dom的属性
//结论:dom对象本质是修改元素的属性 jquery本质是在调用方法,不能混着使用
</script>
dom对象和jquery对象的互转
**dom对象 ->jquery对象 jquery(dom对象)**<br />** jquery对象 -> dom对象 jquery对象[0] 或者 jquery对象.get(0)**
<div>中国移动</div>
<script>
//1,dom对象转成jquery对象 $(dom对象)
var divDOM = document.querySelector('div')
//$(divDOM).hide(3000)
//2,jquery对象转成dom对象 jquery对象[0] 或者 jquery对象.get(0)
var jqDiv = $('div')
console.log(jqDiv);//jquery对象
console.log(jqDiv[0]);//dom对象
//jqDiv[0].style.display='none'
console.log(jqDiv.get(0));//dom对象
jqDiv.get(0).style.display='none'
</script>
<button>唐伯虎</button>
<script>
/* 格式
jq对象.事件名称(匿名函数) 事件触发之后要做的操作都写在匿名函数中
*/
$('button').click(function(){
//alert('秋香')
console.log(this);//注意 在jquery事件内部this代表的是dom对象,不是jquery对象
})
//鼠标移入事件
$('button').mouseover(function(){
console.log(111);
})
</script>
三. jQuery选择器
类似于CSS选择器, jQuery提供丰富的选择器, 可以快速准确的选出DOM元素.
1.选择器和筛选选择器
基本选择器<br /> #id值<br /> .class类名<br /> 元素名<br /> 复合选择器<br /> 并集选择器 a,b<br /> 交集选择器 a.b<br /> 后代选择器 a b<br /> 子选择器 a>b<br /> 筛选选择器<br /> :first<br /> :last<br /> :odd<br /> :even
ID选择器 | $(‘#id’) | 获取指定ID的元素 |
---|---|---|
类选择器 | $(‘.class’) | 获取一类class的元素 |
标签选择器 | $(‘div’) | 获取所有div元素 |
名称 | 用法 | 描述 |
后代选择器 | $(‘ul li’) | 获取ul下所有的li元素 |
:first | $(‘li:first’) | 获取第一个li元素 |
eq(index) | $(‘li:eq(2)’) | 获取索引号为2的元素, 从0开始 |
find(selector) | $(‘ul’).find(‘li’) | 在ul下找所有的li元素 |
eq(index) | $(‘li’).eq(2) | 相当于$(‘li:eq(2)’) |
siblings(selector) | $(this).siblings() | 选择自己的兄弟元素, 不包括自己 |
属性选择器 | $(“a[target=’_blank’]”) | target 属性值等于 “_blank” 的 a元素 |
基本和后代选择器:
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
</head>
<body>
<div>我是 div</div>
<div class="nav">我是 nav div</div>
<ol>
<li>我是ol下的li</li>
<li>我是ol下的li</li>
<li>我是ol下的li</li>
<li>我是ol下的li</li>
</ol>
<script>
//只选择第二个div
$('.nav').css('background','red')
//选择ol下面的li
//这里面其实隐含了一个隐式迭代
//隐式迭代就是把匹配的所有元素进行遍历,然后给每个元素都添加css这个方法
$('ol li').css('background','red')
console.log($('ol li'));//这个获取的是伪数组,里面有4个元素
//让前面两个div都变成粉红色
$('div').css('backgroundColor','pink')
</script>
筛选选择器:
<ol>
<li>我是ol下面的li</li>
<li>我是ol下面的li</li>
<li>我是ol下面的li</li>
<li>我是ol下面的li</li>
<li>我是ol下面的li</li>
</ol>
<ul>
<li>我是ul下面的li</li>
<li>我是ul下面的li</li>
<li>我是ul下面的li</li>
<li>我是ul下面的li</li>
<li>我是ul下面的li</li>
</ul>
<script>
//选中ol下的第一个li设置成红色
$('ol li:first').css('color','red')
//选中ol下第三个li设置成蓝色
$('ol li:eq(2)').css('color','blue')
//选中ul下奇数的li设置紫色(奇数索引)
$('ul li:odd').css('color','purple')
//选中ul下偶数的li设置成粉红色(偶数索引)
$('ul li:even').css('color','pink')
</script>
2.筛选方法(推荐使用)
jquery自带的筛选方法:
first( ) 第一个
last( ) 最后一个
parent( ) 父元素
children( ) 子元素
find( ) 后代元素
siblings( )其他兄弟元素
如果有筛选方法,优先使用筛选方法
<ol>
<li>我是ol下面的li</li>
<li>我是ol下面的li</li>
<li>我是ol下面的li</li>
<li>我是ol下面的li</li>
<li>我是ol下面的li</li>
</ol>
<ul>
<li>我是ul下面的li</li>
<li>我是ul下面的li</li>
<li>我是ul下面的li</li>
<li>我是ul下面的li</li>
<li>我是ul下面的li</li>
</ul>
<script>
//选中ol下的第一个li设置成红色
//$('ol li:first').css('color','red')
$('ol li').first().css('background','red'); //推荐使用筛选方法来筛选元素
//选中ol下第三个li设置成蓝色
//$('ol li:eq(2)').css('color','blue')
$('ol li').eq(2).css('background','blue'); //推荐使用筛选方法来筛选元素
var index = 2;
$('ol li').eq(index).css('background','pink');//筛选方法传递参数非常方便
</script>
<div class="yeye">
<div class="father">
<div class="son">儿子</div>
</div>
</div>
<div class="nav">
<p>我是外面的p</p>
<div>
<p>我是里面的p</p>
</div>
</div>
<script>
//1.打印son的亲爸爸
console.log($('.son').parent());
//2,打印nav的亲儿子p
//console.log($('.nav>p')); //传统选择器
console.log($('.nav').children('p'));//jquery的筛选方法
//3,打印nav下所有的p
//console.log($('.nav p'));
console.log($('.nav').find('p'));
</script>
<ol>
<li>我是ol下的li</li>
<li>我是ol下的li</li>
<li class="item">我是ol下的li</li>
<li>我是ol下的li</li>
<li>我是ol下的li</li>
</ol>
<div class="current">中国移动</div>
<div>中国联通</div>
<script>
//选中除第三个li以外的其他元素
$('ol .item').siblings('li').css('background','pink')
//判断是否有current类名
console.log($('div').first().hasClass('current'));
console.log($('div').last().hasClass('current'));
</script>
3.选择器_排他思想和链式编程
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<script>
//实现效果,关标点到哪个按钮上面,哪个按钮背景就变成粉红色,其他按钮背景不变
//1,获取按钮对象,添加点击事件
$('button').click(function(){
//this就代表当前点击的按钮
//1.当前按钮背景改成粉红色
$(this).css('background','pink')
//2,其他兄弟按钮背景颜色去掉
$(this).siblings('button').css('background','')
})
</script>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<script>
//实现效果,关标点到哪个按钮上面,哪个按钮背景就变成粉红色,其他按钮背景不变
//1,获取按钮对象,添加点击事件
$('button').click(function(){
//this就代表当前点击的按钮
//1.当前按钮背景改成粉红色
console.log($(this).css('background','pink'))//返回的是当前的对象,后面还可以继续调用方法
console.log($(this));
//2,其他兄弟按钮背景颜色去掉
//$(this).siblings('button').css('background','');
//链式编程
$(this).css('background','pink').siblings('button').css('background','')
})
</script>
四. jQuery事件
1 什么是事件
当用户浏览网页时, 网页上一些可以交互的元素(按钮)对用户操作的反应就是事件.
比如
- 用户点击登录按钮
- 看小说, 漫画时按键盘的左右键进行翻页
2 常见的事件
常见的事件可以分为
- 鼠标事件
- 键盘事件
- 表单事件
窗口事件
<button>唐伯虎</button>
<script>
/* 格式
jq对象.事件名称(匿名函数) 事件触发之后要做的操作都写在匿名函数中
*/
$('button').click(function(){
//alert('秋香')
console.log(this);//注意 在jquery事件内部this代表的是dom对象,不是jquery对象
})
//鼠标移入事件
$('button').mouseover(function(){
console.log(111);
})
</script>
3 jQuery如何处理事件
**jQuery对象.事件名称(匿名函数) **<br /> 事件触发之后要操作的代码都写在匿名函数里面
语法
$("选择器").事件名(function(){
// 事件处理函数
});
示例
$("btn").click(function(){
alert('我被点击了')
});
五. jQuery CSS操作
1 CSS操作
css(属性名) 获取属性名对应的值<br /> css(属性名,值) 设置指定的属性的值
语法
// 设置单个属性
$("选择器").css('属性名', '属性值')
// 设置多个属性
$("选择器").css({
属性名1: 属性值1,
属性名2: 属性值2
})
示例
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
<style>
div{
width: 200px;
height: 200px;
background: pink;
}
</style>
</head>
<body>
<div></div>
<script>
//css()方法只有一个参数,就是获取当前属性的值
console.log($('div').css('width'));
//css()方法有两个参数,就是设置当前属性的值
$('div').css('width','300px')
$('div').css('height','300px')
$('div').css('background','purple')
//还可以使用{}批量设置属性(复合属性名采用驼峰命名法,属性值不是数字要加引号)
$('div').css({
width:400,
height:400,
backgroundColor:'red'
})
</script>
</body>
2 类操作
更多的时候, 我们使用类操作
- 添加一个类样式: addClass
- 删除一个类样式: removeClass
- 切换类样式: toggleClass
示例
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
<style>
div{
width: 200px;
height: 200px;
background: pink;
margin: 100px auto;
transition: all 0.5;
}
.current{
background: red;
transform: rotate(60deg);
}
</style>
</head>
<body>
<div class="current"></div>
<script>
//添加类 addClass
/* $('div').click(function(){
$(this).addClass('current')
}) */
//删除类 removeClass
/* $('div').click(function(){
$(this).removeClass('current')
}) */
//切换类 toggleClass
$('div').click(function(){
$(this).toggleClass('current')
})
</script>
</body>