jQuery
1. jQuery 概述
1.1 jQuery 概念
jQuery 是一个快速、简洁的 JavaScript 库,其设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。
j 就是 JavaScript; Query 查询; 意思就是查询js,把js中的DOM操作做了封装,我们可以快速的查询使用里面的功能。
jQuery 封装了 JavaScript 常用的功能代码,优化了 DOM 操作、事件处理、动画设计和 Ajax 交互。
学习jQuery本质: 就是学习调用这些函数(方法)。\njQuery 出现的目的是加快前端人员的开发速度,我们可以非常方便的调用和使用它,从而提高开发效率。
1.2 jQuery 的优点
- 轻量级。核心文件才几十kb,不会影响页面加载速度
- 跨浏览器兼容。基本兼容了现在主流的浏览器
- 链式编程、隐式迭代
- 对事件、样式、动画支持,大大简化了DOM
- 操作支持插件扩展开发。有着丰富的第三方的插件,例如:树形菜单、日期控件、轮播图等
- 免费、开源
- jQuery 的下载地址
官网地址: https://jquery.com/
1.3 jQuery 的入口函数
$(function()){...}
此处是页面DOM加载完成的入口$(document).ready(function(){...})
(1)等着 DOM 结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完成,jQuery 帮我们完成了封装。
(2)相当于原生 js 中的 DOMContentLoaded。
(3)不同于原生 js 中的 load 事件是等页面文档、外部的 js 文件、css文件、图片加载完毕才执行内部代码。
(4)更推荐使用第一种方式。
1.4 jQuery 顶级对象
- $ 是 jQuery 的别称,在代码中可以使用 jQuery 代替 $,但一般为了方便,通常都直接使用 $ 。
- $ 是jQuery 的顶级对象, 相当于原生JavaScript中的 window。把元素利用$包装成jQuery对象,就可以调用jQuery 的方法。
jQuery(function() {
// alert(11)
// $('div').hide();
jQuery('div').hide();
});
1.5 jQuery 对象和 DOM 对象
DOM 对象与 jQuery 对象之间是可以相互转换的
- DOM 对象转换为 jQuery 对象:$(DOM对象)
$(div)
- jQuery 对象转换为 DOM 对象(两种方式)
$('div')[index]
index是索引号$('div').get[index]
index是索引号
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="jquery.min.js"></script>
</head>
<body>
<video src="mov.mp4" muted></video>
<script>
// 1. DOM对象转换为 jQuery对象
// (1) 我们直接获取视频,得到就是jQuery对象
// $('video');
// (2) 我们已经使用原生js 获取过来 DOM对象
var myvideo = document.querySelector('video');
// $(myvideo).play(); jquery里面没有play 这个方法
// 2. jQuery对象转换为DOM对象
// myvideo.play();
$('video')[0].play()
$('video').get(0).play()
</script>
</body>
</html>
jQuery常用API
2.1 jQuery 选择器
2.1.1 jQuery 基础选择器
名称 | 用法 |
---|---|
ID选择器 | $(“id”) |
全选选择器 | $(“*”) |
类选择器 | $(“.class”) |
标签选择器 | $(‘div’) |
并集选择器 | $(“div,p,li”) |
交集选择器 | $(“li.current”) |
2.1.2 jQuery层级选择器
名称 | 用法/描述 |
---|---|
子代选择器 | $(“ul>li”) 使用>号, 获取亲儿子层级的元素,注意,并不会获取孙子层级的元素 |
后代选择器 | $(“ul li”) 使用空格,获取url下的所有li元素,包括孙子等 |
2.1.3 jQuery 设置样式
$('div').css('属性','值')
2.1.4 jQuery隐式迭代(重要)
遍历内部 DOM 元素(伪数组形式存储)的过程就叫做隐式迭代。
简单理解:给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作,方便我们调用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="jquery.min.js"></script>
</head>
<body>
<div>惊喜不,意外不</div>
<div>惊喜不,意外不</div>
<div>惊喜不,意外不</div>
<div>惊喜不,意外不</div>
<ul>
<li>相同的操作</li>
<li>相同的操作</li>
<li>相同的操作</li>
</ul>
<script>
// 1. 获取四个div元素
console.log($("div"));
// 2. 给四个div设置背景颜色为粉色 jquery对象不能使用style
$("div").css("background", "pink");
// 3. 隐式迭代就是把匹配的所有元素内部进行遍历循环,给每一个元素添加css这个方法
$("ul li").css("color", "red");
</script>
</body>
</html>
2.1.5 jQuery 筛选选择器()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="jquery.min.js"></script>
</head>
<body>
<div>惊喜不,意外不</div>
<div>惊喜不,意外不</div>
<div>惊喜不,意外不</div>
<div>惊喜不,意外不</div>
<ul>
<li>相同的操作</li>
<li>相同的操作</li>
<li>相同的操作</li>
</ul>
<script>
// 1. 获取四个div元素
console.log($("div"));
// 2. 给四个div设置背景颜色为粉色 jquery对象不能使用style
$("div").css("background", "pink");
// 3. 隐式迭代就是把匹配的所有元素内部进行遍历循环,给每一个元素添加css这个方法
$("ul li").css("color", "red");
</script>
</body>
</html>
案例:新浪下拉菜单栏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
li {
list-style-type: none;
}
a {
text-decoration: none;
font-size: 14px;
}
.nav {
margin: 100px;
}
.nav>li {
position: relative;
float: left;
width: 80px;
height: 41px;
text-align: center;
}
.nav li a {
display: block;
width: 100%;
height: 100%;
line-height: 41px;
color: #333;
}
.nav>li>a:hover {
background-color: #eee;
}
.nav ul {
display: none;
position: absolute;
top: 41px;
left: 0;
width: 100%;
border-left: 1px solid #FECC5B;
border-right: 1px solid #FECC5B;
}
.nav ul li {
border-bottom: 1px solid #FECC5B;
}
.nav ul li a:hover {
background-color: #FFF5DA;
}
</style>
<script src="jquery.min.js"></script>
</head>
<body>
<ul class="nav">
<li>
< a href=" ">微博</ a>
<ul>
<li>
< a href="">私信</ a>
</li>
<li>
< a href="">评论</ a>
</li>
<li>
< a href="">@我</ a>
</li>
</ul>
</li>
<li>
< a href="#">微博</ a>
<ul>
<li>
< a href="">私信</ a>
</li>
<li>
< a href="">评论</ a>
</li>
<li>
< a href="">@我</ a>
</li>
</ul>
</li>
<li>
< a href="#">微博</ a>
<ul>
<li>
< a href="">私信</ a>
</li>
<li>
< a href="">评论</ a>
</li>
<li>
< a href="">@我</ a>
</li>
</ul>
</li>
<li>
< a href="#">微博</ a>
<ul>
<li>
< a href="">私信</ a>
</li>
<li>
< a href="">评论</ a>
</li>
<li>
< a href="">@我</ a>
</li>
</ul>
</li>
</ul>
<script>
$(function() {
// 鼠标经过
$(".nav>li").mouseover(function() {
// $(this) jQuery 当前元素 this不要加引号
// show() 显示元素 hide() 隐藏元素
$(this).children("ul").show();
});
// 鼠标离开
$(".nav>li").mouseout(function() {
$(this).children("ul").hide();
})
})
</script>
</body>
</html>
2.1.7 jQuery排他思想
想要多选一的效果,排他思想:当前元素设置样式,其余的兄弟元素清除样式。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="jquery.min.js"></script>
</head>
<body>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<script>
$(function () {
// 1. 隐式迭代 给所有的按钮都绑定了点击事件
$("button").click(function () {
// 2. 当前的元素变化背景颜色
$(this).css("background", "pink");
// 3. 其余的兄弟去掉背景颜色 隐式迭代
$(this).siblings("button").css("background", "");
});
})
</script>
</body>
</html>
案例:淘宝服饰精品案例
案例分析:
- 核心原理:鼠标经过左侧盒子某个小li,就让内容区盒子相对应图片显示,其余的图片隐藏。
- 需要得到当前小li 的索引号,就可以显示对应索引号的图片
- jQuery 得到当前元素索引号 $(this).index()\n中间对应的图片,可以通过 eq(index) 方法去选择
- 显示元素 show() 隐藏元素 hide()
<!DOCTYPE html>
<html lang="en">
<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>
<style>
*{
margin: 0;
padding: 0;
font-size: 12px;
}
ul {
list-style: none;
}
a {
text-decoration: none;
}
.wrapper {
width: 250px;
height: 248px;
margin: 100px auto 0;
border: 1px solid pink;
border-right: 0;
overflow: hidden;
}
#left,
#content {
float: left;
}
#left li a {
display: block;
width: 48px;
height: 27px;
border-bottom: 1px solid pink;
line-height: 27px;
text-align: center;
color: black;
}
#left li a:hover {
background-color: red;
}
#content {
border-left: 1px solid pink;
border-right: 1px solid pink;
}
</style>
<script src="jquery.min.js"></script>
<script>
$(function(){
//1.鼠标经过(mouseover)id是left的盒子里面的li
$('#left li').mouseover(function(){
//2.得到当前对应的li的索引号 $(this).index()
var index = $(this).index();
//3.显示 show() id是content的盒子里面对应的索引号的div
$('#content div').eq(index).show();
//4.隐藏 hide() 其他id是content的盒子里面的div
$('#content div').eq(index).siblings('div').hide();
});
});
</script>
</head>
<body>
<div class="wrapper">
<ul id="left">
<li><a href="#">女靴</a></li>
<li><a href="#">雪地靴</a></li>
<li><a href="#">冬裙</a></li>
<li><a href="#">呢大衣</a></li>
<li><a href="#">毛衣</a></li>
<li><a href="#">棉服</a></li>
<li><a href="#">女裤</a></li>
<li><a href="#">羽绒服</a></li>
<li><a href="#">牛仔裤</a></li>
</ul>
<div id="content">
<div>
<a href="#"><img src="images/1.jpeg" width="200" height="250"/></a>
</div>
<div>
<a href="#"><img src="images/2.jpeg" width="200" height="250"/></a>
</div>
<div>
<a href="#"><img src="images/3.jpeg" width="200" height="250"/></a>
</div>
<div>
<a href="#"><img src="images/4.jpg" width="200" height="250"/></a>
</div>
<div>
<a href="#"><img src="images/5.jpg" width="200" height="250"/></a>
</div>
<div>
<a href="#"><img src="images/6.jpeg" width="200" height="250"/></a>
</div>
<div>
<a href="#"><img src="images/7.jpg" width="200" height="250"/></a>
</div>
<div>
<a href="#"><img src="images/8.jpg" width="200" height="250"/></a>
</div>
<div>
<a href="#"><img src="images/9.jpeg" width="200" height="250"/></a>
</div>
</div>
</div>
</body>
</html>
2.1.8 链式编程
$(this).css('color', 'red').sibling().css('color', '');
使用链式编程一定注意是哪个对象执行样式.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="jquery.min.js"></script>
</head>
<body>
woshi body 的文字
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<button>快速</button>
<script>
$(function () {
// 1. 隐式迭代 给所有的按钮都绑定了点击事件
$("button").click(function () {
// 2. 让当前元素颜色变为红色
$(this).css("color", "red");
// 3. 让其余的姐妹元素不变色
$(this).siblings().css("color", "");
// 链式编程
$(this).css("color", "red").siblings().css("color", "");
// 我的颜色为红色, 我的兄弟的颜色为空
// $(this).siblings().css('color', 'red');
// 我的兄弟变为红色 ,我本身不变颜色
$(this).siblings().parent().css('color', 'blue');
// 最后是给我的兄弟的爸爸 body 变化颜色
});
})
</script>
</body>
</html>