目录
一、jQuery概述
二、jQuery入门
2-1、官网地址
2-2、使用
2-2-1、导入(建议放在head里面)
2-2-2、使用(直接使用)
三、DOM操作3-1、选择器
3-2、筛选器
3-3、属性操作
3-4、显示内容+样式操作
3-5、元素操作
3-6、元素大小获取
3-7、元素位置
3-8、事件
3-9、事件增强
3-10、ajax
3-10-1、相关方法使用
3-10-2、钩子函数
3-10-3、ajax里面的jsonp
3-11、多库共存+方法扩展
3-12、深浅拷贝
3-13、动画animate,显示隐藏show、hide,淡入淡出fadeIn、fadeOut
一、jQuery概述
jquery是一个前端的js库,它封装了原生的方法以及一些原生的兼容。轻量级的js库。
二、jQuery入门
2-1、官网地址
jquery官网地址:https://jquery.com/
jquery中文网址:https://www.jquery123.com/
2-2、使用
2-2-1、导入(建议放在head里面)
<script src="./js/jquer.min.js"></script>
2-2-2、使用(直接使用)
// jQuery //他是核心的对象 里面的方法都是通过他来调用的
console.log(jQuery('body')); //通过jquery对象来调用获取方法
// 使用$来替代jQuery
console.log($('body'));
三、DOM操作
3-1、选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<ul id="box">
<li>1</li>
<li name='jack'>2</li>
<li class="inner">3</li>
<li>4</li>
</ul>
<script>
// JQuery核心对象,里面的方法都是通过他来调用的
console.log(jQuery('ul'))
// 使用$来代替JQuery
// $获取的是数组还是元素?
console.log($("#box"))//id为box
console.log($(".inner"))
console.log($("li"))
console.log($("ul>li"))
console.log($("li[name='jack']"))//使用 选择器+[属性名=属性值] 获取元素
// 按照使用的时候来决定获取的方式
console.log($("li").length)
Array.from($('li')).forEach(v => {
console.log(v)
});
console.log($('li:first'));//获取第一个li
console.log($('li:last'));//获取最后一个li
console.log($('li:eq(2)'));//获取下标为2的li元素
console.log($('li:odd'));//获取奇数下标
console.log($('li:even'));//获取偶数下标
</script>
</body>
</html>
3-2、筛选器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<ul>
<li class="active">1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li class="foot">5</li>
<li class="foot"><a href="#">6</a></li>
</ul>
<script>
console.log($('li').first());//获取li第一个
console.log($('li').last())//获取li最后一个
console.log($('li:eq(2)').prev());//获取li下标为2的上一个
console.log($('li:eq(2)').prev('.active'));//获取li下标为2的,并且是“.active”的上一个
console.log($('li:eq(2)').next());//获取li下标为2的下一个
console.log($('li:eq(2)').next('.foot'));//获取li下标为2的,并且是“.active”的下一个
console.log($('li:eq(2)').prevAll());//获取li下标为2的上面所有
console.log($('li:eq(2)').prevAll('.active'));//获取li下标为2的上面所有为“.active”
console.log($('li:eq(2)').nextAll());//获取li下标为2的下面所有
console.log($('li:eq(2)').nextAll('.foot'));//获取li下标为2的下面所有为“.active”
console.log($('li').parent());//获取li的父元素
console.log($('li').parent("ul"));//获取li的父元素,并且是ul
console.log($('li').parents());//获取li所有的父元素,直到html为止
console.log($('li').parents("body"));//获取li的所有父元素中的body,
console.log($('ul').children());//获取ul的所有子元素(第一级子元素)
console.log($('ul').children(".foot"));//获取ul的所有子元素(第一级子元素)中的.foot
console.log($('li:eq(2)').siblings());//获取li下标为2的所有兄弟元素
console.log($('li:eq(2)').siblings('.foot'));//获取li下标为2的所有兄弟元素中为.foot的元素
console.log($('ul').find('li'));//查找元素,在ul中查找li 返回查找到的所有
console.log($('ul').find('a'));
console.log($('li').eq(3));//相当于$('li:eq(2)')
</script>
</body>
</html>
3-3、属性操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<div id="box"></div>
<script>
// prop 隐式添加属性(添加上去了,但是检查器里面没有,对于原本已经有的属性就是显示添加,设置)
// 传一个参数就是获取,传两个参数就是设置
console.log($('div').prop('id'))
$('div').prop('class','inner')//设置class属性,值为inner
$('div').prop('name','jack')
console.log($('div').prop('name'));
// attr 显示添加属性
console.log($('div').attr('name'));//不能获取隐式添加的内容(本身已经有的属性除外)undefined
console.log($('div').attr('class'));
$('div').attr('age', 18)//设置class属性,值为inner
// 删除
$('div').removeAttr('class')//显示删除
$('div').removeProp('name')//隐式删除
console.log($('div').attr('class'))
console.log($('div').prop('name'))
// 属性操作其他方法
// $('div').addClass() //添加class属性值
// $('div').removeClass() //删除class属性值
// $('div').hasClass()//判断是否存在
// $('div').toggleClass()//对于没有的添加,已有的删除(class开关)
</script>
</body>
</html>
3-4、显示内容+样式操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box{
width: 200px;
height: 200px;
}
</style>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<div class="box">我是div的内容</div>
<div><a href="#">hello</a></div>
<input type="text" value="输入">
<script>
// 不传参就是获取,传参就是设置
// 相当于innerText
console.log($('div').eq(0).text())
$('div').eq(0).text("我修改了")
// 相当于innerHTML
console.log($('div').eq(1).html())
$('div').eq(1).html("<b>world</b>")
// 获取input的value属性
console.log($('input').val())
// $('input').val('hello woeld')
// 样式操作
// 传一个参数为获取,传两个参数未设置 相当于getComputerStyle
console.log($('div').css('width'))
$('.box').css('backgroundColor','red')
</script>
</body>
</html>
3-5、元素操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<div>我是原来的div</div>
<ul>
<li class="save">1</li>
<li>2 <span></span></li>
<li>3</li>
<li>4</li>
</ul>
<p></p>
<script>
//创建元素
let $div = $('<div>1</div>')//创建元素节点
// 添加操作 添加操作不能添加重复的元素
$('body').append($div)//添加到body元素里面内容的后面
$div.appendTo($('body'))//将div添加到body里面
// 往前添加
let $a = $('<a></a>')
$a.attr('href','http://www.baidu.com')//设置href属性
$('body').prepend($a)//body的最前面添加a标签
$a.prependTo($('body'))//将a标签添加在body前面
// after 在。。。之后 before在。。。之前()兄弟节点添加
let $b = $('<b></b>')
$('div').eq(0).after($b)//在div的后面进行添加
$b.insertAfter($('div').eq(0))//将b标签插入到div后面
let $p = $('<p></p>')
$('div').eq(0).before($p)//在div前面进行添加
$p.insertBefore($('div').eq(0))//将p标签插入到div后面
// replace替换 替换所有
let $h = $('<h1>hello</h1>')//将div全部替换成h1标签
$('div').replaceWith($h)//将a标签替换进div标签(div会被删除)
$('<a></a>').replaceAll($('p'))//将a标签替换进div标签(div会被删除)
// // 删
// $('ul').remove()//将对应的内容包括自身全部删除(事件也会被删除)
$('li[class=save]').remove()
// $('li').remove.('.save')
// 删除方法 将里面的所有元素全部删除
// $('li').empty()//将里面的节点全部清空
// 克隆 clone 是否克隆所有的属性 是否克隆事件 默认false(不克隆)
$('body').append($('li').eq(0).clone())
</script>
</body>
</html>
3-6、元素大小获取
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
<style>
div{
width: 300px;
height: 300px;
margin: 50px;
padding: 50px;
border: 10px solid #000;
}
</style>
</head>
<body>
<div></div>
<script>
let div = $('div')
// 使用css获取会带上px,返回的是一个字符串
console.log(div.css("width"))
console.log(div.css("height"))
// width方法,height方法 不包含padding以及margin和border
console.log(div.width())
console.log(div.height())
// innerWidth innerHeight 包含padding 不包含margin 也不包含border
console.log(div.innerWidth())
console.log(div.innerHeight())
// outerWidth outerHeight 包含padding以及border 不包含margin
console.log(div.outerWidth())
console.log(div.outerHeight())
// outerWidth outerHeight有一个参数,表示是否包含margin
console.log(div.outerWidth(true))
console.log(div.outerHeight(true))
</script>
</body>
</html>
3-7、元素位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
<style>
.box2{
width: 300px;
height: 300px;
/* margin: 50px; */
/* padding: 50px; */
border: 10px solid #000;
position: absolute;
top: 100px;
left: 100px;
}
.box1{
position: relative;
left: 50px;
top: 50px;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
<div class="box3"></div>
<script>
let box3 = document.querySelector('.box3')
box3.innerText = '123'
let div = $('.box2')
div.text('123')
// offset 基于body偏移的位置 返回的也是一个对象
console.log(div.offset())
console.log(div.offset().left)
console.log(div.offset().top)
// position 定位 返回基于父元素定位的位置,返回一个对象
console.log(div.position())//基于box1的定位
console.log(div.position().left)
console.log(div.position().top)
</script>
</body>
</html>
3-8、事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<div><button>点我</button></div>
<script>
// 事件类型 事件处理函数
$('button').on('click',data,function(e){
console.log(e)
console.log(e.data)
console.log(this)
})
// 可以在事件发布的时候携带数据 使用e.data接收
$('button').on('click',{name:"jack"},function(e){
e = e || window.event
console.log(e.data)
})
// 事件委托机制
$('div').on('click',function(e){
console.log(this)
console.log(e.target)
console.log($(e.target))
})
// 只有在button情况下click才会触发
$('div').on('click','button',{name:"jack"},function(e){
console.log(this)
console.log(e.data)
console.log(e.target)
})
// 取消事件off
$('div').off()
// 只执行一次的事件
$('button').one('click',function(){
console.log('点击了')
})
// 屏幕滚动栏距离
$(window).on('scroll',function(){
console.log($(window).scrollLeft())
console.log($(window).scrollTop())
})
// 自动执行事件
$('button').trigger('click',{name:"jack"})
</script>
</body>
</html>
3-9、事件增强
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<button>按钮</button>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<script>
let btn = $('button')
btn.click({name:'jack'},function(e){
console.log(e.data)
})
// 不能事件委托
$('ul').click("li",function(e){
console.log(this)//this还是指向ul
})
btn.dblclick(()=>{
console.log('双击了')
})
btn.mouseup(function(){
console.log('弹起')
})
// 相当于添加了移进事件 以及 移出事件
btn.hover(()=>{
console.log("进入了")
},()=>{
console.log('出去了')
})
// js对象转为jq对象 $(js对象) 括起来就是jquery对象
// $(window) $(this)
</script>
</body>
</html>
3-10、ajax
3-10-1、相关方法使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<script>
$.ajax({
url:'https://jsonplaceholder.typicode.com/todos',//请求地址
type:'GET',//请求方式
data:{id:20},//携带数据
dataType:'JSON',//数据类型
async:true,//是否异步
success:function(res){//成功的回调
console.log(res)
},
error:function(err){//错误的回调
console.log(err)
},
complete(){//请求结束的回调
console.log('结束')
}
})
// get(url地址(不能省略),参数对象(可以省略),回调方法(可以省略))
$.get('https://jsonplaceholder.typicode.com/todos',{id:16},function(res){console.log(res)})
$.post('https://jsonplaceholder.typicode.com/todos',{id:16},function(res){console.log(res)})
// https://jsonplaceholder.typicode.com/todos 这个接口是一个rest接口,rest规范里面post是添加操作
$.post("http://useker.cn/login",{uname:'abc',upwd:'123456'},function(res){console.log(res)})
// $.getJSON() //获取JSON格式数据 可以获取地的文件
$.getJSON('https://jsonplaceholder.typicode.com/todos',function(res){console.log(res)})
$.getJSON('./xxxxxx.json',function(res){console.log(res)})
</script>
</body>
</html>
3-10-2、钩子函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<script>
// 钩子函数 自动调用(到达某个部分)
// ajax的全局函数 当ajax到达某个过程自动调用这个方法
$.ajax({
url:'https://jsonplaceholder.typicode.com/todos',
success(res){
console.log(res)
}
})
// 全局的钩子函数
$(window).ajaxStart(function(){
console.log('ajax开始发送')
})
$(window).ajaxSend(function(){
console.log('ajax请求发送')
})
$(window).ajaxStop(function(){
console.log('ajax停止发送')
})
$(window).ajaxSuccess(function(){
console.log('ajax发送成功')
})
$(window).ajaxError(function(){
console.log('ajax请求出错')
})
$(window).ajaxComplete(function(){
console.log('ajax请求完成')
})
</script>
</body>
</html>
3-10-3、ajax里面的jsonp
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<script>
$.ajax({
url:'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',
data:{wd:'游戏'},
dataType:'jsonp',//指定为jsonp返回
jsonp:'cb',//他要接收的函数的键(后台指定的)
jsonpCallback:'fn',//回调函数的名字
success(res){console.log(res)},
timeout:1000//超时时间
})
// 代理
</script>
</body>
</html>
3-11、多库共存+方法扩展
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<div></div>
<script>
// 利用jquery的方法来禁用$
// $('div')
// $.noConflict()//当代码执行到这里,后面的$就不能再使用了
// $('div')
// jQuery('div')
// 同时禁用$以及jquery
// $.noConflict(true)//全部禁用了
// 使用变量来代替$和jQuery
let sss = $.noConflict(true)
console.log(sss('div'))
sss.noConflict(true)//不能禁用了,noConflict只能禁用$和jQuery
console.log(sss('div'))
// 使用jquery里面的extend,相当于继承一个对象,那么jquery就拥有了这个对象的方法 拓展给原型,给$使用
$.extend({max:function(...arg){
let maxIndex = 0
arg.forEach((v,index)=>{
if(arg[maxIndex]<v){
maxIndex = index
}
})
return arg[maxIndex]
}})
$.extend({min:function(...arg){
let minIndex = 0
arg.forEach((v,index)=>{
if(arg[minIndex]>v){
minIndex = index
}
})
return arg[minIndex]
}})
console.log($.max(1,2,3,5,1,5))
console.log($.min(1,1,2,3,5))
// 扩展给元素集 给元素使用
$.fn.extend({
check:function(){
console.log('hello')
}
})
$(window).check()
</script>
</body>
</html>
3-12、深浅拷贝
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
</head>
<body>
<script>
let obj1 = {name:'jack',age:26,likeFoods:['苹果']}
let obj2 = {name:'jack',age:26,likeFoods:['苹果']}
// 浅拷贝
let copy1 = $.extend({},obj1)
console.log(copy1.likeFoods === obj1.likeFoods)//浅拷贝,地址指向同一个,只拷贝第一层的内容
// 深拷贝
let copy2 = $.extend(true,{},obj2)
console.log(copy2.likeFoods==obj2.likeFoods)//深拷贝,里面存的(引用数据类型)地址不是同一个,全部拷贝
</script>
</body>
</html>
3-13、动画animate,显示隐藏show、hide,淡入淡出fadeIn、fadeOut
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
<style>
div{
width: 400px;
height: 600px;
background-color: purple;
display: none;
}
</style>
</head>
<body>
<div></div>
<script>
// show和hide只针对display为none的 显示 隐藏
$('div').show(2000,function(){
console.log('执行ok')
setTimeout(()=>{
$(this).hide(2000,function(){
console.log("hello")
})
},2000)
})
// toggle(执行时间,速度方式,回调函数),如果隐藏就显示,显示就隐藏,速度方式只能是linear(匀速)或者是swing(缓冲)
$('div').toggle(2000,'linear',function(){
setTimeout(()=>{
$(this).toggle(2000,"swing",function(){
console.log("hello")
})
},2000)
})
// 淡入fadeIn淡出fadeOut
$('div').fadeIn(2000,function(){
$('div').fadeOut(2000,function(){
console.log('成功')
})
})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/jquer.min.js"></script>
<style>
div{
width: 400px;
height: 600px;
background-color: purple;
position: absolute;
}
button{
margin-top: 450px;
}
</style>
</head>
<body>
<div></div>
<button>停止</button>
<button>终止</button>
<script>
// animate(对象,执行时间,速度方式,回调函数) 对象里面改变不了backgroundColor没有
$("div").animate({'backgroundColor':'yellow','width':100,'height':250,'left':200},2000,'linear',function(){$(this).animate({left:0},2000,'swing')})
// 停止动画(当前位置停止)
$('button').eq(0).click(()=>{
$('div').stop()
})
// 终止动画(终止为最终状态)
$('button').eq(1).click(()=>{
$('div').finish()
})
</script>
</body>
</html>