JQuery
简介
引入
JQuery下载:https://jquery.com/
JQuery.mousewheel.js下载:https://plugins.jquery.com/mousewheel/
1 | <!-- 直接在页面将js文件嵌入进来 --> |
JQuery与原生js的区别
原生JS
1
2
3
4
5
6
7<script type="text/javascript">
// 原生js书写方案,onload必须等到页面全部渲染完成以后才会执行
window.onload = function(){
var oDiv = document.getElementById("ID");
alert(oDiv);
}
</script>JQuery
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<script type="text/javascript" src="js/jquery-1.12.2.js"></script>
<!-- jQuery的完整写法 -->
<script type="text/javascript">
// $是jQuery中的经典符号,变量的命名建议以$开始
// ready是等到页面节点全部加载完成后就开始渲染页面
$(document).ready(function(){
var $div = $("#ID");
alert($div);
})
</script>
<!-- jQuery的简要写法 -->
<script type="text/javascript">
$(function(){
var $div = $("#ID");
alert($div);
})
</script>
jQuery修改样式
1 | <script type="text/javascript"> |
jQuery选择器
思想
- 选取某个网页元素,然后对它进行操作
选择器
快速选择元素,选择规则与css样式相同
1
2
3
4
5
6
7
8
9
10
11
12
13
14// 选取Id为指定ID的所有元素
$("#ID");
// 选取class为Class的所有元素
$(".Class");
// 选取所有标签为div
$("li");
// 选择id为"ID"下的所有li标签中的span元素
$("#ID li span");
// 选取input标签中,name属性为first的元素
$("input(name=first)");对选择集进行过滤
1
2
3
4
5
6
7
8
9
10
11// 选择包含p标签的Div元素
$("div").has("p");
// 选择class不等于myClass的div元素
$("div").not(".myClass");
// 选择class等于myClass的div元素
$("div").filter(".myClass");
// 选取第6个div元素,默认数字从0开始计数
$("div").eq(5);选择集的偏移
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23// 选择div元素之前紧挨着的同辈元素
$("div").prev();
// 选择div元素之前所有的同辈元素
$("div").prevAll();
// 选择div元素后面紧挨着的同辈元素
$("div").next();
// 选择div元素后面所有的同辈元素
$("div").nextAll();
// 选择div的父级元素
$("div").parent();
// 选择div的所有子级元素
$("div").children();
// 选择div所有的同级元素
$("div").siblings();
// 选择div内class等于myclass的元素
$("div").find(".myclass");
jQuery是否选中
由于jQuery的容错机制,即使没有找到元素,也不会报错,为了验证是否定位到元素,需要打印出元素的length属性来判断是否定位准确。若为0,则未定位到,若大于0,则表示选择到了元素
1 | var $oDiv = $("#ID"); |
jQuery样式和事件
思想
- 同一个函数完成取值和赋值(css)
样式
行间样式
1
2
3
4
5
6
7// 获取对象的属性,格式:$("定位").css("属性名")
// 当选择器定位的是多个元素的时候,此时只会获取到其中第一个元素对应的属性
$("div").css("width");
// 修改对象的样式
$("div").css({"width":"520px","color":"red"});
$("div").css("width", "30px"); // 可用于的单个属性的设置修改样式名
操作会修改元素的Class属性信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14// 判断Id为div1的对象是否含有:divClass,如果有则返回true,反之为false
$("#div").hasClass("divClass");
// 为Id为div1的对象追加样式类:divClass
$("#div").addClass("divClass");
// 移除Id为div1的对象中的divClass的样式
$("#div").removeClass("divClass");
// 移除Id为div1的对象中的divClass、name的样式,多个Class之间用,间隔开
$("#div").removeClass("divClass name");
// 重复切换name的样式,它需要配合button按钮一起使用
$("#div").toggleClass("name");
事件
click事件
1
2
3
4
5// 利用click包裹封闭函数
var $btn = $("#btn");
$btn.click(function(){
$div.toggleClass("add");
})index定位
1
2
3
4
5
6
7
8
9// 内部的this指的是原生对象,代表的是当前鼠标点击的对象,该对象只有原生的一些方法
var $btn = $("input");
$btn.click(function(){
// 使用jQuery对象用$(this),代表的是当前鼠标点击的对象,该对象含有jQuery定义的方法
$(this).addClass("myClass").siblings().removeClass("yourClass");
// index可以捕获到当前点击的对象相比较其它同胞元素的索引位置,默认从0开始计数
$btn.eq( $(this).index() ).addClass("myClass");
})
jQuery特效、链式、动画
特效
案例
1
2
3
4
5
6
7
8var $btn = $("button");
var $div = $("#div")
$btn.click(function(){
// fadeIn(持续时间, "效果", 回调函数)
$div.fadeIn(1000, "swing", function(){
alert("动画完成");
})
})常用特效如下:
方法 效果 fadeIn() 淡入 fadeOut() 淡出 fadeToggle() 切换淡入淡出 hide() 隐藏 show() 显示 toggle() 切换元素的可见状态 slideDown() 向下展开 slideUp() 向上卷起 slideToggle() 依次展开和卷起某个元素
链式调用
1 | // 将多条语句通过一条语句的.来进行合并实现功能 |
动画
1 | // animate方法可以设置元素某属性上的动画,可以设置一个/多个属性值,动画执行完成后还可以执行一个特定的函数 |
jQuery尺寸和滚动事件
尺寸
1 | // 获取元素的宽度 |
事件
1 | // 设置页面滚动事件,当页面滚动时就会检测,其检测频率很高。 |
属性和循环
属性
1 | // jQuery获取对象中内嵌的html内容 |
循环
1 | // 循环用户当定位到多个元素时,对这些元素进行循环分类操作 |
jQuery事件
事件
常见事件
事件名称 作用 mouseover() 鼠标进入事件(进入子元素也会触发) mouseout() 鼠标离开事件(离开子元素也会触发) mouseenter() 鼠标进入事件(进入子元素不触发),在子元素内部移动不会产生任何的事件 mouseleave() 鼠标离开事件(离开子元素不触发),在子元素内部移动不会产生任何的事件 mousewheel() 鼠标滚轴事件,当滚动时触发,需要绑定在$(window)上,需引入Jquery.mousewheel.js插件 hover() 同时为mouseenter和mouseleave事件制定处理函数 ready() DOM加载完成后触发 resize() 浏览器窗口的大小发生变化时触发,需要绑定在$(window)上 scroll() 滚动条的位置发生变化时触发 submit() 用户提交表单时触发 blur() 元素失去焦点 focus() 元素获得焦点 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40// blur(): 用户触发元素失去焦点的时候触发的函数
$("div").blur(function(){
alert("移出了元素");
})
// focus():用户聚焦于某个焦点的时候触发的函数
$("div").focus(function(){
alert("聚焦于焦点")
})
$("div").focus(); // 是使得页面默认聚焦于某个元素,常用方式
// hover():用户鼠标移入移出某个元素的时候触发的函数
// 第一个函数是mouseenter()事件
// 第二个函数是mouseleave()事件
$("div").hover(function(){
alert("鼠标移入");
}, function(){
alert("鼠标移出");
})
// resize():检测浏览器窗口大小发生变化时,需要直接绑定到$(window)
$(window).resize(function(){
alert($(window).width);
})
// submit():定义用户提交表单的事件,但是一般提交表单(form)不用该事件,所以需要阻止
$("#form").submit(function(){
return false;
})
// mousewheel():鼠标滚轴事件,需要引入插件,并且直接绑定到$(window)
$(window).mousewheel(function(event, dat){
// event表示滚轮事件本身
// dat是滚轴的方向,向上则其为-1,反之为1
alert(dat)
})
// val():获取用户在input输入框中输入的内容
var $data = $("#input").val();
$("#input").val(""); // 将输入框的内容清空多事件绑定
1
2
3
4
5
6
7
8
9
10// bind用于给一个元素绑定多个事件
// 第一个参数为传递的事件名,多个事件用空格间隔开
// 第二个参数为触发的函数
$("div").bind("click mouseout", function(){
alert("事件已触发");
})
// unbind 用于给原本绑定事件的元素解除某个事件的绑定
// 传递的参数为需要解绑的事件名
$(this).unbind("click")
事件冒泡
机制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 【事件冒泡】是指子元素的事件会层层传递到其祖先级的同名事件上,从而触发父级及祖先级的同名事件
// 【事件冒泡】存在的目的是为了实现【事件委托】的功能
<script type="text/javascript">
$(function(){
$(".son").click(function(){
alert(1);
})
$(".father").click(function(){
alert(2);
})
})
</script>
// 点击上面【son】元素时,此时弹出1的同时,也会触发【father】的click事件,弹出2阻止冒泡事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19// 阻止冒泡事件有三种方式,在需要终止元素的冒泡事件上添加如下内容即可:
// 1. 阻止冒泡事件:stopPropagation();
$(function(){
// 定义函数中的第一个参数代表了事件的本身,此处的event表示的是click事件
$(".son").click(function(event){
event.stopPropagation();
})
// 2. 阻止默认表单提交:preventDefault();
$(function(){
$(".son").click(function(event){
event.preventDefault();
})
// 3. 合并1和2的阻止行为:return false;,推荐使用这个
$(function(){
$(".son").click(function(event){
return false;
})
事件委托
1 | // 利用事件冒泡的原理,将对应的事件绑定到父级上,通过判断事件来源的子集,执行对应的操作。 |
函数节流
1 | // javascript中有些函数的触发频率很高,可能会导致事件触发次数过于频繁,因此通过定时器限制触发频率,以提高效率 |
节点操作
创建节点
1 | // html创建节点的效率是最高的,如果不能,则使用节点操作 |
插入节点
1 | var $content = $('<a href="shuai"> 连接 </a>'); |
删除节点
1 | $("#div").remove(); |
拓展
1 | <!-- href的值设定为javascript:;则表示这个连接不做任何操作,写#也可同样效果,但是会携带a的样式--> |
动态数据
json
1 | // xml数据格式逐渐被json数据格式所替代 |
ajax
目的:让javascript发送http请求,与后台通信,获取数据和信息
原理:实例化xmlhttp对象,使用此对象与后台通信,ajax通信过程不影响javascript的执行,从而实现异步
实践:通过ajax自己发送http请求,不通过浏览器地址栏,使得页面在无刷新的情况下获取到服务器后台数据,并更新在页面的指定位置。
同步与异步:程序中同步指做完一件事后,就去做下一件事;异步指同时做好几件事
同源策略:ajax请求的资源和页面只能够是同一个域下面的资源,不能是其它域下的资源,这是ajax基于安全的考虑,可以使用jsonp解决,报错信息如下:
1
2No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:8081' is therefore not allowed access.
1 | // jQuery将ajax和jsonp封装在了一起,使用的时候用$.ajax,包含参数如下: |
jsonp
1 | // jsonp允许异域请求数据,请求原理是利用<script>标签可以跨域链接资源的特性 |
本地存储
Cookie存储
- Cookie存储在本地,大小4K,同源的http请求时携带传递,损耗带宽
- Cookie可设置访问路径,只有此路径及此路径的子路径才能访问该Cookie,在设置的过期时间内有效
- 如果访问未定义的cookie时会提示undefined
- JQuery本身并没有封装Cookie的操作,使用插件:JQuey.cookie.js,下载地址:http://plugins.jquery.com/cookie/
1 | // 引入cookie操作的插件,需要先引入JQuery,再引入插件 |
LocalStorage存储
- 存储在本地,容量为5M或者更大
- 不会在请求的时候携带传递,在所有的同源数据中共享,数据一直有效,除非人为删除
- iphone的无痕浏览不支持该方式
1 | // 设置 |
sessionStorage存储
- sessionStorage存储在本地,容量为5M或者更大
- 不会在请求的时候携带传递,在同源的窗口关闭前一直有效
- iphone的无痕浏览不支持该方式
1 | // 设置 |
JQuery UI
引入
- JQuery UI是JQuery的第三方插件,我们主要使用其内部的拖拽功能
- 下载地址:https://jqueryui.com/download/
- 中文教程:https://www.jqueryui.org.cn/
使用
1 | // JQuery UI提供很多功能,此处只以拖拽功能为例 |
拓展
1 | 使用nodeJS运行js脚本 |
总结
为便于记忆,将脑图绘制如下:脑图