前端 -- jQuery
11.4 Jquery
jQuery的优势
-
js代码对浏览器的兼容性更好
-
隐式循环
-
链式操作
jQuery是什么? -- 高度封装了js代码块的模块,封装了dom节点,封装了操作dom节点的简便方法
$: 就是jQuery的简写.
jQuery对象和DOM对象的互相转换
jQuery封装了DOM
DOM转换成jQuery : jQuery(DOM对象) / $(DOM对象)
jQuery转成DOM : jQuery对象[index]
</ jQuery对象转换成了 DOM 对象之后,可以直接调用 DOM 提供的一些功能
11.4.1 jQuery选择器
1. 基础选择器
| 代码 | 解释 |
|---|---|
| $("#id") | id选择器 |
| $("tagName") | 标签选择器 |
| $(".className") | 类选择器 |
| $("*") | 通用选择器 |
| $("div.className") | 交集选择器(含有className的div标签 |
| $("#id, .className, tagName") | 并集选择器 |
2. 层级选择器
| 代码 | 解释 |
|---|---|
| $("div li") | 后代选择器,div下面的所有li标签 |
| $("div>ul>li") | 子代选择器,div下面的ul标签里的所有里标签 |
| $(".xxx+li") | 毗邻选择器,有类名xxx标签的下一个li标签 |
| $(".xxx~li") | 弟弟选择器,有类名xxx标签的下面的所有li标签 |
3. 属性选择器
| 代码 | 解释 |
|---|---|
| $('[属性名]') | 含有某属性的标签 |
| $('xxx[属性名]') | 含有某属性的xxx标签 |
| $('选择器[属性名]') | 符合选择器且含有某属性的标签 |
| $('选择器[属性名='xxx']') | 符合选择器且某属性值='xxx'的标签 |
| $('选择器[属性名$='xxx']') | 符合选择器且某属性值以xxx结尾的标签 |
| $('选择器[属性名^='xxx']') | 符合选择器且某属性值以xxx开头的标签 |
| $('选择器[属性名*='xxx']') | 符合选择器且某属性值包含xxx的标签 |
| $('选择器[属性名1] [属性名2='xxx']') | 符合选择器且拥有属性1和属性2,且属性2的值为xxx的标签 |
11.4.2 jQuery筛选器
1. 基础筛选器
| 代码 | 解释 |
|---|---|
| $('选择器:筛选器') | 作用域选择器选择出来的结果 |
| $('选择器:first') | 找第一个的标签 |
| $('选择器:last') | 找最后一个的标签 |
| $('选择器:eq(index)') | 通过索引找的标签 |
| $('选择器:even') | 找偶数索引的标签 |
| $('选择器:odd') | 找奇数索引的标签 |
| $('选择器:gt(index)') | 找大于索引的标签 |
| $('选择器:lt(index)') | 找小于索引的标签 |
| $('选择器:not(选择器)') | 找没有某选择器的标签 |
| $('选择器:has(标签)') | 找含有xxx标签的的标签 |
2. 表单筛选器
type筛选器
| 代码 | 解释 |
|---|---|
| $(':text') | 找type属性值为text的标签(文本框) |
| $(':password') | 找type属性值为password的标签(密码框) |
| $(':radio') | 找type属性值为radio的标签(单选框) |
| $(':checkbox') | 找type属性值为checkbox的标签(多选框) |
| $(':file') | 找type属性值为file的标签(文件选择框) |
| $(':submit') | 找type属性值为submit的标签(提交按钮框) |
| $(':reset') | 找type属性值为reset的标签(重置按钮框) |
| $(':button') | 找type属性值为button的标签(普通按钮框) |
<!-- date , type的input是找不到的 -->
状态筛选器
enabled //可选择的 disabled //不可选择 checked //默认选择 selected //默认选择 $(':disabled') jQuery.fn.init [input, prevObject: jQuery.fn.init(1)] $(':enabled') jQuery.fn.init(15) [input, input, input, input, input, input, input, input, input, input, input, select, option, option, option, prevObject: jQuery.fn.init(1)] $(':checked') jQuery.fn.init(4) [input, input, input, option, prevObject: jQuery.fn.init(1)] $(':selected') $(':checkbox:checked') jQuery.fn.init(2) [input, input, prevObject: jQuery.fn.init(1)] $('input:checkbox:checked') jQuery.fn.init(2) [input, input, prevObject: jQuery.fn.init(1)]
11.4.3 jQuery筛选器方法
| 代码 | 解释 |
|---|---|
| $('ul p').siblings() | 找兄弟 |
| $('ul p').prev() / next() / parent() | 找上一个哥哥 / 弟弟 / 祖宗 |
| $('ul p').prevAll() / nextAll() / parents() | 找所有哥哥 / 弟弟 / 祖宗 |
| $('ul p').prevUntil('选择器') / nextUntil('选择器') parentsUnitil('选择器') | 找哥哥 / 弟弟 / 祖宗到某一个地方就停止 |
| $('ul').children() | 找儿子 |
// 筛选方法
first()
last()
eq(index)
not('选择器') 去掉满足选择器条件的
filter('选择器')交集选择器,在所有的结果中继续找满足选择器要求的
find('选择器') 后代选择器,找所有结果中符合选择器要求的后代
has('选择器') 通过后代关系找当代
<!-- 注意:内容补充 -->
// 不要用for(i in li_list){}的方式循环一个jq对象,每个对象会封装方法 for(let i=0;i<li_list.length;i++){ //let 声明的变量的作用域只在for循环中 console.log(i) }
11.4.5 事件绑定
为button按钮绑定单击事件,单机按钮弹出警告框 $('button').click( function () { alert('别点我啊') } )
11.4.6 标签的文本操作
$('li:first').text() //获取第一个列表的文本内容
$('li:first').text('小白') //将第一个列表的文本值改为小白
$('li:last').html() //获取最后一个列表的内容
$('li:last').html('大白') //将最后一个列表的内容改为xxx
$('li:first').html('<a href="https://www.baidu.com">百度一下</ a>') // 设置a标签属性
var a = document.createElement('a')
a.innerText = 'AD钙'
$('li:last').html(a) // a 是dom对象
var a2 = document.createElement('a')
var jqobj = $(a2)
jqobj.text('旺仔')
$('li:last').html(jqobj) // jqobj是jquery对象
</ html可以接受 标签,dom对象,jq对象
11.4.7 标签的操作
1. 增加
父子关系: (父).append(子) //给父级的最后添加一个子 (子).appendTo(父) //将子添加到父级的最后 (父).prepend(子) //给父级的最前添加一个子 (子).prependTo(父) //将子添加到父级的最前 兄弟关系: 参考点.before(插入内容) //在参考点之前插入内容 $(插入内容).insertBefore(参考点) //将内容插入在参考点之前 参考点.after(插入内容) //在参考点之后插入内容 $(插入内容).insertAfter(参考点) //将内容插入在参考点之前 </ 如果被添加的标签原本就在文档树中,就相当于移动,参考点可以是标签,id,class等
2. 删除
remove / detach / empty var obj = $('button').remove() //删除标签和事件,被删除的对象做返回值,将对象重新添加回去,有标签但没有事件 var obj = $('button').detach() //删除标签保留事件,被删掉的对象做返回值,将对象重新添加回去,有标签也有事件 $('ul').empty() //清空ul里面的li标签,ul标签仍保留(清空内部内容,保留本身)
3. 修改
$('li').replaceWith(p) //用p对象内容替换所有的li标签
$(p).replaceAll('li') //将所有的li标签替换成p对象内容
4. 复制
var btn = $(this).clone() //克隆标签但不能克隆事件 var btn = $(this).clone(true) //克隆标签和事件 $('button').click( function () { var btn = $(this).clone(true); $(this).after(btn); } )
11.4.8 标签的属性操作
1. 通用属性
attr 获取属性的值 $('a').attr('href') 设置/修改属性的值 $('a').attr('href','http://www.baidu.com') 设置多个属性值 $('a').attr({'href':'http://www.baidu.com','title':'baidu'}) removeAttr $('a').removeAttr('title') //删除title属性 # 如果一个标签只有true和false两种情况,适合用prop处理 $('input').prop('checked'); //查看是否有某属性,返回true或false $('input').prop('checked',false); //取消全部选择 $('input').prop('checked',true); //全部选择
2. 类的操作
添加类 addClass $('div').addClass('red') //添加一个类 $('div').addClass('red bigger') //添加多个类 删除类 removeClass $('div').removeClass('bigger') //删除一个类 $('div').removeClass('red bigger') //删除多个类 转换类 toggleClass //有就删除,没有就添加 $('div').toggleClass('red') $('div').toggleClass('red bigger')
3. 值的操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../jQuery3.4.1.js"></script>
</head>
<body>
<input type="text">
<input type="password">
<input type="radio" name="sex" value="1" checked>男
<input type="radio" name="sex" value="2">女
<input type="checkbox" name="hobby" value="1" checked>足球
<input type="checkbox" name="hobby" value="2">音乐
<input type="checkbox" name="hobby" value="3">游戏
<input type="checkbox" name="hobby" value="4">电影
<select name="city" id="">
<option value="1">北京</option>
<option value="2">上海</option>
<option value="3">天津</option>
<option value="4">山东</option>
<option value="5">河南</option>
</select>
</body>
<script>
$(':text').val() //查看值
$(':text').val('123456'); //设置value值为xxx
$(':password').val('456456');//设置value值为xxx
$(':radio').val([2]); //选择value值为2的选择
$(':checkbox').val([1,3]); //选择value值为1,3的选项
$('select').val([5]) //选择value值为5的城市
</script>
</html>
# 对于选择框 : 单选,多选,下拉选择 -- 设置选中的值需要放在数组中.
11.4.9 css样式
$('div').css('background-color','red') //设置一个样式
$('div').css({'height':'100px','width':'100px'}) //设置多个样式
11.4.10 滚动条
$(window).scrollLeft() //水平滚动条距离左边的距离 $(window).scrollTop() //垂直滚动条距离顶部的距离
11.4.11 盒子模型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
background-color: tomato;
}
</style>
<script src="../jQuery3.4.1.js"></script>
</head>
<body>
<div></div>
</body>
<script>
// $('div').css({'width':'100px','height':'100px'})
$('div').height(100); //设置content高度
$('div').height(); //查看content中content的高度
$('div').width(100); //设置content宽度
$('div').width(); //查看content中content的宽度
$('div').css('padding','20px'); //设置padding距离
$('div').innerHeight(); //查看content+padding的高度
$('div').innerWidth(); //查看content+padding的宽度
$('div').css({'border':'5px','border-style':'solid'}); //设置border的宽度
$('div').outerHeight(); //查看content+padding+border的高度
$('div').outerWidth(); //查看content+padding+border的宽度
$('div').css('margin','10px'); //设置margin的距离
$('div').outerHeight(true); //查看content+padding+border+margin的高度
$('div').outerWidth(true); //查看content+padding+border+margin的宽度
$('div').innerHeight(500) //设置值,改变的是content的高度
</script>
</html>
# 设置值:变得永远是content的值
11.4.12 动画
slied滑动系列 sliedDown : 向下滑动显示 siledUp : 向上滑动隐藏 sliedToggle : down和up交替 # 动画时间用毫秒表示,也可以加回调函数 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .container{ position: relative; float: right; height: 40px; width: 120px; background-color: lightblue; } .box{ position: absolute; height: 100px; width: 300px; background-color: lightcoral; top: 40px; right: 0; display: none; } .car{ position: absolute; width: 120px; line-height: 40px; text-align: center; top: 0; right: 0; } </style> <script src="../jQuery3.4.1.js"></script> </head> <body> <div class="container"> <div class="car">购物车(<span>0</span>)</div> <div class="box"></div> </div> </body> <script> var block = false; $('.car').click( function () { // $('.box').slideToggle(500); if(block){ $('.box').slideUp(500,fn2); //fn1 , fn2 是回调函数 block = false; }else { $('.box').slideDown(500,fn1); block = true; } function fn1() { $('.car').css('color','orange') } function fn2() { $('.car').css('color','black') } } ) </script> </html>
show系列 show : 对角滑动显示 hide : 对角滑动隐藏 toggle : show和hide交替 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../jQuery3.4.1.js"></script> <style> div{ height: 200px; width: 200px; background-color: lawngreen; display: block; } </style> </head> <body> <button>显示</button> <div></div> </body> <script> $('button').click( function () { $('div').stop(); //如果没有stop,连续点击,执行完当前动作,才会执行下一个动作 // $('div').show(1000) //显示 // $('div').hide(1000) //隐藏 $('div').toggle(1000,fn) //交替 } ) function fn() { if($('button').text()==='显示'){ $('button').text('隐藏') }else { $('button').text('显示') } } </script> </html>
11.4.13 事件的绑定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../jQuery3.4.1.js"></script>
</head>
<body>
<button>点击</button>
</body>
<script>
// 方式一
$('button').click({'a':'b'},fn); //可以不传参
function fn(e){
console.log(e.data);
console.log(e.data.a);
console.log('小白')
}
// 方式二
$('button').bind('click',{'a':'b'},fn); //可以不传参
function fn(e) {
console.log(e); //打印事件
console.log(e.data); //打印事件参数
console.log(e.data.a); //打印事件参数的值
console.log('参数')
}
//解除绑定事件
$('button').unbind('click',fn);
</script>
</html>
11.4.14 各种事件
| 事件 | 解释 |
|---|---|
| click(function(){...}) | 单击事件.点击触发 |
| blur(function(){...}) | 失去焦点 |
| focus(function(){...}) | 获得焦点 |
| change(function(){...}) | input框鼠标离开时,内容改变触发 |
| keyup(function(){...}) | 按下键盘触发事件, 获取字符编号: e.keyCode |
| hover(function(){...}) | 鼠标悬浮触发 |
| mouseover / mouseout | 父元素绑定此事件,如果有子元素出入子元素也会触发 |
| mouseenter / mouseleave | 鼠标悬浮触发,鼠标进入 / 离开 |
1. 获得 / 失去焦点
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../jQuery3.4.1.js"></script>
</head>
<body>
<input type="text">
</body>
<script>
$('input').focus(
function () {
console.log('获得焦点')
}
);
$('input').blur(
function () {
console.log('失去焦点')
}
);
$('input').change(
function () {
console.log('内容改变')
}
)
</script>
</html>
2. keyup
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../jQuery3.4.1.js"></script>
<style>
.mask{
position: absolute;
background-color: rgba(255,255,0,0.3);
width: 100%;
height: 100%;
top: 0;
left: 0;
}
.tk{
position: absolute;
width: 400px;
height: 300px;
background-color: lightblue;
top: 50%;
left: 50%;
margin-left: -200px;
margin-top: -150px;
}
</style>
</head>
<body>
<input type="text">
<h1>那女孩对我说,说我保护她的梦</h1>
<div class="mask">
<div class="tk"></div>
</div>
</body>
<script>
// $('input').keyup(
// function (e) {
// console.log(e.keyCode) //keyCode:字符的ASCLL编号
// }
// )
$(window).keyup(
function (e) {
if(e.keyCode===27){
$('.mask').css('display','none')
}
}
)
</script>
</html>
3. mouseenter / leave
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.container{
position: relative;
float: right;
height: 40px;
width: 120px;
background-color: lightblue;
}
.box{
position: absolute;
height: 100px;
width: 300px;
background-color: lightcoral;
top: 40px;
right: 0;
display: none;
}
.car{
position: absolute;
width: 120px;
line-height: 40px;
text-align: center;
top: 0;
right: 0;
}
</style>
<script src="../jQuery3.4.1.js"></script>
</head>
<body>
<div class="container">
<div class="car">购物车(<span>0</span>)</div>
<div class="box"></div>
</div>
</body>
<script>
$('.container').mouseenter( //鼠标悬浮触发
function () {
$('.box').stop();
$('.box').slideDown(500);
}
);
$('.container') .mouseleave(
function () {
$('.box').stop();
$('.box').slideUp(500);
}
)
$('.container').hover( //鼠标悬浮触发,上面两个结合
function(){
$('.box').stop();
$('.box').toggle(500);
}
)
</script>
</html>
4. mouseover / out
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../jQuery3.4.1.js"></script>
<style>
.out{
width: 500px;
height: 500px;
background-color: lightpink;
}
.inner{
position: absolute;
width: 200px;
height: 200px;
left: 150px;
top: 150px;
background-color: purple;
}
</style>
</head>
<body>
<div class="out">
<div class="inner"></div>
</div>
</body>
<script>
$('.out').mouseover( //进入父元素打印,进入子元素打印
function () {
console.log('enter')
}
);
$('.out').mouseout( //出来父元素打印,出来子元素打印
function () {
console.log('out')
}
)
</script>
</html>
11.4.15 事件冒泡
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.out{
width: 500px;
height: 500px;
background-color: lightpink;
}
.inner{
position: absolute;
width: 200px;
height: 200px;
left: 150px;
top: 150px;
background-color: purple;
}
</style>
<script src="../jQuery3.4.1.js"></script>
</head>
<body>
<div class="out">
<div class="inner"></div>
</div>
</body>
<script>
$('.out').click(
function () {
alert('out')
}
);
$('.inner').click( //点击子元素的同时,也相当于点击了父元素
function (e) {
alert('inner');
return false //阻止事件冒泡1
// e.stopPropagation() //阻止事件冒泡2
}
)
</script>
</html>
11.4.16 事件委托
# 后来添加的标签,可以拥有之前绑定的事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../jQuery3.4.1.js"></script> </head> <body> <div> <button>点击1</button> </div> </body> <script> $('div').on('click','button',function () { alert('点我干嘛') }); var btn = document.createElement('button'); $(btn).text('点击2').appendTo('div') </script> </html>
11.4.17 页面加载
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../jQuery3.4.1.js"></script>
<script>
window.onload = function(){ //window.onload要等到所有的文档 音视频都加在完毕才触发.
$('button').click( //window.onload 只能绑定一次.多次绑定,只有最后一次生效
function () {
alert('点我干嘛')
}
)
};
window.onload = function(){
alert('点我干嘛')
};
$(document).ready( //jQuery的方式,只等待文档加载完毕之后就可以执行
function () { //在同一个html页面上可以多次使用
$('button').click(
function () {
alert('别点我')
}
)
}
);
$(document).ready(
function () {
alert('别点了')
}
);
//jQuery的简写方式
$(function () {
$('button').click(
function () {
alert('就这样吧')
})
})
</script>
</head>
<body>
<button>点击</button>
</body>
<!--<script>-->
<!-- $('button').click(-->
<!-- function () {-->
<!-- alert('点我干嘛')-->
<!-- }-->
<!-- )-->
<!--</script>-->
</html>
11.4.18 each
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../jQuery3.4.1.js"></script>
</head>
<body>
<ul>
<li>那女孩对我说</li>
<li>请先说你好</li>
<li>明天,你好</li>
</ul>
</body>
<script>
$('li').each(
function (index,val) { //主动传index:每一项的索引,val:每一项的标签对象
console.log(index,val)
}
)
</script>
</html>
浙公网安备 33010602011771号