什么是jQuery
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作(DOM)、事件处理、动画设计和Ajax交互。
jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。
总结:一个快速、简洁的js框架,倡导用更少的代码做更多的事情,优化了HTML文档操作、事件处理、动画设计和Ajax交互!
一个前端框架,对javaScript的升级版
jQuery版本
带min的 是 压缩版本,在我们开发中,其实使用哪一个都可以,因为核心功能都是通用的!
压缩版本的优势:
(1)内存占用率小,所以项目线上运行使用的技术版本都是压缩版本
(2)因为其进行了压缩,隐藏了好多js实现的细节,更加安全
jQuery文件的引入
想要书写jQuery语法的脚本,那么必须导入相关的jQuery文件,否则所有的jQuery关键字都不识别,直接报错!
因为jQuery是js的升级版,所以和js一样用<script>
标签引入
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
jQuery的核心对象
$
jQuery的核心对象就是$
,等价于jQuery。
$核心对象到底是什么?万能方法,支持传递各种类型的选择器,来获取到对应的jQuery标签对象!
<script type="text/javascript">
//jQuery方法改变div中文本内容颜色
$("#div1").css("color","yellow");
jQuery("#div2").css("color","yellow")
</script>
jQuery中的文档加载
- ready():jQuery提供的函数,用于页面加载成功后执行。
onload : js中的事件, 表示html页面加载完毕后, 再执行指定内容。 - jQuery加载页面的写法:
//第一种写法:
$(document).ready(function(){
//功能行为;
})
//第二种方式:
$(function(){
//功能行为;
})
- onload 与ready有什么区别?
(1) jQuery中文档加载的方式有两种,而js中只有一种!
(2) js中的window.onload只能执行一次,书写多遍,也只执行一次(后覆盖前,后面生效)!但是jQuery中文档加载的方式可以执行多次!
(3) onload必须等到页面内所有元素都加载完毕后才能执行。jQuery中的方式,只需要等到HTML的DOM结构加载完毕时就可以执行。
即:ready()比onload早
但是,在测试时经常会出现onload早的现想,为什么呢?
因为页面中图片、视频文件加载几乎没有,而onload和ready是多线程的,这是两个时间上几乎没有差别,甚至会出现onload比ready早的现象。但是理论上ready要比onload要早。
js对象与jQuery对象的转换
(1) jQuery对象,$(“选择器”),不管传递什么类型的选择器,得到的都是集合!
(2) jQuery对象 ==> js对象
<script type="text/javascript">
$("#div1")[0].setAttribute("align","right");
$("#div2").get(0).setAttribute("align","right");
</script>
(3) js对象 ==> jQuery对象
<script type="text/javascript">
var a = document.getElementById("div1")
$(a).css("background-color","blue");
</script>
(4) jQuery对象虽然是个集合,但是可以操作这个整体!
ps:内置了隐式循环,本质上还是在操作单个元素,只不过这个过程给我们自动封装完毕了。
jQuery选择器
基本选择器
- 标签选择器:
$("标签名")
- id选择器:
$(“#id属性值”)
- 类class选择器:
$(“.class属性值”)
- *通配选择器 :
$(“*”)
表示匹配所有标签
层级选择器
- 后代选择器
parent child
,使用空格隔开。获取到父级元素下所有的child(祖孙关系) - 子代选择器
parent > child
,用>隔开。获取到父级下的子元素(父子关系) - 相邻兄弟选择器
prev +next
,使用+隔开,获取到prev元素同级以下紧挨着的next元素(兄弟关系) 同级以上不选择 - 一般兄弟选择器 prev ~
next,使用~隔开,获取到prev元素同级以下所有的next元素(兄弟关系) 同级以上不选择
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>层级选择器</title>
</head>
<body>
<p>与外层div同级别0</p>
<div id="out">
<p>段落1</p>
<div>
<p>内部段落2</p>
</div>
<div>
<p>内部段落3</p>
</div>
</div>
<p>与外层div同级别1</p>
<p>与外层div同级别2</p>
<p>与外层div同级别3</p>
<p>与外层div同级别4</p>
<p>与外层div同级别5</p>
</body>
<script type="text/javascript" src="js/jquery-3.4.1.min.js">
</script>
<script type="text/javascript">
// 后代选择器 : parent child,使用空格隔开。获取到父级元素下所有的child(儿子、孙子、曾孙子、...)(祖孙关系)
$("#out p").css("color","red");
// 子代选择器 : 用>隔开。获取到父级下的子元素(儿子)(父子关系)
$("#out>p").css("background-color","yellow");
// 相邻兄弟 : prev+next,获取到prev元素同级以下紧挨着的next元素(兄弟关系)
$("#out+p").css("font-size","40px");
// 一般兄弟 : prev ~ next,使用~隔开,获取到prev元素同级以下所有的next元素(兄弟关系)
$("#out~p").css("font-weight","bold");
</script>
</html>
过滤选择器
:first 第一个
:last 最后一个
:eq(下标) 指定索引下的
:gt(下标) 大于指定索引下的所有
:lt(下标) 小于指定索引下的所有
:odd 奇数下标下的所以 奇偶指的是下标!!!下标从0开始
:even 偶数下标下的所有
:not(选择器) 除去括号内的
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>过滤选择器</title>
</head>
<body>
<div>1</div>
<div class="div2">2</div>
<div>3</div>
<div class="div2">4</div>
<div>5</div>
<div>6</div>
</body>
<script type="text/javascript" src="js/jquery-3.4.1.min.js">
</script>
<script type="text/javascript">
// : first : 第一个
$("div:first").css("color","red");
// :last 最后一个
$("div:last").css("color","red");
// :eq(下标)
$("div:eq(3)").css("color","red");
// 坐标从0开始
// :odd 奇数下标
// :even 偶数下标
$("div:odd").css("background-color","yellow");
$("div:even").css("font-size","40px");
// :gt(下标) : 大于参数下标
$("div:gt(2)").css("padding-left","50px");
// : lt(下标) : 小于参数下标
$("div:lt(2)").css("padding-left","100px");
// : not(选择器) 排除掉参数选择器之外的其他标签
$("div:not(.div2)").css("background-color","blue");
</script>
</html>
属性选择器
根据属性值的内容组成及特点来进行筛选,很少使用
[属性名] 找到所有添加了此属性的标签
[属性名=值] 找到所有添加了此属性并且是这个值的标签
[属性名!=值] 没有指定属性名的或者属性名不等于指定值的
[属性名^=值] 找到所有添加了此属性并且以这个值开头的标签
[属性名$=值] 找到所有添加了此属性并且以这个值结尾的标签
[属性名*=值] 找到所有添加了此属性并且包含这个值的标签
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>属性选择器</title>
</head>
<body>
<div class="div1">1</div>
<div class="div1">2</div>
<div class="iv3">3</div>
<div class="v5">4</div>
<div class="ccc">5</div>
<div>6</div>
<div>7</div>
</body>
<script type="text/javascript" src="js/jquery-3.4.1.min.js">
</script>
<script type="text/javascript">
// [属性名] 找到所有添加了此属性的标签
$("div[class]").css("color","red");
// [属性名=值] 找到所有添加了此属性的标签
$("div[class=div1]").css("background-color","yellow");
// [属性名!=值] 没有指定属性名的或者属性名不等于指定值的
$("div[class!=div1]").css("font-size","40px");
// [属性名^=值] 包含指定的属性, 并且以值为开头
$("div[class^=c]").css("background-color","blue");
// [属性名$=值] 包含指定的属性, 并且以值为结尾
$("div[class$=3]").css("font-weight","bold");
// [属性名*=值] 包含指定的属性, 并且属性值中包含等号右边的值
$("div[class*=v]").css("padding-left","50px");
</script>
</html>
表单选择器
基本表单选择器、表单过滤选择器!
基本表单选择器:
:input 单独的:input表示获取到表单中所有可输入元素 select和textarea也算
:text 所有类型为text的input元素
:password
:checkbox
:radio
...
表单过滤选择器:
input:checked 选择被选中的单选框或者复选框
option:selected 选择被选中的option下拉选项
:enabled 选择可用的表单元素
:disabled 选择禁用的表单元素
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>表单选择器</title>
</head>
<body>
<form action="01_label1.html" method="post">
姓名 : <input type="text" name="uname" disabled="disabled"/><br />
密码 : <input type="password" name="pass" placeholder="请输入密码"/><br />
性别 : <input type="radio" name="sex" value="男" checked="checked"/>男
<input type="radio" name="sex" value="女"/>女<br />
爱好: <input type="checkbox" name="hobby" value="唱歌"/>唱歌
<input type="checkbox" name="hobby" value="跳舞" checked="checked"/>跳舞
<input type="checkbox" name="hobby" value="rap"/>rap
<input type="checkbox" name="hobby" value="打篮球"/>打篮球<br />
文件 : <input type="file" name="file"/><br />
生日: <input type="date" name="bir"/><br />
学历 : <select name="degree">
<option value="研究生">研究生</option>
<option value="本科" selected="selected">本科</option>
<option value="幼儿园">幼儿园</option>
</select><br />
个人简介:
<textarea name="tex" rows="30" cols="35">请阅读以下协议:</textarea><br />
<input type="submit"/> <input type="reset"/>
</form>
</body>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
// :input 表示获取到表单中所有可输入元素标签 select和textarea也算
console.log($(":input").length);// 14
// :password : 表示筛选出所有type属性为password输入框
console.log($("input:password").css("border","2px blue solid"));
// input:checked 选择被选中的单选框或者复选框
// option:selected 选择被选中的option下拉选项
// :enabled 选择可用的表单元素
// :disabled 选择禁用的表单元素
console.log($("input:checked"));
console.log($("option:selected").val());// 本科
console.log($("input:disabled").length);
console.log($("input:enabled").length);
</script>
</html>
特殊选择器this
this是原生js中的关键字,表示自身对象!!!
在jQuery中自身对象的表示形式为$(this)
this存在于方法中,代表此方法的调用者!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>this特殊选择器</title>
</head>
<body>
<div id="div1">BLOCK1</div>
<div id="div2">BLOCK2</div>
</body>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
var div1 = document.getElementById("div1");
div1.onclick = function(){
//此时this相当于div1
this.style.color = "red";
}
$("#div2").click(function(){
//此时$(this)相当于$("div")
$(this).css("color","red");
});
</script>
</html>
jQuery事件绑定
jQuery中的事件与javaScript中的事件类似,只是事件名不再以on开头,在javaScript事件名的基础上去掉on就是jQuery事件。
给页面中的某个标签绑定事件,首先需要通过jQuery选择器获取到该元素,然后通过.
给该元素绑定不同类型的jQuery事件方法,方法内部是通过事件函数来完成具体的功能。
基本语法:
$(“选择器”).事件方法名(function(){
函数体;
});
例如,我们我要给一个id为btn的按钮绑定一个单击事件,则写法如下:
$(“#btn”).click(function(){ 函数体 });
js中的事件与jQuery中事件比较:
- jQuery中事件名称就是js中事件名称去掉on
- 语法结构上略微不同
js对象.事件名 = function(){
// 事件行为动作
}
jQuery对象.事件名( function(){
// 事件行为动作
})
jQuery动画效果
jQuery中提供了许多设计好、内置的动画方法,每一个动画方法实现动画的方式不一致!
常见的动画效果有三组:
下面几个动画方法,参数都是通用的:
参数1:动画的执行时间,这个必须设置,如果不设置,没有动画效果!
时间取值,可以是具体的毫秒值,也可以使用固定的英文单词fast、slow
参数2:动画的回调函数callback,当动画完成时,执行的方法
举例 :
jQuery对象.show(1000,function(){
jQuery对象显示需要1000毫秒才能完全展示出来;
第二个参数,当标签已经完全展现之后, 可以调用一个函数,就是function;
第二个参数可以不存在
});
第一组:
show() hide() toggle()
实现显示与隐藏, toggle表示取反
通过改变标签的width、height、opacity不透明度来实现的!
第二组:
fadeIn() fadeOut() fadeToggle()
实现淡入淡出, toggle表示取反
通过改变不透明度opacity来实现动画效果的!
第三组:slideDown() slideUp() slideToggle()
下拉显示、上卷隐藏、取反
通过改变height高度来实现动画效果的!
案例效果: div块的展示, 消失, 和切换都需要2秒钟动画完成
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery中动画效果</title>
<style type="text/css">
div{
width:300px;
height:300px;
background-color: red;
}
</style>
</head>
<body>
<input type="button" value="show"/>
<input type="button" value="hide"/>
<input type="button" value="toggle"/>
<div></div>
</body>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
$("input:first").click(function(){
// 下拉显示
$("div").slideDown(2000,function(){
console.log("div展示完毕");
})
})
$("input:eq(1)").click(function(){
// 上拉隐藏
$("div").slideUp(2000);
})
$("input:last").click(function(){
// 取反
$("div").slideToggle(2000);
})
</script>
</html>
jQuery操作标签的css样式
-
jQuery改变标签css样式的方式:
使用css方法改变一个css样式 :css("css属性名称", "值");
而且css属性名称与最原始的css属性名一致,与js中的属性名要区分!
使用css方法同时改变多个css样式css({ "css属性名称": "值", "css属性名称": "值", "css属性名称": "值" });
-
addClass() removeClass() toggleClass()
这三个方法是通过操作标签的类名来完成样式的添加与移除的!
addClass(“类名1 类名2 ...”)
为标签添加类名,多个类名使用空格隔开
removeClass(“类名1 类名2 ...”)
移除标签的类名,多个类名使用空格隔开
toggleClass(“类名1 类名2 ...”)
切换类名,有则移除、没有则添加!
$("div").css("color","red");
$("div").css({
"width":"300px",
"height":"300px",
"background-color":"yellow"
});
$("div").addClass("font fontWeight");
$("div").removeClass("font");
$("div").toggleClass("font fontWeight");
jQuery操作标签的行间属性
-
原生js中操作行间属性:
js对象.行间属性名 = “值” js对象.setAttribute(“行间属性名”, “行间属性值”);
-
jQuery中操作标签行间属性的方法:
attr()
attr(“行间属性名”) ==> 获取行间属性的值
attr(“行间属性名”, “值”) ==> 为行间属性赋值或者修改值
prop()
prop(“行间属性名”) ==> 获取行间属性的值
prop(“行间属性名”, “值”) ==> 为行间属性赋值或者修改值
以上两个方法的区别主要在于,操作的行间属性是否是固有属性,也就是是否是标签固有的属性!
注意 : 举例,表单元素input有一个行间属性value,表示表单元素的值!div没有value属性!操作标签自带的属性使用prop()方法,而操作自定义的属性通常使用attr()!
在jQuery1.5的版本后,已经不再对attr()方法进行维护,现在都是使用prop()进行行间属性的操作!
jQuery中的DOM操作
页面内容的增删改查
添加
内部添加
A.append(B) 表示将b标签添加到A标签内部的最后
A.prepend(B) 表示将b标签添加到A标签内部的最前面
同级添加
A.after(B) 表示将b标签添加到A标签的同级以下紧挨着的位置
A.before(B) 表示将b标签添加到A标签的同级以上紧挨着的位置
var $font = $("<font>我后添加到页面上,使用jQuery形式添加</font>");
$("div").append($font);
$("div").prepend($("<a href='http://www.baidu.com' target='_blank'>百度</a>"))
删除
empty()
严格意义上来说,empty()是清空操作,只把标签内部所有的内容删除,但是标签本身得到了保留
remove()
将标签本身及标签内部所有的内容都删除
支持传递筛选的选择器,选择性的删除内容 remove(“选择器”)
$("div").empty(); // 清空div中所有内容
$("div").remove(); // 删除div标签以及其内部所有内容
$("div font").remove(); // 删除div中的所有font后代标签
$("div font").remove("#fo"); // 删除div中id为fo的后代标签
查询
$(“选择器”)
修改
- 修改css样式
js:js对象.style.css样式名称 = “值”;
jQuery:css({“属性名”:”属性值”…})
addClass() removeClass() toggleClass() - 行间属性
js: js对象.行间属性
js对象.setAttribute(“属性名”,”属性值”)
jQuery:prop(“属性名”,”属性值”) - 修改标签内容
js:
普通标签 innerText innerHTML
表单元素 value属性值
jQuery:
普通标签: text() 函数, html()函数
text()只能解析纯文本
html()除了解析纯文本,还可以解析html结构
表单元素 val()
jQuery的遍历
jQuery对象集合.each(function(index, ele) {
遍历的代码
})
$.each(jQuery对象集合, function(index, ele) {
遍历的代码
})
给参数有2种情况
两个参数:第一个是下标,第二个是遍历到的对象(js对象)
一个参数:代表下标
jQuery对象集合:比如$(数组)
jQuery表单校验插件(了解)
表单校验主要去进行数据合理性的校验。
比如:
非空、长度、内容组成、一致等!
针对表单校验的问题,jQuery提供了一个插件,叫做validation,这个插件内置了许多默认的校验规则,我们针对某些常见的或者通用的校验内容,可以直接给定其提供的校验规则,而不需要再书写额外的校验代码,提高了开发效率!
-
导入表单校验插件需要的js文件
必须先导入jQuery文件,因为校验插件的语法就是jQuery语法!validate.js就是核心的表单校验脚本,messages_zh.js就是语言脚本,默认校验提示信息为英文,只有导入了语言脚本,才能显示中文信息!<script type="text/javascript" src="js/jquery-3.3.1.js"></script> <script type="text/javascript" src="js/jquery.validate.js"></script> <script type="text/javascript" src="js/messages_zh.js"></script>
-
使用校验插件,完成表单的校验。
校验插件中提供的默认的校验规则:
-
jQuery表单对象调用 validate方法,使校验规则生效
$("form").validate();
使用方法一:书写在行间属性上
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery中的对于表单验证的插件使用</title>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="js/jquery.validate.js"></script>
<script type="text/javascript" src="js/messages_zh.js"></script>
<script type="text/javascript">
onload = function(){
$("form").validate();
}
</script>
</head>
<body>
<form action="" method="get">
用户名:<input type="text" name="username" id="username" required="true" rangelength = "[5,15]"/><br />
密码:<input type="password" name="password" id="password" required="true" rangelength = "[3,6]"/><br />
确认密码:<input type="password" name="cpwd" id="cpwd" required="true" equalTo = "#password"/><br />
邮箱:<input type="text" name="email" id="email" required="true" email="email"/><br />
生日:<input type="text" name="birthday" id="birthday" required="true" dateISO="yyyy-MM-dd"/><br />
<input type="submit" value="提交" />
</form>
</body>
</html>
使用方法二:书写在js代码中,与html结构完成分离
这样即可以自定义提示文本,又能够增强代码的可读性。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery中的对于表单验证的插件使用2</title>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="js/jquery.validate.js"></script>
<script type="text/javascript" src="js/messages_zh.js"></script>
<script type="text/javascript">
onload = function(){
$("form").validate({
rules:{
"username":{
required:true,
rangelength:[5,15]
},
"password":{
required:true,
rangelength:[5,15]
}
},
messages:{
"username":{
required:"用户名不能为空",
rangelength:"用户名长度需要在5-15之间"
},
"password":{
required:"密码不能为空",
rangelength:"用户名长度需要在3-6之间"
}
}
});
}
</script>
</head>
<body>
<form action="" method="get">
用户名:<input type="text" name="username" id="username"/><br />
密码:<input type="password" name="password" id="password"/><br />
确认密码:<input type="password" name="cpwd" id="cpwd"/><br />
邮箱:<input type="text" name="email" id="email"/><br />
生日:<input type="text" name="birthday" id="birthday"/><br />
<input type="submit" value="提交" />
</form>
</body>
</html>