jQuery
一、jQuery简介
1. 特点
1. 兼容所有浏览器
2. 丰富的DOM选择器
3. 链式表达式
4. Ajax操作支持
2. 语法
1. jQuery语法
$(选择器).action(操作)
2. 与JS对比
JS:
var pEle = document.getElementsByTagName('p')[0]
pEle.style.color = 'red'
jQuery:
$('p').css('color', 'green')
二、选择器与筛选器
1. 基本选择器
1. 标签选择器
$('span')
2. 类选择器
$('.c1')
3. id选择器
$('#id')
4. 组合选择器
$('#d1, span');
5. 配合使用
$('div.c1') // 找到有c1 class类的div标签
2. 层级选择器
1. 后代选择器
$('x y');
2. 儿子选择器
$('x > y')
3. 毗邻选择器
$('x + y')
4. 兄弟选择器
$('x ~ y')
3. 属性选择器
1. 找到含有‘username’属性的标签
$('[username]')
2. 找到含有username属性,且值为‘byx’的标签
$('[username="byx"]')
3. 找到在span标签下,username=byx的标签
$('span[username="byx"]')
4. 基本筛选器
1. 找第一个(:first)
$('ul li:first')
2. 找最后一个(:last)
$('ul li:last')
3. 匹配索引等于index的那个元素
$('ul li:eq(2)')
4. 匹配索引为偶数的元素,从0开始计数
$('ul li:even')
5. 匹配索引为奇数的元素,从0开始计数
$('ul li:odd')
6. 匹配所有大于给定索引值的元素
$('ul li:gt(3)')
7. 匹配所有小于给定索引值的元素
$('ul li:lt(3)')
8. 移除所有满足not条件的标签
$('div span:not('.c1')')
9. 选取所有包含一个或多个标签在内的标签(从后代元素中找)
$('div:has('.c1')')
5. 表单筛选器
1. 找到所有的checkbox
$(":checkbox")
2. 找到可用的input标签
<form>
<input name="email" disabled="disabled" />
<input name="id" />
</form>
$("input:enabled") // 找到可用的input标签
3. 找到被选中的option
<select id="s1">
<option value="beijing">北京市</option>
<option value="shanghai">上海市</option>
<option selected value="guangzhou">广州市</option>
<option value="shenzhen">深圳市</option>
</select>
$(":selected") // 找到所有被选中的option
4. 注意,在使用checked查找时,会将selected找到,这是一个bug。
6. 筛选器方法
1. 下一个元素
$spanEle.next()
$spanEle.nextAll()
$spanEle.nextUntil('#d2')
2. 上一个元素
$spanEle.prev()
$spanEle.prevAll()
$spanEle.prevUntil('#d2')
3. 父亲元素
$("#id").parent()
$("#id").parent().parent()
$("#id").parents() // 查找当前元素的所有的父辈元素
$("#id").parentsUntil('html') // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。
4. 儿子和兄弟元素
$("#id").children();// 儿子们
$("#id").siblings();// 兄弟们
5. 查找div内部的span
$('div').find('span')
6. 补充
.first() // 获取匹配的第一个元素
.last() // 获取匹配的最后一个元素
.not() // 从匹配元素的集合中删除与指定表达式匹配的元素
.has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
.eq() // 索引值等于指定值的元素
三、jQuery操作标签
1. CSS样式操作
1. 添加指定的CSS类名
$('div').addclass('bg_red')
2. 移除指定的CSS类名
$('div').removeClass('bg_red')
3. 判断是否有指定类名
$('div').hasClass('bg_red')
4. 切换CSS类名,如果有就移除,没有就添加
$('div').toggleClass('bg_red')
5. 设置CSS属性
$('p').css('color', 'red')
P.S:
JS
.style.color
jQuery
.css('color', 'red')
P.P.S
搭骨架用HTML,调样式用CSS,加动态效果用JS,让三种语言各司其职。
2. 位置操作
1. 获取匹配元素在当前窗口的相对偏移或设置元素位置
offset()
2. 获取匹配元素相对父元素的偏移
position()
3. 获取匹配元素相对滚动条顶部的偏移,括号内可以传数字进行移动
$(window).scrollTop()
4. 获取匹配元素相对滚动条左侧的偏移,括号内可以传数字进行移动
$(window).scrollLeft()
3. 尺寸
1. 文本高
$('p').height()
2. 文本宽
$('p').width()
3. 文本+padding高
$('p').innerHeight()
4. 文本+padding宽
$('p').innerWidth()
5. 文本+padding+边框高
$('p').outerHeight
6. 文本+padding+边框宽
$('p').outerweight
4. 文本操作
1. 获取标签内部文本值,可以在括号内传参数设置值。
$('div').text()
2. 获取标签内部的HTML代码,可以在括号内传参数设置值。
$('div').html()
3. 获取标签内用户输入的值,可以在括号内加参数设置值。
$('div').val()
P.S
JS
innerText()
innerHtml()
value
5. 属性操作
1. 用于id等或自定义属性:
1. 查找第一个匹配到的属性名称
$('p').attr('id')
2. 为匹配到的属性设置一个属性值
$('p').attr('id', 'byx')
3. 为匹配到的属性设置多个值
$('p').attr({'id': 'byx', 'password': '123'})
4. 移除属性
$('p').removeAttr('id')
2. 用于checkbox和radio,可以动态识别选择。
1. 获取属性,识别标签是否被选中,返回布尔值。
$('input').first().prop('checked')
2. 修改属性
$('input').first().prop('checked',false)
3. 移除属性
$('input').first().removeProp('id')
6. 文档处理
1. 添加到指定元素内部的后面
$(A).append(B)// 把B追加到A
$(A).appendTo(B)// 把A追加到B
2. 添加到指定元素内部的前面
$(A).prepend(B)// 把B前置到A
$(A).prependTo(B)// 把A前置到B
3. 添加到指定元素外部的后面
$(A).after(B)// 把B放到A的后面
$(A).insertAfter(B)// 把A放到B的后面
4. 添加到指定元素外部的前面
$(A).before(B)// 把B放到A的前面
$(A).insertBefore(B)// 把A放到B的前面
5. 移除和清空元素
remove()// 从DOM中删除所有匹配的元素。
empty()// 删除匹配的元素集合中所有的子节点。
6. 替换
replaceWith()
replaceAll()
7. 克隆
clone()// 参数
默认不克隆事件,除非在括号中添加True。
四、jQuery事件
1. 常用事件
click(function(){...})
hover(function(){...})
blur(function(){...})
focus(function(){...})
change(function(){...})
keyup(function(){...})
2. jQuery绑定事件的语法
1. 方式一
$(选择器).事件名(
function() {
// 事件代码
})
2. 方式二
$(选择器).on('事件名',function() {
// 事件代码
})
P.S
JS
XXXEle.on+事件名 = function() {
// 事件代码
}
3. 移除事件
$(选择器).off('事件名',function() {
// 事件代码
})
4. 阻止后续事件
1. 方式一
事件代码后加上return false
2. 方式二
事件代码后加上e.preventDefault();
5. 事件冒泡
1. 定义
子标签事件触发后,会继续触发父标签事件
2. 控制事件冒泡
e.stopPropagation
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>阻止事件冒泡</title>
</head>
<body>
<div>
<p>
<span>点我</span>
</p>
</div>
<script src="jquery-3.3.1.min.js"></script>
<script>
$("span").click(function (e) {
alert("span");
e.stopPropagation();
});
$("p").click(function () {
alert("p");
});
$("div").click(function () {
alert("div");
})
</script>
</body>
</html>
6. 事件委托
1. 定义
将特定的事件,委托给标签内部指定的元素(标签既可以是提前写的,也可以是后期动态创建的)
2. 示例
只要是body内的button按钮,都具有alert事件
$('body').on('click', 'button', function() {
alert(123)
})
7. 示例
1. hover事件示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>苍茫的天涯是我的哎,绵绵的青山脚下一片海!</p>
<script src="jQuery-3.3.1.js">
</script>
<script>
$('p').hover(
function () {
alert('来啦,老弟')
},
function () {
alert('慢走哦~')
}
)
</script>
</body>
</html>
2. 实时监听input输入值变化示例
<!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">
<title>实时监听input输入值变化</title>
</head>
<body>
<input type="text" id="i1">
<script src="jquery-3.2.1.min.js"></script>
<script>
/*
* oninput是HTML5的标准事件
* 能够检测textarea,input:text,input:password和input:search这几个元素的内容变化,
* 在内容修改后立即被触发,不像onchange事件需要失去焦点才触发
* oninput事件在IE9以下版本不支持,需要使用IE特有的onpropertychange事件替代
* 使用jQuery库的话直接使用on同时绑定这两个事件即可。
* */
$("#i1").on("input propertychange", function () {
alert($(this).val());
})
</script>
</body>
</html>
五、jQuery动画效果
1. 展示与隐藏
1. 5秒展开图片到原本大小
$('div').show(5000)
2. 5秒缩小图片
$('div').hide(5000)
2. 滑动
1. 3秒向上卷起图片
$('div').slideUp(3000)
2. 3秒向下展开图片
$('div').slideDown(3000)
3. 淡入淡出
1. 4秒图片淡出
$('div').fadeout(4000)
2. 4秒图片淡入
$('div').fadein(4000)
3. 4秒图片淡出到透明度为0.4
$('div').fadeto(4000, 0.4)
4. 示例:点赞效果
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>点赞动画示例</title>
<style>
div {
position: relative;
display: inline-block;
}
div>i {
display: inline-block;
color: red;
position: absolute;
right: -16px;
top: -5px;
opacity: 1;
}
</style>
</head>
<body>
<div id="d1">点赞</div>
<script src="jquery-3.2.1.min.js"></script>
<script>
$("#d1").on("click", function () {
var newI = document.createElement("i");
newI.innerText = "+1";
$(this).append(newI);
$(this).children("i").animate({
opacity: 0
}, 1000)
})
</script>
</body>
</html>
六、jQuery补充知识点
1. each
1. 作用
遍历一个jQuery对象,为每个匹配元素执行一个函数,常用来代替for循环。
2. 用法一
创建3个p标签,内部1到3
$.each($('p'), function(index, obj) {
console.log(index, obj, this)
})
输出
0 <p>1</p> <p>1</p>
1 <p>2</p> <p>2</p>
2 <p>3</p> <p>3</p>
3. 用法二
$('p').each(function(index, obj) {
console.log(index, obj)
})
输出
0 <p>1</p> <p>1</p>
1 <p>2</p> <p>2</p>
2 <p>3</p> <p>3</p>
4. 终止循环
return false;
2. .data()
1. 作用
在标签存储信息,并无法在前端查看到。取值时,键不存在也不会报错
2. 存值
$('p').data('username', 'byx')
3. 取值
$('p').first().data('username')
4. 删除值
$('p').removeData('username')