笔记来源:拉勾教育 - 大前端就业集训营
文章内容:学习过程中的笔记、感悟、和经验
jQuery常用方法
.html()方法 -- 标签内容
相当于原生js中的innerHTML方法,用来获取或者设置标签内部内容
语法:jq对象.html( '可选参数 ' )
作为方法,内部传递参数和不传递参数会有不同作用
- 不传递参数:获取标签内部内容(包括文本和标签)
- 传递参数:设置标签内容,参数会批量完全替代标签原本的内容,可以添加标签,参考innerHTML
<body>
<div class="box">
<p>123</p>
</div>
<!-- 引入jQuery文件 -->
<script src="./js/jquery.min.js"></script>
<script>
// 不传入参数,可以获取元素内容
l($('.box').html())
// 传递参数,可以修改内容
$('.box').html('456')
</script>
</body>
注意:获取内容时候,只能获取jq对象第一个元元素的内部内容
.text()方法--标签文本
相当于原生的innerText属性,用来获取标签内部的文字内容(仅文本)
语法:jq对象.text( '可选参数 ' )
作为方法,内部传递参数和不传递参数会有不同作用
- 不传递参数:获取标签内部文本内容(可以获取全部内部标签文字内容)
- 传递参数:设置标签文本内容,如果参数包含结构也会被解析成文本,不会解析成标签,参考innerText
<body>
<p>123<span>789</span></p>
<p>123</p>
<p>123</p>
<!-- 引入jQuery文件 -->
<script src="./js/jquery.min.js"></script>
<script>
// 不传入参数,可以获取元素文本内容(忽略标签)
l($('p').text())
// 传递参数,可以修改文本内容(只能修改文本内容,即使传入包含标签也会被解析成文本)
$('p').text('456<p>我是一个标签</p>')
</script>
</body>
.val方法--标签value值
相当于原生js中的value属性,一般用于但标签元素,用来获取或者设置表单元素的内容
语法:jq对象.val( '可选参数 ' )
作为方法,内部传递参数和不传递参数会有不同作用
- 不传递参数:获取表单元素的value值
- 传递参数:设置表单元素value的值
单标签无法使用html和text方法
attr()方法--标签属性
用来设置标签的属性名和属性值
语法:jq对象.attr( 属性名(必填) , 属性值(选填) )
根据arrt第二个参数是否传入,代表着不同的功能:
- 不传入:表示查询指定属性名的属性值
- 传入:设置属性名和对应的属性值
removeAttr()方法--删除标签属性
移除标签指定属性值
语法:removeAttr('属性名')
<body>
<div id="box" class="box">123</div>
<div id="box2" class="box2">345</div>
<!-- 引入jQuery文件 -->
<script src="./js/jquery.min.js"></script>
<script>
// attr()方法
// 查询属性值
l($('#box').attr('class'))
// 修改属性值
$('#box').attr('class', 'box3')
// 查看是否修改
l($('#box').attr('class'))
// 添加一个没有的属性,自定义属性也可以
$('#box').attr('name', 'name')
// removeAttr()方法
// 删除元素现有的属性值
$('#box2').removeAttr('class')
</script>
</body>
prop()方法--标签布尔值属性
针对selrcted、checked、disabled等表单的属性,此类属性属性名和属性值形同,无法通过attr方法直接获取
语法:JQ对象.prop( ' 属性名 ' ,‘属性值-布尔值’)
根据是否传入属性值,porp方法会有不同的作用:
- 不传入:获取相应属性值
- 传入:设置属性和属性的值
这里不写代码了,同attr()方法类似
.css()方法--css样式
用于调用css属性值或者更改css属性值(计算后)
语法:jq对象.css(属性名,属性值)
根据属性值是否传入可有不同的功能:
- 不传入参数:查询属性值
- 传入参数:设置属性值
注意事项:
查询方法返回的是最终加载到页面上的最终值
如果属性值是数字类型的可以直接写成纯数字、不带单位的字符串甚至带+=赋值运算符的字符串都可以
复合属性可使用驼峰命名也可以使用带—的写法
多条属性可以直接把所有属性写成一个对象来合并写在一起
<body>
<div class="box"></div>
<!-- 引入jQuery文件 -->
<script src="./js/jquery.min.js"></script>
<script>
const $box = $('.box')
l($box.css('width')) //200px
// 下面四种写法都可以实现300px的效果(前提是带数字的属性值)
// $box.css('width', '300px')
// $box.css('width', '300')
// $box.css('width', 300)
$box.css('width', '+=100') //使用运算
// 下面两种方法都可以更改属性值,属性名两种写法都可以
// $box.css('background-color', 'skyblue')
$box.css('backgroundColor', 'skyblue')
// 对条属性可以合并书写
$box.css({
'width': 300,
'height': 400,
'background-color': 'yellow'
})
</script>
</body>
添加、删除、切换类名方法
- addClass():向标签上添加类名
- removeClass():删除指定类名(如果参数为空则会删除全部类名)
- toggleClass():切换类名(程序会自行判断是否是否有这个类名,有则删除,无则添加)
注:三种方法正常使用都不会直接影响其他类名
<body>
<!-- 创建三个按钮,一个div -->
<input id="add" type="button" value="添加">
<input id="remove" type="button" value="删除">
<input id="tag" type="button" value="切换">
<div class="box"></div>
<!-- 引入jQuery文件 -->
<script src="./js/jquery.min.js"></script>
<script>
// 获取四个元素
const $add = $('#add')
const $remove = $('#remove')
const $tag = $('#tag')
const $box = $('.box')
// 该三个按钮添加事件
// 添加按钮调用addClass方法,点击添加类名
$add.click(() => $box.addClass('box-b'))
// 添加按钮调用removeClass方法,点击删除类名
$remove.click(() => $box.removeClass('box-b'))
// 添加按钮调用taggleClass方法,点击切换类名
$tag.click(() => $box.toggleClass('box-b'))
</script>
</body>
hasClass()检测类名是否存在
可以判断元素上是否存在特定类名,返回布尔值
语法:jq对象.hasClass()
<body>
<!-- 创建三个按钮,一个div -->
<input id="add" type="button" value="添加">
<input id="remove" type="button" value="删除">
<input id="tag" type="button" value="切换">
<div class="box"></div>
<!-- 引入jQuery文件 -->
<script src="./js/jquery.min.js"></script>
<script>
// 获取四个元素
const $add = $('#add')
const $remove = $('#remove')
const $tag = $('#tag')
const $box = $('.box')
// 该三个按钮添加事件
// 添加按钮调用hasClass方法,判断类名是否存在,如果存在删除类名,如果不存在添加类名
$tag.click(() => {
if ($box.hasClass('box-b')) {
$box.removeClass('box-b')
} else {
$box.addClass('box-b')
}
})
</script>
</body>
JQ常用事件方法
和原生写法类似,不需要添加on,直接在jq对象后面打点调用即可
语法:jq对象.事件名( 事件函数 )
jq新增事件
mouseenter(事件函数)方法:鼠标进入元素mouseleave(事件函数)方法:鼠标离开元素
区别于onmouseover和onmouseout事件,mouseenter()和mouseleave()不会触发事件冒泡,所以使用后者更多
hover(鼠标移上事件函数,鼠标离开事件函数)方法:鼠标移上和鼠标移出的合写方法
<body>
<div class="box"></div>
<script>
const $box = $('.box')
// 使用mouseenter和mouseleave创建鼠标进入和离开事件
// $box.mouseenter(() => console.log('我进来啦'))
// $box.mouseleave(() => console.log('我出来啦'))
// 使用hover把鼠标进入和鼠标离开事件写在一起
$box.hover(() => console.log('我进来啦'), () => console.log('我出来啦'))
</script>
</body>
JQ关系查找方法
$(this)可以指向自己的jq对象,就可以使用jq方法parent():得到自己的父亲级,也是一个jq对象children(可选参数): 得到自己所有子集组成的jq对象,不限标签类型,参数为字符串类型的选择器,可以在子集内部搜小范围查找siblings(可选参数):得到除自己以外同父元素下的所有兄弟元素,得到jq对象,串儿参数可以二次筛选
<body>
<div class="box">
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<h2>3</h2>
<h2>3</h2>
<h2>3</h2>
<h2>3</h2>
</div>
<div class="box">
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
<h2>3</h2>
<h2>3</h2>
<h2>3</h2>
<h2>3</h2>
</div>
<script>
// 获取元素
const $box = $('.box')
//添加点击事件
$box.click(function () {
// 打印自己
l('自己', $(this))
// 打印父亲
l('父亲', $(this).parent())
// 打印子集
l('子集', $(this).children('h2'))
// 打印兄弟
l('兄弟', $(this).siblings())
})
</script>
</body>
链式调用
jq调用任何方法(除了节点关系方法)执行后,方法都会返回jq对象自己,我们可以接着打点调用属性和方法
<body>
<div class="box">
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
</div>
<div class="box">
<p>1</p>
<p>1</p>
<p>1</p>
<p>1</p>
</div>
<script>
const $box = $('.box')
// 案例1:点击一个元素,让他自己变红色,兄弟级变金色。
// $box.click(function () {
// $(this).css('background-color', 'red').siblings().css('background-color', 'yellow')
// })
// 案例2:升级版本,点击一个元素,让他自己变红色,兄弟变金色,他们的父级变粉色,父亲的兄弟变蓝色,父亲的兄弟的子级变黄绿色。
$('p').click(function () {
$(this).css('background-color', 'red')
.siblings().css('background-color', 'yellow')
.parent().css('background-color', 'pink')
.siblings().css('background-color', 'blue')
.children().css('background-color', 'yellowgreen')
})
</script>
</body>
其他关系节点查找
find(可选参数):查找所有后代,如果有参数可以进一步缩小范围next():下一个兄弟元素prev():上一个兄弟元素nextAll(可选参数):后面所有的兄弟元素,参数为字符串类型的选择器,可以更精确查找prevAll(可选参数):前面所有的兄弟元素,参数为字符串类型的选择器,可以更精确查找parents(可选参数):获取包括body在内的全部祖先级,参数为字符串类型的选择器,可以更精确查找
这里不添加代码,可以自行尝试
案例:获取验证码控制按钮
需求:当点击按钮后,按钮禁用,并且倒计时,5秒后才可重新点击
<body>
<!-- 创建一个按钮 -->
<input type="button" value="发送验证码">
<script>
// 获取按钮
const $input = $('input')
// 按钮点击事件
$input.click(function () {
// 计时器
let num = 5
// 点击后按钮修改内容并且禁用
$(this).val(`${num}秒 后重新发送`).prop('disabled', true)
// 创建一个定时器,每秒执行一次修改按钮内容
const timer = setInterval(() => {
num--
$(this).val(`${num}秒 后重新发送`)
}, 1000);
// 创建延时器,5秒后修改内容停止定时器
setTimeout(() => {
$(this).val('重新发送').prop('disabled', false)
clearInterval(timer)
}, 5000)
// 可以把延时器中的代码放到定时器内部,当num=0执行即可
})
</script>
</body>
案例:放大镜切换
需求看案例吧,这里写了html、css和js,图片和源码自己找一下吧,js才是重点
<!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>
<link rel="stylesheet" href="index.css">
</head>
<body>
<!--版心 -->
<div class="w">
<!-- 左侧 -->
<div class="leftBox">
<!-- 上 -->
<div class="top">
<img src="img/m1.jpg">
</div>
<ul>
<li class="active">
<img src="img/s1.jpg" msrc="m1.jpg" bsrc="b1.jpg">
</li>
<li>
<img src="img/s2.jpg" msrc="m2.jpg" bsrc="b2.jpg">
</li>
<li>
<img src="img/s3.jpg" msrc="m3.jpg" bsrc="b3.jpg">
</li>
</ul>
</div>
<!-- 右侧 -->
<div class="rightBox">
<img src="img/b1.jpg" alt="">
</div>
</div>
<script src="lib/jquery-1.12.4.js"></script>
<script>
// 获取元素
const $lis = $('.leftBox ul li'),
$top = $('.top'),
$rightBox = $('.rightBox')
// 给li标签添加鼠标滑入事件
$lis.mouseenter(function () {
// 删除所有的active
$lis.removeClass('active')
// 给我自己添加类名active
$(this).addClass('active')
// 左侧大图修改src属性
$top.children().attr('src', `img/${$(this).children().attr('msrc')}`)
// 右侧大图修改属性
$rightBox.children().attr('src', `img/${$(this).children().attr('bsrc')}`)
})
</script>
</body>
</html>
/* 初始化 */
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
/* 版心 */
.w {
width: 1120px;
margin: 0 auto;
}
/* 左侧盒子 */
.leftBox {
width: 400px;
float: left;
}
.leftBox .top {
width: 400px;
border:1px solid #ccc;
}
.leftBox .top img {
width: 400px;
}
.leftBox ul {
width: 188px;
margin: 10px auto;
}
.leftBox ul li {
float: left;
width: 54px;
height: 54px;
border:1px solid #fff;
}
.leftBox ul li.active {
border-color: red;
}
.leftBox ul li + li {
margin-left: 10px;
}
/* 右侧盒子 */
.rightBox {
float: left;
margin-left:10px;
width: 500px;
height: 500px;
border:1px solid #ccc;
overflow: hidden;
}
方法补充
- each()遍历方法
- width()获取窗口宽度
- index()得到的是它自己在HTML结构中的兄弟中的下标位置的是