文章目录
jQuery
PS:
1)目录带了数字0,表示有需要注意的点
2)【】表示重要
3)删除线表示已经解决
Ⅰ、概述
一、JS与jQuery的区别与联系
1、js是一种脚本语言,常用于网页客户端编程,使网页在客户端浏览器中,实现更多地动态功能,表现出更加丰富的视觉效果。
2、jQuery 是一个简洁而快速的 JavaScript 库,可用于简化事件处理,HTML 文档遍历,Ajax 交互和动画,以便快速开发网站。jQuery 简化了 HTML 的客户端脚本,从而简化了 Web 2.0 应用程序的开发。
jQuery就是JS的框架(一个js文件,里面封装了很多方法)
二、准备工作
1、下载jQuery(https://jQuery.com/)
1)、压缩版(带min文字)
2)、未压缩版本
功能一样,未压缩版有大量注释,便于学习
2、将下载好的.js文件复制到JS文件夹即可,使用导入即可
3、就绪函数($等价于jQuery)
<script type="text/javascript">
/*第一种就绪函数*/
jQuery(document).ready(function(){
……
});
/*第二种就绪函数*/
$(document).ready(function(){
……
});
/*第三种就绪对象*/
$(function(){
……
});
</script>
4、jQuery的ready与window的onload的区别
三、DOM对象与jQuery对象相互转换
<script type="text/javascript" src="js/jquery-3.5.1.js" ></script>
<script type="text/javascript">
$(function(){
var DOM_div = document.getElementById("div0");
var jQuery_div = $("#div0");
/*DOM转jQuery*/
var DOM_$ = $(DOM_div);
alert(DOM_$.text());
/*jQuery转DOM*/
var $_DOM1 = jQuery_div[0];
alert($_DOM1.innerText);
var $_DOM2 = jQuery_div.get(0);
alert($_DOM2.innerText);
})
</script>
</head>
<body>
<div id="div0">are you ok?</div>
</body>
PS:
1)jQuery获取元素,类似css中的选择器
2)DOM对象转jQuery对象类似Java中的构造函数
3)jQuery转DOM对象,类似数组的使用
Ⅱ、六类选择器0
一、基本选择器
标签、ID、Class、全局(*)选择器
$("div")、$("#div")、$(".div0")、$("*")
✳号表示整个页面(html)
二、同级选择器(可以使用星号代替任意元素)
1)后代选择器——用空格隔开,它的孙子等都会被选中
$("div p")
2)子元素选择器——用大于符号隔开
$("div>p")
3)同级相邻元素选择器——用加号隔开
$("div+p") 只能找到它后面的紧挨着的元素
4)同级元素选择器——用波浪号隔开
$("div~p") 它后面的元素都能被找到
三、过滤选择器
针对一系列相同但是没有特征的标签(针对索引,除了not)
:first 第一个索引的元素
:last 最后一个索引的元素
:eq(index) 当前索引的元素
:gt(index) 大于index的索引的元素
:lt(index) 小于index的索引的元素
:odd 奇数(Odd number)索引的元素
:even 偶数(even numbers)索引的元素
:not(id或者class) 除了某某以外
例如,$("div:not(#first)")——div中除了id=first的元素以外的其他元素
四、属性选择器
根据标签的属性及属性值来获取
[attribute]含有某属性的标签
[attribute=""]某属性等于某值的标签
[attribute!=""]某属性不等于某值的标签
[attribute^=""]某属性的值以某内容开头的标签
[attribute$=""]某属性的值以某内容结尾的标签
[attribute*=""]某属性的值含有某内容的标签
例如,
$("div[title^='test']"),解释:div标签中title属性的值以test开头的标签
$("div[title$='test']"),解释:div标签中title属性的值以test结尾的标签
$("[name='hobby']"),解释:name属性为hobby的全部标签
五、表单选择器
1、表单基本选择器
可以用属性选择器代替
2、表单过滤选择器
1)enabled(可以使用的)、disabled(不可用的)
2)selected被选取的元素
【注意】:针对下拉列表option,不是input
$("option :selected").val(); 获取被选中的option的value
3)checked被选种的元素
【注意】:针对单选,或者多选。所以最好区分一下
$("[type=checkbox] :checked").val(); 获取被选中的多选的value
六、this
this表示DOM对象(可以使用$()转为jQuery对象)
示例说明:
1、没有使用this
<script type="text/javascript">
$(function(){
$("#input0").click(function(){
alert($("#input0").val());
});
});
</script>
</head>
<body>
<input type="checkbox" id="input0" value="123" />
</body>
2、使用this,并转为jQuery对象
<script type="text/javascript">
$(function(){
$("#input0").click(function(){
alert($(this).val());
});
});
</script>
</head>
<body>
<input type="checkbox" id="input0" value="123" />
</body>
3、使用this,可以直接使用DOM对象
<script type="text/javascript">
$(function(){
$("#input0").click(function(){
alert(this.value);
});
});
</script>
</head>
<body>
<input type="checkbox" id="input0" value="123" />
</body>
Ⅲ、使用到的一些常用方法
css(“属性”,“值”)——修改css样式;只写属性值可以返回value(获取长宽返回值自带px)
val()——获取value值
click() ——等同于点击时间onclick
new Date().getMonth()——获取的时间是从0开始的,需要手动加一
new Date().getDate()——获取天数
new Date().getDay()——获取星期几(星期天为0,需要手动转换)
html()——同DOM中的innerHtml,无参获取当前对象的所有内容;有参,参数设置空,可以达到清除的效果
text()——同DOM中的innerText,无参获取当前对象的文字内容;有参,参数设置空,可以达到清除的效果
一、jQuery特效
用于处理元素显示和隐藏的函数
1、显示与隐藏
show(speed,callback) 显示元素
hide(speed,callback) 隐藏元素
toggle(speed,callback) 显示与隐藏之间切换
参数说明:
可以不写参数
speed:规定隐藏、显示的速度。取值:slow、fast、millisecond(毫秒)
callback:隐藏和显示完成后执行的回调函数的名称。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery的特效之显示和隐藏</title>
<script type="text/javascript" src="js/jquery-3.5.1.js" ></script>
<script type="text/javascript">
$(function(){
$("#show").click(function(){
$("img").show();
});
$("#hide").click(function(){
$("img").hide(1000,alert("我被隐藏了"));
});
$("#taggle").click(function(){
$("img").toggle();
});
});
</script>
</head>
<body>
<input type="button" id = "show" value="显示"/>
<input type="button" id="hide" value="隐藏" />
<input type="button" id="taggle" value="切换" /><br/>
<img src="img/征集令背景主图.jpg" style="" />
</body>
</html>
2、淡入淡出
fadwIn(speed,callback) 淡入已隐藏的元素
fadeOut(speed,callback) 淡出可见的元素
fadeToggle(speed,callback) 淡入淡出之间相互转换
参数说明:
可以不写参数
speed:规定隐藏、显示的速度。取值:slow、fast、millisecond(毫秒)
callback:隐藏和显示完成后执行的回调函数的名称。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery的特效之淡入和淡出</title>
<script type="text/javascript" src="js/jquery-3.5.1.js" ></script>
<script type="text/javascript">
$(function(){
$("#fadein").click(function(){
$("img").fadeIn();
});
$("#fadeout").click(function(){
$("img").fadeOut(1000,alert("我要淡出了"));
});
$("#toggle").click(function(){
$("img").fadeToggle(1000);
});
});
</script>
</head>
<body>
<input type="button" id = "fadein" value="淡入"/>
<input type="button" id="fadeout" value="淡出" />
<input type="button" id="toggle" value="切换" /><br/>
<img src="img/征集令背景主图.jpg" style="" />
</body>
</html>
3、滑动
slideDown(speed,callback) 向下滑动元素,用于显示
slideUp(speed,callback) 向上滑动元素,用于隐藏
slideToggle(speed,callback) 切换
参数说明:
可以不写参数
speed:规定隐藏、显示的速度。取值:slow、fast、millisecond(毫秒)
callback:隐藏和显示完成后执行的回调函数的名称。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery的特效之淡入和淡出</title>
<script type="text/javascript" src="js/jquery-3.5.1.js" ></script>
<script type="text/javascript">
$(function(){
$("#slideDown").click(function(){
$("img").slideDown();
});
$("#slideUp").click(function(){
$("img").slideUp(2000,up);
});
$("#toggle").click(function(){
$("img").slideToggle(2000);
});
function up(){
alert("我向上滑出了")
}
});
</script>
</head>
<body>
<input type="button" id = "slideDown" value="滑入"/>
<input type="button" id="slideUp" value="滑出" />
<input type="button" id="toggle" value="切换" /><br/>
<img src="img/征集令背景主图.jpg" style="" />
</body>
</html>
示例——牛皮癣广告
button按钮加淡入、淡出没有效果
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery的特效之淡入和淡出</title>
<script type="text/javascript" src="js/jquery-3.5.1.js" ></script>
<script type="text/javascript">
$(function(){
window.setTimeout(function(){
$("img").slideDown();
},2000);
$("#slideUp").click(function(){
$("img").slideUp(2000);
});
});
</script>
</head>
<body>
<input type="button" id="slideUp" value="×" style="position: fixed; bottom: 330px;right: 6px;"/>
<img src="img/牛皮癣.jpg" style="position: fixed;bottom: 10px; right: 5px;display: none;" />
</body>
</html>
二、jQuery操作元素CSS
1、css(…)
css("属性")、css("属性","值")、css({"属性1":"值","属性2":"值",……})
2、addClass(“class值”)给标签加class
3、removeClass(“class值”)移除class
4、toggleClass()在addClass和removeClass上切换
注意:需要先有改class的样式,并且没有什么太多的变化时一般不使用addClass()和removeClass(),直接在css层叠表设置即可上设置即可
示例——隔行换色,加高亮
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="js/jquery-3.5.1.js" ></script>
<script type="text/javascript">
$(function(){
/*给第一行加颜色*/
$("tr:first").css({"background-color":"black","color":"white"});
/*给偶数行加class = gray*/
$("tr:even").addClass("gray");
/*给tr加高亮(移动鼠标到tr上,给该tr加颜色。移开鼠标,变回原本的样式)*/
$("tr").mouseover(function(){
$(this).removeClass();//先把偶数行的class删除(应该不用手动去除。不过我这重新赋值不会被替换)
$(this).addClass("mouse")
}).mouseleave(function(){
$(this).removeClass("mouse");
$("tr:even").addClass("gray");
});
});
</script>
<style>
.mouse{
background-color: bisque;
}
.gray{
background-color: darkgray;
}
</style>
</head>
<body>
<table border="1px" cellpadding="5px" cellspacing="5px" >
<thead>
<th>姓名</th>
<th>年龄</th>
</thead>
<tr>
<td>何某某</td>
<td>18</td>
</tr>
<tr>
<td>徐某某</td>
<td>18</td>
</tr>
<tr>
<td>韩某某</td>
<td>17</td>
</tr>
<tr>
<td>某某</td>
<td>17</td>
</tr>
</table>
</body>
</html>
三、jQuery操作元素属性 0
1、attr(),同下,略
2、*prop(),推荐使用
对象.prop("属性名") 获取属性值
对象.prop("属性名","值") 设置属性值
区别:
1)attr先面世
2)自定义属性需要使用attr()获取、设置
3)attr() jQuery1.5之后不再维护,容易出问题。推荐使用prop
示例——全选、反选
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>全选、反选</title>
<script type="text/javascript" src="js/jquery-3.5.1.js" ></script>
<script type="text/javascript">
$(function(){
//全选的点击事件
$("#allcheck").click(function(){
//属性选择器(不用循环赋值,jQuery的强大之处)
//让每个name叫elemcheck的多选项的状态与全选选项的状态相同
$("[name='elemcheck']").prop("checked",$(this).prop("checked"));
});
//反选的点击事件(点击反选,每个多选项状态就取反)
$("#backcheck").click(function(){
var flage = true;
$("[name='elemcheck']").each(function(index,state){
//循环获取自己的当前状态(是否被选中);自个的状态取反
$(state).prop("checked",!$(state).prop("checked"));
//判断多选项是否都被选中
flage &= $(state).prop("checked");
});
//反选时,全选不能被选中
if($(this).prop("checked")){
$("#allcheck").prop("checked",false);
}
//当多选项全部被选中时,全选也应该被选中
if(flage){
$("#allcheck").prop("checked",true);
}
});
//多选项全被被手动选中时,全选选项应该也被选中
});
</script>
</head>
<body>
全选<input type="checkbox" id="allcheck" /><br />
反选<input type="checkbox" id="backcheck" /><br />
第一<input type="checkbox" name="elemcheck" /><br />
第二<input type="checkbox" name="elemcheck" /><br />
第三<input type="checkbox" name="elemcheck" />
</body>
</html>
四、jQuery操作DOM(元素)0
对元素的操作不外乎:增、删、改、查。前面已经阐述过改、查了。这里讲解增、删
一、添加
1、*append() 在被选中的元素内部的结尾插入内容(添加到内部,内部的末尾位置)
2、prepend() 在被选中的元素内部的开始插入内容(添加到内部,内部的开始位置)
3、after() 在被选中的元素之后插入内容(添加到外面,当前元素之后)
4、before() 在被选中的元素之前插入内容(添加到外面,当前元素之前)
二、删除
5、remove() 删除被选中的元素及其子元素
三、补充
创建节点元素
var newNode=$("<li></li>"); //创建空的li
var newNode1=$("<li>123</li>"); //创建含文本的li
var newNode2=$("<li title='last'>123</li>"); //创建含属性的li
示例——省市联动
Ⅳ、validate表单验证
校验类型 | 取值 | 描述 |
required | true|false | 必填字段 |
| “@”或者”email” | 邮件地址 |
url |
| 路径 |
date | 数字 | 日期 |
dateISO | 字符串 | 日期(YYYY-MM-dd) |
number |
| 数字(负数,小数) |
digits |
| 整数 |
minlength | 数字 | 最小长度 |
maxlength | 数字 | 最大长度 |
rangelength | [minL,maxL] | 长度范围 |
min |
| 最小值 |
max |
| 最大值 |
range | [min,max] | 值范围 |
equalTo | jQuery表达式 | 两个值相同 |
remote | url路径 | ajax校验 |
一、步骤
1、下载工具
2、导入jquery.validate.js文件及其localization中的messages_zh.js文件
注意:这是依赖于jQuery的,所以需要先导入jQuery。一定要注意这个
3、绑定
//绑定验证方法
$("#test").validate();
4、指名验证规则
二、初始代码
<tr>
<td>用户名:</td>
<td>
<input type="text" name="username" required="true" rangelength="[3,10]"/>
</td>
</tr>
这样式的标签式的用法
三、初步优化代码
标签式的写法的弊端:
1、代码可读性差
2、提示语句不贴切
练习——validate表单验证之自定义提示语句
四、validate如何与数据库交互?
使用remote属性
<script type="text/javascript">
$(function(){
$("#form").validate({
rules:{
"name":{//账号
required:true,
rangelength:[6,12],
remote:{//与数据库交互
url:"user",//提交给那个servlet
type:"post",//提交方式
dataType:"json",//提交的数据类型
data:{//提交的数据
"method":"checkName",//这里的method指数据提交给servlet的那个方法(这里设置了BaseServelt用来匹配传进来的参数与方法)
"unumber":function(){//提交name属性为name的数据(就是提交账号)
return $("[name='name']").val();
}
}
}
},
"password":{//密码
required:true,
rangelength:[8,14]
},
"password2":{//确认密码
required:true,
equalTo:"#password"
},
"username":{//用户名(网名)
required:true,
},
"email":{//电子邮箱
required:true,
email:"email",
remote:{
url:"user",
type:"post",
dataType:"json",
data:{
"method":"checkEmail",
"uemail":function(){
return $("[name='email']").val();
}
}
}
}
},
messages:{
"name":{
required:"账号不能为空",
rangelength:"账号是6-12位字符",
remote:"账号被占用"
},
"password":{
required:"账号不能为空",
rangelength:"密码是8-14位字符"
},
"password2":{
required:"确认密码不能为空",
equalTo:"两次密码不一致"
},
"username":{
required:"用户名不能为空",
},
"email":{
required:"邮箱不能为空",
email:"邮箱格式不正确",
remote:"邮箱被占用"
}
},
/* 表单数据验证成功自动执行的方法 */
submitHandler:function(){
//序列化
var date = $("#form").serialize();
$.post("user",date,function(obj){
if(obj){
alert("注册成功,即将跳转自登录页面");
window.location.href = "login.jsp";//window可以省略
}else{
alert("注册失败,请重新注册");
}
},"json");
}
});
});
</script>