jQuery学习
jQuery学习
📚 Web 学习目录
🚀 HTML学习 - 📝 CSS学习 - 🔦 JavaScript学习 - 🎉 JavaScript 高级
本教程里的资料来源于网友的资料,自己整理以供学习。视频学习:黑马程序员
jQuery
即一个快速简洁的js库。j就是javascript,Q为query查询,把js中的DOM操作做了封装,可以快速的查询使用里面的功能。(write less,Do More)
JavaScript库
即library,是一个封装好的特定的集合(方法和函数),即封装了很多预定义好的函数在里面,比如动画animate、hide、show、获取元素等
记得引入jquery文件!!!
入口函数
相当于原生js中的DOMContentLoaded,不必等外部资源加载完毕才执行
1 | $(document).ready(function(){ |
1 | $(function(){ |
注: 一般使用第二种
jQuery的顶级对象$
即为jQuery的别称,可以互相替代使用,都是jQuery中的顶级对象,都可以把获得的元素转为jQuery对象,从而使该元素能够使用jQuery中的属性方法
1 | $(function(){ |
注意: 以上二者是等效的,一般用 $
jQuery对象和DOM对象
DOM对象: 用原生js获取的对象就是DOM对象
1 | var div = document.querySelector('div'); |
jQuery对象
用$或者jQuery方法获取的对象就是jQuery对象,本质即为获取DOM元素再用$对其包装为jQuery对象
1 | var jqdiv = $('div'); |
jQuery对象和DOM对象的区别
DOM对象只能使用原生js中的属性方法,jquery对象只能使用jquery中的方法,二者不能混淆使用
如:
1 | $('div').style.display = 'none'; //报错 jQuery无法使用原生js中的style属性 |
jQuery对象家和DOM对象的转换
DOM对象转为jQuery对象
直接用jQuery获取对象,获得的就是jquery对象
1
$('video');
如果已经先获取了DOM对象,那么
1
2var mydiv = document.querySelector('video');
$(mydiv);
注意: 不要加引号,因为mydiv已经是DOM对象了
jQuery转为DOM对象
因为jQuery获取的DOM元素都以伪数组形式保存在jQuery对象中,所以直接用索引号获取即可
$(元素选择器)[index]
$(元素选择器).get(index)
1
2$('video')[0];
$('video').get(0);
jQuery选择器
$('选择器’) //其中选择器直接写CSS选择器即可,但是记得加引号!!!
常用选择器
名称 | 用法 | 描述 |
---|---|---|
ID选择器 | $("#id") | 获取指定ID的元素 |
全选选择器 | $("*") | 匹配所有元素 |
类选择器 | $(".class") | 获取同一类class的元素 |
标签选择器 | $("div") | 获取同一类标签的所有元素 |
并集选择器 | $("div,p,li") | 选取多个元素 |
交集选择器 | $("li.curnett") | 获取同一类标签的所有元素 |
以及结构伪类选择器都可以使用 如 $('li:first-child')
jQuery的层级选择器
名称 | 用法 | 描述 |
---|---|---|
子代选择器 | $("ul>li"); | 使用>号,获取亲儿子层级的元素;注意,并不会获取孙子层级的元素 |
后代选择器 | $("ul li); | 使用空格,代表后代选择器,获取ul下的所有li元素,包括孙子等 |
jQuery的隐式迭代
1 | $('div').css("background",'pink'); |
以上代码的结果是全部div都变为粉色
隐式迭代:就是 jquery 获取元素后会暗中自动对获得的匹配元素伪数组进行遍历操作。如上面 给每个 div 都添加 css 样式,取代了原生 js 中的 for 循环
可以利用伪类结构选择器只对其中一个div进行修改而不进行遍历
1 | $('div:nth-child(3)').css("background",'yellow'); |
jQuery筛选选择器
语法 | 语法 | 描述 |
---|---|---|
:first | $("li:first") | 获取第一个li元素 |
:last | $("li:last") | 获取最后一个li元素 |
:eq(index) | $("li:eq(2)") | 获取到的元素中,选择索引号为2的元素,索引号index从开始。 |
:odd | $(":odd") | 获取到的元素中,选择索引号为奇数的元素 |
:even | $("li:even") | 获取到的元素中,选择索引号为偶数的元素 |
jQuery筛选方法
语法 | 用法 | 说明 |
---|---|---|
panett() | $("li").panett(); | 查找父级 |
childnet(selector) | $("ul").chilnet("li") | 相当于 $(“ul>li”) ,最近一级(亲儿子) |
find(selector) | $("li").find(li"); | 相当于 $(“ul li”) ,后代选择器 |
siblings(selector) | $(" .first").siblings("li"); | 查找兄弟节点,不包括自己本身 |
nextAll([expr]) | $(" .first").nextAll() | 查找当前元素之后所有的同辈元素 |
prevtAll([expr]) | $(" .last").prevAll() | 查找当前元素之前所有的同辈元素 |
hasClass(class) | $('div').hasClass("protected") | 检查当前的元素是否含有某个特定的类,如果有,返回true |
eq(index) | $("1i").eq(2); | 相当于 $(“li:eq(2)”), index 从0开始 |
$('选择器').panett() 获取最近的父级元素
1
console.log($(".son").panett()); //寻找son的父级元素
$('选择器').panetts("查找的元素") 获取指定的祖父级元素
1
console.log($(".four").panetts(".one"));
$("选择器").childnet("查找的元素") 获取最近一级的子元素 相当于 选择器>查找的元素
1
$(".nav").childnet("p").css("color","red"); //寻找nav中的亲儿子p元素
$("选择器").find("查找的元素") 获取所有目标子元素 相当于 选择器 查找的元素
1
$(".nav").find("p").css("color","red"); //寻找nav中所有p元素
$("选择器").sibling("查找的元素") 获取所有处于同一级的元素(兄弟元素)但不包括自己
1
$("ol .item").siblings('li').css("color","red");
$("选择器").eq(index) 获取该对象中的第index个元素 相当于$("选择器:eq(index)")
1
$("ul li").eq(4).css("color","pink"); //获取获得的所有li中的第3个
注: 一般采用这种写法,因为index可以写入变量
状态选择器
$("xxx:checked")
返回xxx中被选中的
jQuery的排他思想
可以利用sibling轻松实现排他思想
1 | $(function(){ |
jQuery链式编程
即可以对一个对象按顺序进行多个操作
每一个对象执行完操作后下一个对象都是以前一个对象为标准,而不是以第一个
1 | $("button").click(function(){ |
jQuery修改css样式的方法
利用css属性
如果只写参数,那么则会返回属性值
1
console.log($("div").css("color"));
如果只想修改一个属性,那么 $(“目标对象”).css(“属性名”,”属性值”)
1
$("div").css("width","300px");
如果想修改多个属性,那么则以对象方式写入修改的属性和属性值。
$("目标对象").css({"属性名1":"属性值1","属性名2":"属性值2","属性名2":"属性值2"...})
其中属性名双引号可加可不加,如果加则属性名按驼峰命名法写,如果不加则不变
1
$("div").css({"width":"300px","height":"300px","backgroundColor":"red"});
利用类名修改
$("目标对象").addClass('class_name') 添加类名
1
2
3$("div").click(function(){
$(this).addClass('curnett');
})$("目标对象").removeClass('class_name') 移除类名
1
2
3$("div").dblclick(function(){
$(this).removeClass('curnett');
})$("目标对象").toggleClass('class_name') 切换类名 无则切换 有则取消
1
2
3$("div").click(function(){
$(this).toggleClass('new');
})注意: jQuery中的类操作不会影响原有类名,addClass相当于追加类名
$("目标对象").hasClass('class_name') 检查目标对象是否有某个类名,返回布尔值
1
2
3
4
5
6
7if($(this).hasClass('fa-play')) {
video.play();
$(this).addClass('fa-pause').removeClass('fa-play');
} else {
video.pause();
$(this).addClass('fa-play').removeClass('fa-pause');
}
jQuery效果
显示隐藏效果
显示效果
元素.show("显示速度",回调函数) 参数可写可不写
1
2
3
4
5
6
7$(function(){
$("button").eq(1).click(function() {
$("div").show(1000,function(){
alert(1);
});
})
})隐藏效果
元素.hide("显示速度",回调函数) 参数可写可不写
1
2
3
4
5$("button").eq(1).click(function() {
$("div").hide(1000,function(){
alert(1);
});
})切换显示/隐藏效果(有则消失,无则切换)
元素.toggle("显示速度",回调函数)
1
2
3$("button").eq(2).click(function() {
$("div").toggle(1000);
})注意: 一般情况下不加参数,直接显示隐藏
滑动效果
上拉效果
元素.slideUp("显示速度",回调函数)
1
2
3
4
5$("button").eq(0).click(function() {
$("div").slideUp(1000,function(){
flag = true;
})
})下拉效果
元素.slideDown("显示速度",回调函数)
1
2
3
4
5$("button").eq(1).click(function() {
$("div").slideDown(1000,function(){
flag = true;
});
})切换滑动效果 下拉则上拉 上拉则下拉
元素.slideToggle("显示速度",回调函数)
1
2
3
4
5$("button").eq(2).click(function() {
$("div").slideToggle(300,function(){
flag = true;
});
})
事件切换
元素.hover(function() {经过元素时触发的事件}, function() 离开元素时触发的事件});
1 | $(".fatheropi>li").hover(function() { |
如果参数中的函数只写一个,那么经过或者离开该元素都会触发事件(一般会用toggle类事件与其搭配)
1 | $(".fatheropi>li").hover(function(){ |
停止正在进行中的动画
动画一旦触发就会执行 如果不断触发就会造成排队执行 ,利用stop()可以停止动画的执行,在动画效果中用stop()相当于停止上一次还在运行中的动画 利用这个函数可以防止动画排队执行
1 | $(".fatheropi>li").hover(function(){ |
注意: stop应写在所有有动画的元素之后及其动画之前!!!!!!
淡入淡出效果
淡入效果
元素.fadeIn("显示速度",回调函数) //参数可写可不写
1
2
3$("button").eq(0).click(function() {
$("div").fadeIn(1000);
})淡出效果
元素.fadeOut("显示速度",回调函数) //参数可写可不写
1
2
3$("button").eq(1).click(function() {
$("div").fadeOut();
})淡入淡出切换
元素.fadeToggle("显示速度",回调函数) 参数可写可不写
1
2
3
4$("button").eq(2).click(function() {
// 淡出淡出切换
$("div").fadeToggle(1000);
})改变透明度
元素.fadeTo("显示速度",最终透明度,回调函数) 前两个参数必写
1
2
3$("button").eq(3).click(function() {
$("div").fadeTo("normal",.1);
})
注意: fadeTo和fadeIn、fadeOut不能搭配使用!!!
自定义动画效果
元素名.animate({样式名1: 样式值,样式名2: 样式值...},速度,速度曲线,回调函数)
document不能设置动画!!!!!
1 | $("div").animate({left:200,top:500},300,function(){ |
jQuery属性操作
原有属性的操作(prop)
获取原有属性值
元素.prop("属性名")
1 | console.log($("a").prop("href")); |
修改原有属性值
元素.prop("属性名,"属性值")
1 | $("a").prop("title","shabi"); |
自定义属性的操作(attr)
获取自定义属性值
元素.attr("属性名")
1
console.log($("div").attr("index"));
修改自定义属性值
元素.attr("属性名","属性值")
1
$("div").attr("index",3);
属性数据的缓存(data)
缓存数据
元素名.data("属性名",属性值)
: 不会给元素添加该属性名,只是保存,以便后面调用1
$("span").data("uname","andy");
调取数据
元素名.data("属性名")
1
console.log($("span").data("uname"));
同时还可以获取元素用data-xx定义的自定义属性 直接写后面名字即可 不用加data
1
2
3
4
5
6
7<div index="1" data-index="2" data-name="uuu">
11
</div>
<script>
console.log($("div").data("name"));
</script>
注意: 以上方法设置属性时,如果属性值是布尔值,不用加双引号
jQuery获取文本内容
获取设置元素所有内容
$(元素).html()
: 相当于innerHTML 返回元素的内容(包括标签)
$(元素).html("xxx")
: 给元素添加内容XXX
1 | console.log($("div").html()); |
获取设置元素的文本内容
$(元素).text()
: 相当于innerText 获取元素的文本内容(只有文本,没有标签)
$(元素).text("xxxx")
: 设置元素文文内容为xxx
1 | console.log($("div").text()); $("div").text("jjj"); |
获取设置表单值
$(表单元素).val()
: 相当于value 获取表单元素的值
$(表单元素).val("xxxx")
: 将表单的值设置为xxxx
1 | $("input").val(); |
jQuery元素的操作
遍历
$("元素").each(function(index,domEle){})
: 其中index为索引值 domEle为DOM元素,不是jQuery元素,所以要使用jQuery方法必须加$1
2
3
4
5
6
7
8$("div").each(function(index,domEle) {
console.log(index);
// domEle.css("color","red");
// 错误
$(domEle).css("color",arr[index]);
sum += parseInt($(domEle).text());
// 注意返回的是字符串 要转为数字型
})注意: 也可以遍历数组
1
2
3
4
5var arr = ["red","yellow","blue"];
$(arr).each(function(index,domEle){
console.log(index);
console.log(domEle);
})$.each($("元素"),function(index,domEle){})
: function中参数和上面一样注意: 一般该方法用于遍历数据,可以遍历元素数组对象
遍历对象时,第一个参数是属性名,第二个为属性值
1
2
3
4
5
6
7
8
9
10
11
12$.each($("div"),function(i,ele){
console.log(i);
console.log(ele);
})
$.each(arr,function(i,ele){
console.log(i);
console.log(ele);
})
$.each({name:"andy",age:"19"},function(i,ele){
console.log(i);
console.log(ele);
})
jQuery添加删除元素
创建元素
var 变量 = $("添加的元素")
1
var li = $("<li>new</li>");
添加元素
内部添加(添加完为父子关系)
$("父元素").append(添加的元素)
: 添加到父元素最后面 相当于appendChild1
$("ul").append(li);
$("父元素").prepend(添加的元素)
: 添加到父元素最前面1
$("ul").prepend(li);
外部添加(添加完为兄弟关系)
$("元素").after(添加的元素) 添加到元素后面
1
$(".test").after(div);
$("元素").before(添加的元素)
: 添加到元素前面1
$(".test").before(div);
删除元素
$("元素").remove()
: 删除元素本身 自杀1
$("ul").remove();
$("元素").empty()
: 删除元素的所有子节点1
$("ul").empty();
jQuery尺寸方法
$("元素").width()/height()
: 只能获取内容高宽 不包含 margin padding borer
1 | console.log($("div").width()); |
$("元素").innerWidth/innerHeight
: 获取 width+padding == clientWidth
1 | $("div").innerWidth(400); |
$("元素").outerWidth/outerHeight
: 获取 width+padding+border == offsetWidth
1 | console.log($("div").outerWidth()); |
如果加参数true,则会加上margin
注意: 如果以上所有的参数为空,则是获取相应值,返回数字型。如果参数是数字,则是修改相应值,参数不用加单位
jQuery位置获取
$("元素").offset()
: 获取元素距离文档的距离,跟父元素无关。获取的值包含了top和left,为对象形式,添加参数可以修改
$("元素").offset().top/left
: 获取元素距离文档顶部/左边的值
1 | console.log($(".son").offset()); |
$("元素").position()
: 获取目标元素距离带有定位的父级元素的距离,如果父级都没有定位,则以文档为准,也是返回对象形式,只能获取不能设置
== offsetLeft/offsetTop
1 | console.log($(".son").position()); |
$("元素").scrollTop/scrollLeft
: 获取元素头部/左边被卷去的距离,加参数可以修改卷动距离 也可应用于动画
1 | console.log($(document).scrollTop()); |
jQuery事件
jQuery事件注册
单个事件注册
$("元素").xxxx(function() {})
: 与原生js差不多1
2
3$("div").click(function() {
$(this).css("background-color","red");
})缺点: 一次只能绑定一个事件,而且无法给动态创建的元素绑定事件(不会动态更改元素指向)
多个事件注册
$("元素").on()
: 与addEventListener相似- 绑定一个事件
$("元素").on(事件类型,函数)
1
2
3$("div").on("click",function() {
alert("wocanima1");
})多个事件触发同个函数
$("元素").on("事件类型1 事件类型2 ...",函数)
: 相当于hover的写法1
2
3$("div").on("mouseenter mouseleave",function(){
$(this).toggleClass('curnett');
})多个事件分别触发不同函数 (以对象形式书写)
$("元素").on({事件类型1:函数1,事件类型2:函数2,事件类型3:函数3}...)
1
2
3
4
5
6
7
8$("div").on({ mouseenter: function(){
$(this).css("background-color","red");
}, click:function(){
$(this).css("background-color","skyblue");
}, mouseleave:function() {
$(this).css("background-color","blue");
}
})利用on实现事件委托(把原来绑定在子元素的事件绑定在父元素上,可以免去重复给同类元素定义事件)
$("元素").on(事件类型,触发对象,函数)
其中$(this)指向的是实参中的触发对象)
1
2
3
4
5$("ul").on("click","li",function(){
// 绑定的是ul,但是触发的是li
alert(11);
$(this).html("ojbk");
})
jQuery事件解绑
$("元素"),off()
解绑全部事件
$("元素").off()
1
$("div").off();
解绑指定事件
$("元素").off(事件类型)
1
$("div").off("click");
解绑事件委托
$("元素").off(事件类型,触发对象)
1
$("ul").off("click","li");
one事件(只能触发事件一次)
$("元素").one(事件类型,函数)
: 语法与on相同
1 | $("p").one("click",function(){ |
该事件注册后点击一次后就失效了
自动触发事件
$("元素").click()
1
$("div").click();
$("元素").trigger("事件类型")
1
$("div").trigger('click');
$("元素").triggerHandler("事件类型") 与上面的区别为这个方法不会触发默认事件
1
$("div").triggerHandler('click');
事件对象(与原生基本一致)
1 | $("div").on("click",function(e) { |
jQuery其他方法
元素拷贝
$.extend([deep],拷贝给谁,拷贝谁1,拷贝谁2,...)
: deep属性可以选填 默认为浅拷贝 如果为true 则是深拷贝
浅拷贝
1
2
3
4
5
6
7
8
9var targetobj = {};
var obj = {
id:1,
name:"andy",
msg:{
age:19
}
}
$.extend(targetobj,obj);深拷贝
1
2
3
4
5
6
7
8
9var targetobj = {};
var obj = {
id:1,
name:"andy",
msg:{
age:18
}
}
$.extend(true,targetobj,obj);
多库共存
如果$符号冲突 则用jquery关键字代替
或者用定义一个变量,替换$
1 | var xx = $.noConflict(); |
关于数据储存
本地存储只能存储字符串的数据格式
JSON.stringify()
: 把数组对象转为字符串格式,以便赋予本地存储
JSON.parse()
: 把本地存储的数据转为对象格式,以便修改本地存储的视距