jQuery概述
jQuery是一个JavaScript库,是对原生JS的封装,内部仍旧是JS实现的
jQuery的基本使用
¶script加载顺序
-
等着页面DOM加载完毕再去执行js代码
相对传统写法
1
2
3$(document).ready(function(){
xxx
}) -
等着页面DOM加载完毕再去执行js代码
相对简洁,推荐使用
1
2
3$(function(){
xxx
})
¶jQuery的顶级对象 $
1 | //方法1 |
¶jQuery对象和DOM对象
DOM对象只能调用DOM方法,jQuery对象只能调用jQuery方法
1 | //调用div |
¶DOM对象和jQuery对象之间的转换
1 | var myVideo=document.querySelector('video'); |
console.dir打印之后发现$(‘div’)是以伪数组的形式存储的
1 | //play()是一个方法 |
jQuery常用API
¶选择器
¶基础选择器
注意: $(‘div’)返回的是一个伪数组,要想真正获取其中的元素,要加索引号,例如:
1 | console.log($('div')[0]); |
¶层级选择器
¶隐式迭代
1 | //会将所有的div设置样式 |
¶筛选选择器
$()里面的都是对象,所以:first、:laster、:eq(index)等的需要写到$()里面
¶筛选方法
注意: 是方法
1 | $('ui').children();//将所有的儿子选出,不会把孙子辈的选出来 |
1 | $('ul').siblings('li');//除了自身节点之外的所有亲兄弟 |
1 | //筛选选择器 |
小项目:新浪下滑菜单,多种做法
应用了隐式迭代,内部绑定事件
show()、hide()方法
1 | <script> |
¶排他思想
例如:点击当前按钮后更改颜色,其余按钮无颜色
1 | $(function(){ |
小项目:淘宝服饰精品
¶获得当前索引号
相比于用原生JS,jQuery更简洁
1 | $(this).index()//是方法,要加(),从0开始 |
在获取li的索引号时,不需要提前设置每个li的索引号
¶链式编程
相当于以下代码
1 | $(this).css('color','red'); |
注意是哪个对象执行样式
去除重复,以达到简洁
¶样式操作
¶操作css方法
1 | //注意用花括号括起来 |
如果是复合属性,要用驼峰命名法
¶设置类样式方法
注意: 里面的类名不能加.
小项目:tab栏切换
上面设置css是给伪数组形式的元素设置,而不是直接的元素形式,所以可以通过
$(‘div’).eq(index).css()进行设置,而$(‘div’)[index]是直接的DOM元素形式,jQuery方法不能被DOM对象调用的,所以不正确
¶类操作与className区别
¶效果
¶显示隐藏效果
- show()
1 | show([speed,[easing],[fn]]) //[]可以省略 |
-
hide()
参数规范和上述相同
-
toggle() 切换
参数规范和上述相同
在实际开发中一般是不用参数的
¶滑动
-
solideDown() 下滑
-
slideUp() 上滑
参数规范和上述相同
-
slideToggle() 滑动切换
参数规范和上述相同
小项目:新浪下滑菜单动画优化版
1 | $('.nav>li').mouseover(function(){ |
¶事件切换
- 两个函数都写时,在移入和移除时分别执行
- 只写一个函数时,在移入、移除时执行同一个函数
小项目:新浪下滑菜单切换优化版(两个函数)
更加简洁
$(’ ').hover()
1 | $('.nav>li').hover( |
小项目:新浪下滑菜单切换终极优化版(一个函数)
1 | //使用hover()时只含一个函数,但存在bug:短时间内多次触发动画问题 |
¶动画队列及其停止排队的方法
短时间内多次触发动画,会使得动画形成一个动画队列,当鼠标移除动画触发范围时,动画仍旧会继续执行
小项目:新浪下滑菜单切换终极优化bug版(一个函数)
1 | $('.nav>li').hover(function(){ |
¶淡入淡出
- fadeOut() 淡出
-
fadeIn() 淡入
-
fadeToggle() 淡入淡出切换
上述规范相同
-
fadeTo() 以渐进方式调整到指定的不透明度
注意: 是调整的不透明度(不透明度为1表示是不透明的),speed和opacity必须写
小项目:高亮显示案例
¶自定义动画animate
里面的params以键值对形式,因为是元素做动画,所以要用DOM元素
1 | $('button').click(function(){ |
小项目:折叠卡片/手风琴
1 | $('ul li').mouseenter(function(){ |
注意: 要在动画前面加stop()
¶属性操作
1 | $('div').change(function(){});//当div发生变化时调用函数 |
¶设置或获取元素固有属性值 prop()
property:属性的意思
是获取不了自定义属性的
¶设置或获取元素自定义属性值attr()
好像是获取不了元素自带的属性
设置自定义索引:
1 | for(var i=0;i<$('div').length;i++){ |
¶数据缓存data()
这里面的数据是存放在元素的内存里面的
获取H5自定义属性 data-index时不用写data-,并且返回的是数字型
1 | $().data('uname','andy'); |
小项目:购物车模块全选
1 | $('input:checked');//自动获取复选框选中的个数 |
元素自带属性要用prop(),自定义属性用attr(),一定要注意,否则样式不会生效
¶文本属性值
例如清空文本框内容$('textarea').val("");
小项目:购物车模块-增减商品数量
注意: 程序里面有 return false
,后面的代码就不会执行了
¶保留几位小数
保留几位小数: (100/3).toFixed(2) -> 33.33
¶返回指定祖先元素
parents('选择器')
可以返回指定的祖先,注意是parents
¶元素操作
¶遍历元素
each(function(index,domEle)){}
index和domEle可以用其他自定义变量名称代替,使用jQuery对象时,需要将DOM对象转换为jquery对象,里面的是回调函数
$.each(调用对象,function(index,domEle){})
例如:
1 | var arr=[];//数组 |
1 | $.each({name:"andy",age: 18},function(index,domEle){ |
¶创建元素
1 | var li = $('<li>i am the last one</li>') |
实际上创建了一个新的标签对象,再将其添加到合适位置即可
¶添加元素
-
内部添加
1
2var li=$('<li>hello world</li>');
$('ul').append(li); -
外部添加
![image-20220811181311419](image-20220811181311419.png)
1 | var div=$('<div>hello world</div>'); |
区别: 内部添加是父子关系,外部添加是兄弟关系
¶删除元素
1 | $('ul').remove();//谁调用谁删除 |
小项目:购物车删除模块,属于购物车模块
¶尺寸、位置操作
¶尺寸
¶位置
通过键值对的形式设置
position只能获取,不能设置
页面滚动事件: $(window).scroll(function(){})
¶节流阀/互斥锁
两个函数不能同时执行,开个变量flag解决即可。
jQuery事件
¶事件注册
-
单个事件注册:
¶事件处理
1 | //不同事件分别触发不同的函数 |
1 | //多个事件触发统一事件 |
1 | $('ol').on("click","li",function(){ |
on给后来插入的标签创建click事件
传统方式下在事件之前创建元素幷插入也是可以的
1 | var li=$('<li>hello world</li>'); |
小项目:微博发布信息
1 | $(function(){ |
2. 事件处理off()解绑事件
1 | $('div').on({}); |
3.自动触发事件trigger()
1 | $(selector).trigger(event,[param1,param2,...]) |
triggerHandler() 方法触发被选元素的指定事件类型。但不会执行浏览器默认动作,也不会产生事件冒泡。
triggerHandler() 方法与 trigger() 方法类似。不同的是它不会触发事件(比如表单提交)的默认行为,而且只影响第一个匹配元素。
- 它不会引起事件(比如表单提交)的默认行为
- .trigger() 会操作 jQuery 对象匹配的所有元素,而 .triggerHandler() 只影响第一个匹配元素。
- 由 .triggerHandler() 创建的事件不会在 DOM 树中冒泡;如果目标元素不直接处理它们,则不会发生任何事情。
- 该方法的返回的是事件处理函数的返回值,而不是具有可链性的 jQuery 对象。此外,如果没有处理程序被触发,则这个方法返回 undefined。
例如:
1 | <!--triggerhandler--> |
1 | <!--trigger--> |
¶事件对象
更多方法参考webAPI中讲解的内容
jQuery其他方法
¶拷贝对象
上面的是对象{}拷贝,不是标签
分析
- targetObj{}为空
1 | $(function(){ |
-
targetObj{}不为空时会覆盖targetObj原来的数据
-
deep
浅拷贝只是将地址拷贝给了目标对象,修改两个其中一个,另一个也会跟着改变
深拷贝会将所有的数据拷贝另外开辟一个地址存储,不会拷贝地址,两者数据不会共享,冲突的数据会覆盖,不冲突的保留
标签拷贝
¶多库共存
自己写的代码有$符号,而jQuery又自带$,会产生冲突,例如:
1 | $(function(){ |
如果jQuery还是冲突,就将$
让用户自己重命名:var xxx=$.noConflict()
¶jQuery插件
要先引入jQuery插件
- 插件
第二个插件地址停更至2020
-
图片懒加载插件
-
全屏滚动