目录

1、概念

2、jQuery的安装

2.1 jQuery的版本

2.1 jQuery的下载

2.2 jQuery的使用

3、jQuery语法结构

3.1 基础语法: $(selector).action()

3.2文档就绪事件

3.3.jQuery的ready方法与JavaScript中的onload区别

4、jQuery选择器:

4.1 元素/标签选择器

4.2 #id 选择器

4.3 .class 选择器

4.4 全局选择器

4.5 并集选择器

4.6 后代选择器

4.7 子选择器

4.8 相邻选择器

4.9 同辈选择器

4.10 属性选择器

4.12 可见性选择器

4.13 所有选择器的案例

5、jQuery常用函数

5.1 与标签内容相关函数

5.2 与标签属性相关函数

5.3 与标签样式相关函数

6、jQuery与js对象的转换

7、jQuery中的事件

7.1 常用DOM事件列表

7.2常用的 jQuery 事件方法

8、jQuery操作DOM

8.1 元素的增加

8.2 元素的克隆

8.3 元素的替换

8.4 元素的删除

9、jQuery效果

9.1 隐藏和显示

9.2 淡入和淡出

10、基于jQuery实现表单验证

11、 jQuery案例

11.1 全选/全不选

11.2 动态时间

11.3 动态表格

11.4 省市级联


1、概念

jQuery是一个JavaScript函数库jQuery是一个轻量级的"写的少,做的多"JavaScript库。

优势:

1.降低代码的耦合性,减少硬编码,不需要在元素中添加onclick,onchange等事件,可以动态向元素中填充html()或者追加append其他元素,实现软编码。

2.选择器比较多,定位元素比较容易

3.代码比较简洁

jQuery库包含以下功能:

HTML 元素选取
 
HTML 元素操作
 
CSS 操作
 
HTML 事件函数
 
JavaScript 特效和动画
 
HTML DOM 遍历和修改
 
AJAX
 
Utilities
 
提示: 除此之外, jQuery 还提供了大量的插件。
 
目前网络上有大量开源的 JS 框架 , 但是 jQuery 是目前最流行的 JS 框架 ,而且提供了大量的扩展。
 

2jQuery的安装

2.1 jQuery的版本

jQuery 版本有很多,分为 1.x 2.x 3.x
 
1.x 版本:能够兼容 IE678 浏览器
 
2.x 版本:不兼容 IE678 浏览器
 
1.x 2.x 版本 jquery 都不再更新版本了,现在只更新 3.x 版本。
 
3.x 版本:不兼容 IE678 ,更加的精简(在国内不流行,因为国内使用 jQuery 的主要目的就是兼容 IE678
 
国内多数网站还在使用 1.x 的版本

2.1 jQuery的下载

jQuery有两个版本:生成环境使用的和开发测试环境使用的。

Production version - 用于实际的网站中,已被精简和压缩。
 
Development version - 用于测试和开发(未压缩,是可读的代码)
 

以上两个版本都可以从 jquery.com 中下载

2.2 jQuery的使用

jQuery 库是一个 JavaScript 文件,我们可以直接在 HTML 页面中通过 script 标签引用它,跟引用自己的
外部 JavaScript 脚本文件一样的语法。

3jQuery语法结构

jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作(actions)。

3.1 基础语法: $(selector).action()

说明:美元符号定义 jQuery
 
选择符( selector " 查询 " " 查找 " HTML 元素
 
jQuery action() 执行对元素的操作
 

3.2文档就绪事件

文档就绪事件,实际就是 文件加载事件
 
这是为了 防止文档在完全加载(就绪)之前运行 jQuery 代码,即在 DOM 加载完成后才可以对 DOM 进行操作。
 
如果在文档没有完全加载之前就运行函数,操作可能失败。 所以我们尽可能将所有的操作都在文档加载完毕之后实现。
 
注意:可以写多个文档就绪事件,不会覆盖,浏览器自上而下解析。
 
写法1:
 
     
 

写法2:简介写法-推荐

    

3.3.jQueryready方法与JavaScript中的onload区别

4jQuery选择器:

jQuery 选择器基于元素的 id 、类、类型、属性、属性值等 " 查找 " (或选择) HTML 元素。
 
它基于已经 存在的 CSS 选择器,除此之外,它还有一些自定义的选择器。
 
jQuery 中所有选择器都以美元符号开头:$()。

4.1 元素/标签选择器

jQuery 元素选择器基于元素 / 标签名选取元素。
 
语法:$("标签名称")
 

4.2 #id 选择器

jQuery #id 选择器通过 HTML 元素的 id 属性 选取指定的元素。
 
页面中元素的 id 应该是唯一的 ,所以在页面中选取唯一的元素需要通过 #id 选择器。
 
通过 id 选取元素语法如下:

4.3 .class 选择器

jQuery 类选择器可以通过指定的 class 查找元素。
 
$(".mydiv")

4.4 全局选择器

匹配所有元素

$("*")

4.5 并集选择器

将每一个选择器匹配到的元素合并后一起返回。

$("div,ul,li,.mydiv")

4.6 后代选择器

在给定的祖先元素下匹配所有的后代元素

$("form input")

4.7 子选择器

在给定的父元素下匹配所有的子元素
 
$("form > input")

4.8 相邻选择器

匹配所有紧接在 prev 元素后的 next 元素
 
$("label + input")
 
表示所有label标签后面紧跟着的input标签
 

4.9 同辈选择器

匹配 prev 元素之后的所有 siblings 元素
 
$("form ~ input")
 
表示和form标签同辈(同层次)的所有input标签
 

4.10 属性选择器

 

4.12 可见性选择器

匹配(选中)所有的可见或不可见的元素
 
$("div:visible");
匹配所有可见的div元素
 
 
$("input:hidden");
 
匹配所有隐藏/不可见的input元素,就是上述两个input,有两个样式:
 
display:none
 
type=hidden
 

4.13 所有选择器的案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>选择器</title>
		<script type="text/javascript" src="js/jquery-3.3.1.js" ></script>
		<script>
			//1、标签选择器:
			function htmlSelector(){
				//获取所有的div元素(集合)
				var divList=$("div");
				console.log(divList);//jQuery的对象
				console.log(divList.length);
				for(var i=0;i<divList.length;i++){
					console.log(divList[i]);//js的对象
					//将js对象转换为jQuery的对象
					console.log($(divList[i]));
				}
			}
			//2、id选择器
			function idSelector(){
				//根据id获取到的元素是惟一的,即使页面上有重名的id,获取的是第一个
				var p=$("#p1");
				console.log(p.html());
			}
			//3、.class选择器
			function classSelector(){
				var list=$(".mydiv");
				console.log(list.length);
			}
			//4、 全局选择器
			function allSelector(){
				var list=$("*");//包括了html、head、title.....所有标签
				console.log(list.length);
				for(var i=0;i<list.length;i++){
					console.log(list[i]);//js的对象
				}
			}
			//5、并集选择器
			function andSelector(){
				var list=$(".mydiv,p,li");
				printList(list);
			}
			//6、后代选择器:包括所有的后代,儿子和孙子辈都有
			function subSelector(){
				var list=$("form input");
				printList(list);
			}
			//7、子选择器:只有子元素
			function sunSelector(){
				var list=$("form>input");
				printList(list);
			}
			//8、相邻选择器
			function nextSelector(){
				var list=$("label + input");
				printList(list);
			}
			//9、同辈选择器
			function sublingsSelector(){
				var list=$("form ~ div");
				printList(list);
			}
			//10、属性选择器
			function attrSelector(){
				var list=$("div[id]");//获取所有有id属性的div的元素集合
				list=$("div[class]");//获取所有有class属性的div的元素集合
				list=$("input[name='userName']");//获取所有input标签中name属性是userName元素的集合
				list=$("input[name^='user']");//获取所有input标签中name属性是user开头的元素的集合
				list=$("input[name$='user']");//获取所有input标签中name属性是user结尾的元素的集合
				list=$("input[name*='user']");//获取所有input标签中name属性包含了user的元素的集合
				list=$("input[id][name^='user']");//获取所有input标签中既有id属性又有name属性以user开头的元素的集合
				printList(list);
			}
			//11、可见性选择器
			function seeSelector(){
				//匹配所有的可见div元素
				var list=$("div:visible");
				//匹配所有的不可见div元素
				var list=$("div:hidden");
				//匹配所有的不可见input元素,样式有display:none的元素和type=hidden的元素
				list=$("input:hidden");
				printList(list);
			}
			//文档就绪事件:页面加载完毕之后执行:
			$(function(){
				seeSelector();
			});
			//打印集合
			function printList(list){
				for(var i=0;i<list.length;i++){
					console.log(list[i]);
					console.log(list[i].innerHTML);//非表单项元素使用该种方式输出
					console.log(list[i].value);//只有表单项元素才有value
				}
			}
		</script>
	</head>
<body>
	<form>
		<label>用户名:</label>
		<input type="hidden" name="userId" value="1001" />
		<input style="display: none;" value="隐藏的input" />
		<input id="userName" name="userName" value="jiaobaoyu" /><br />
		<label>密码:</label>
		<input name="userPass" type="password" value="1234567"/><br />
		<fieldset>
			电话:<input id="phone" name="phoneuser" value="13712345789"/><br/>
			邮箱:<input name="emailuser" type="email" value="lina@sina.com"/>
		</fieldset>
	</form>
	地址:<input name="addressuser1" value="北京" /><br />
	<ul>
		<li>li111111</li>
		<li>li111111</li>
		<li>li111111</li>
	</ul>
	<p id="p1">p111111111111</p>
	<div id="div1" class="mydiv" style="display: none;" >div1</div>
	<div class="mydiv">div2</div>
	<div id="div3">div3</div>
</body>
</html>

5jQuery常用函数

5.1 与标签内容相关函数

$("div").html()

获取的是第一个匹配元素的围堵标签中的所有内容,包括了嵌套在内部的标签

$("div").text();

获取的是第一个匹配元素的围堵标签中的所有文本,不包含标签的内容

$("div").val();

val()只能用在表单项元素中,div不是表单元素,所以val()获取不到任何内容

$("input").val();

input是表单项元素,val()可以获取到第一个匹配元素的围堵标签的内容

以上获取标签内容获取的都是选中的第一个元素。

5.2 与标签属性相关函数

设置属性

img.attr("src","img/cat.jpg");

img.attr("title","不服!");

移除属性

img.removeAttr("title");

获取属性

img.attr("src");

获取checked属性使用prop函数,获取到的值是boolean类型,表示是否被选中

若使用attr方法,获取到的是checked属性的值checked.

$("input[type='radio']")

$(list[i]).prop("checked")

$(list[i]).attr("checked")

注意,若是获取属性attr,获取的是匹配到的第一个元素的属性,若是设置属性,比如只要是img元素都会被绑定src属性

5.3 与标签样式相关函数

给获取的元素添加、删除、切换已有的样式

PS:样式一定是在样式表中提前定义好的,我们通过给元素添加class属性等来绑定样式

$("div").addClass("redBg");

通过给(所有)div添加两个类属性redBg 和fontColor同时绑定两个样式。

$("div").addClass("redBg fontColor");

$("div").removeClass("fontColor");

没有参数的时候直接移除所有的样式

$("div").removeClass();

匹配元素如果有当前的样式就删除,如果没有就添加---用于切换样式

$("div").toggleClass("fontColor");

给所有的元素添加样式,样式直接添加,无需提前定义

$("input").css("border-color","blue");
$("input").css({"color":"red","border-color":"green"});

 

同样的,比如$("div").addClass("redBg");是给所有div元素设置class属性,绑定背景样式。

总之就是:取元素时取出的是第一个匹配的元素,若是添加属性、内容或者样式时是所有匹配的元素都被添加上了。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title><script type="text/javascript" src="js/jquery-3.3.1.js" ></script>
		<style>
			.redBg{
				background-color: red;
			}
			.fontColor{
				color: gold;
			}
		</style>
		<script>
			//1、与内容相关的函数
			function textFun(){
				var str1=$("div").html();//获取的是第一个匹配元素的围堵标签中的所有内容,包括了嵌套在内部的标签
				console.log(str1);
				var str2=$("div").text();//获取的是第一个匹配元素的围堵标签中的所有文本,不包含标签的内容
				console.log(str2);
				var str3=$("div").val();//val()只能用在表单项元素中,div不是表单元素,所以val()获取不到任何内容
				var str4=$("input").val();//input是表单项元素,val()可以获取到
				console.log(str3);
				console.log(str4);
			}
			//2、与属性相关的函数
			function attrFun(){
				var img=$("img");
				//设置属性
				img.attr("src","img/cat.jpg");
				img.attr("title","不服!");
				//移除属性
				img.removeAttr("title");
				//获取属性
				var src=img.attr("src");
				var title=img.attr("title");
				console.log(src+"===="+title);
				//获取checked属性使用prop函数,获取到的值是boolean类型,表示是否被选中
				var list=$("input[type='radio']");
				for(var i=0;i<list.length;i++){
					var flag=$(list[i]).prop("checked");/*;ist[i]是js,prop是jq方法,需转换*/
					console.log("checked="+flag);
				}
			}
			//3、与css相关的函数
			function cssFun(){
				//给获取的元素添加、删除、切换已有的样式 PS:样式一定是在样式表中提前定义好的
				$("div").addClass("redBg");
				$("div").addClass("redBg fontColor");
				$("div").removeClass("fontColor");
				$("div").removeClass();//没有参数的时候直接移除所有的样式
				//$("div").toggleClass("fontColor");//匹配元素如果有当前的样式就删除,如果没有就添加
				//给所有的元素添加样式,样式直接添加,无需提前定义
				$("input").css("border-color","blue");
				$("input").css({"color":"red","border-color":"green"});
			}
			function changeCss(){
				$("div").toggleClass("fontColor");//匹配元素如果有当前的样式就删除,如果没有就添加
			}
			/*就緒入口*/
			$(function(){
				cssFun();
			});
		</script>
	</head>
<body>
	<button type="button" onclick="changeCss()">切换div样式</button>
	性别:<input type="radio" value="0" name="gender" checked="checked"/>女
	<input type="radio" value="1" name="gender"/>男
	<img src="img/a.png" title="服不服" />
	<div>div1<button type="button">普通按钮1</button></div>
	<div>div2<button type="button">普通按钮2</button></div>
	<input name="userName" value="贾宝玉" />
	<input name="password" value="123456" />
</body>
</html>

 

6jQueryjs对象的转换

js转Jq-->$(js对象)

js对象的操作方法,获取元素内容使用innerHTML属性
 
jq转js-->使用所有jQuery方法,,例如获取元素内容使用html()函数获取到的元素都是js元素
 

7jQuery中的事件

页面对不同访问者的响应叫做事件。事件处理程序指的是当 HTML 中发生某些事件时所调用的方法。

7.1 常用DOM事件列表

 

7.2常用的 jQuery 事件方法

jQuery 中,大多数 DOM 事件都有一个等效的 jQuery 方法。
 
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>事件</title>
		<script type="text/javascript" src="js/jquery-3.3.1.js" ></script>
		<script>
			//页面加载事件
			$(function(){
				//给所有的button绑定单击事件
				$("button").click(function(){
					//alert(this);//this是当前对象,哪个按钮触发的单击事件this就是那个按钮,this此时是JS对象
					$(this).css("color","red");//给当前的触发对象添加一个css
				});
				//给所有的超链接绑定鼠标移上事件
				$("a").mouseover(function(){
					var str=$(this).html();/*获取当前元素内所有内容*/
					$(this).html("鼠标移上-"+str);/*给当前元素设置内容,等价于js的innerHTML*/
				});
				//给所有的超链接绑定鼠标移出事件
				$("a").mouseout(function(){
					var str=$(this).html();
					$(this).html(str.substr(5));
				});
				$("a").hover(function(){
					$(this).css("color","red");/*给当前元素设置样式*/
				});
			});
		</script>
	</head>
<body>
	<a href="#">首页</a>  
	<a href="#">零食</a>  更多事件方法参考jQuery的事件方法
	<a href="#">鲜花</a>  
	<button type="button">普通按钮1</button>
	<button type="button">普通按钮2</button>
	<button type="button">普通按钮3</button>
</body>
</html>

鼠标放上去时

鼠标拿下来时

8jQuery操作DOM

8.1 元素的增加

append() - 在被选元素的结尾插入内容
 
prepend() - 在被选元素的开头插入内容
 
after() - 在被选元素之后插入内容
 
before() - 在被选元素之前插入内容
 
前两个是在元素内部的开头结尾插入
 
后两个是在元素的外部的开头后结尾插入
 

8.2 元素的克隆

clone(boolean)
 
- 克隆匹配的 DOM 元素并且选中这些克隆的副本
 
语法:$(selector).clone(includeEvents);
 
参数:可选。布尔值。 规定是否复制元素的所有事件处理 。默认地,副本中不包含事件处理器。
 
将克隆的元素追加到指定位置上
 
 

8.3 元素的替换

A.replaceWith(B) -用B替换A
 
- 将所有匹配的元素替换成指定的 HTML DOM 元素。
 
A.replaceAll(B)-用A替换所有的B
 
- 用匹配的元素替换掉所有 selector 匹配到的元素。
 
 
初始:
p元素替换所有div元素
 

div替换所有p元素

8.4 元素的删除

remove() - 删除被选元素(及其子元素)
empty() - 从被选元素中删除子元素
 

9jQuery效果

9.1 隐藏和显示

语法:
$( selector ).hide([speed,callback]);
$( selector ).show([speed,callback]);
$( selector ).toggle([speed,callback]);
 
参数说明:  
 
可选的 speed 参数 规定隐藏/显示的速度 ,可以取以下值: "slow" "fast" 或毫秒。
 
可选的 callback 参数是 隐藏或显示完成后所执行的函数 名称。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>文档处理</title>
		<script type="text/javascript" src="js/jquery-3.3.1.js" ></script>
		<style>
			div{
				background: lightblue;
				padding: 20px;
			}
			p{
				background: lavenderblush;
				padding: 20px;
			}
		</style>
		<script>
			$(function(){
				$("#btnHide").click(function(){
					//$("div").hide();
					//$("div").hide(2000);
					$("div").hide(2000,function(){
						alert("隐藏完成!");
					});
				});
				$("#btnShow").click(function(){
					//$("div").show();
					//$("div").show(2000);
					$("div").show(2000,function(){
						alert("显示完成!");
					});
				});
				$("#btnToggle").click(function(){
					//$("p").toggle();
					//$("p").toggle(2000);
					$("p").toggle(2000,function(){
						alert("切换完成!");
					});
				});
			});
	</script>
</head>
<body>
	<button id="btnHide">隐藏-div</button>
	<button id="btnShow">显示-div</button>
	<button id="btnToggle">切换显示和隐藏-p</button>
	<div>div1</div>
	<br/>
	<div>div2</div>
	<p style="display: none;">p1</p>
	<p>p2</p>
</body>
</html>

 

9.2 淡入和淡出

语法:
$( selector ).fadeIn([speed,callback]);
$( selector ).fadeOut([speed,callback]);
$( selector ).fadeToggle([speed,callback]);
 
参数说明:
可选的 speed 参数规定 隐藏/显示的速度 ,可以取以下值: "slow" "fast" 或毫秒。
 
可选的 callback 参数是 隐藏或显示完成后所执行的函数 名称。
 
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8"><title>效果</title>
		<script type="text/javascript" src="js/jquery-3.3.1.js" ></script>
		<style>
			div{
				background: lightblue;
				padding: 20px;
			}
			p{
				background: lavenderblush;
				padding: 20px;
			}
		</style>
		<script>
			$(function(){
				$("#btnIn").click(function(){
					//$("div").fadeIn();
					//$("div").fadeIn(2000);
					$("div").fadeIn(2000,function(){
						alert("淡入完成!");
					});
				});
				
				$("#btnOut").click(function(){
					//$("div").fadeOut();
					//$("div").fadeOut(2000);
					$("div").fadeOut(2000,function(){
						alert("淡出完成!");
					});
				});
				$("#btnToggle").click(function(){
					//$("p").fadeToggle();
					//$("p").fadeToggle(2000);
					$("p").fadeToggle(2000,function(){
						alert("切换完成!");
					});
				});
			});
		</script>
	</head>
<body>
	<button id="btnIn">淡入-div</button>
	<button id="btnOut">淡出-div</button>
	<button id="btnToggle">切换淡入淡出-P</button>
	<div>div1</div>
	<br/>
	<div>div2</div>
	<p style="display: none;">p1</p>
	<p>p2</p>
</body>
</html>

10、基于jQuery实现表单验证

使用属性选择器来选中具体元素

使用val()/html()给元素添加内容

给每个表单项绑定离焦事件

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>表单验证</title>
		<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
		<script>
			function isUserName() {
				var val = $("input[name='userName']").val();/*获取元素文本内容*/
				if(val == "") {
					$("span[id='userNameMsg']").html("用户名不能为 空!").css("color", "red");
					return false;
				} else if(/^[a-zA-z]\w{5,}/.test(val) == false) {
					$("span[id='userNameMsg']").html("用户名不合 法!").css("color", "red");
					return false;
				}
				$("span[id='userNameMsg']").html("用户名可 用!").css("color", "green");
				return true;
			}

			function isPwd() {
				var val = $("input[name='pwd1']").val();
				if(val == "") {
					$("span[id='pwd1Msg']").html("密码不能为 空!").css("color", "red");
					return false;
				} else if(val.length < 8) {
					$("span[id='pwd1Msg']").html("密码长度不合 法!").css("color", "red");
					return false;
				}
				$("span[id='pwd1Msg']").html("密码格式正 确!").css("color", "green");
				return true;
			}

			function isPwd2() {
				if($("input[name='pwd1']").val() != $("input[name='pwd2']").val()) {
					$("span[id='pwd2Msg']").html("两次密码不一 致!").css("color", "red");
					return false;
				}
				$("span[id='pwd2Msg']").html("OK!").css("color", "green");
				return true;
			} /*校验电话码格式-座机或者手机 */
			function isTelCode(str) {
				var reg = /^((0\d{2,3}-\d{7,8})|(1[345789]\d{9}))$/;
				if(reg.test(str)) {
					$("span[id='phoneMsg']").html("OK!").css("color", "green");
					return true;
				}
				$("span[id='phoneMsg']").html("电话格式不合 法!").css("color", "red");
				return false;
			} /*校验邮件地址是否合法 */
			function IsEmail(str) {
				var reg = /^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
				if(reg.test(str)) {
					$("span[id='emailMsg']").html("OK!").css("color", "green");
					return true;
				}
				$("span[id='emailMsg']").html("邮箱地址不合 法!").css("color", "red");
				return false;
			} /*校验是否选择了性别*/
			function isGender() {
				var val = $("select[name='gender']").val();
				if(val == -1) {
					alert("请选择性别!");
					return false;
				}
				return true;
			} 
			//页面加载事件 
			$(function(){ 
				$("input[name='userName']").blur(function(){ 
					isUserName();
				}); 
				$("input[name='pwd1']").blur(function(){ 
					isPwd(); 
				}); 
				$("input[name='pwd2']").blur(function(){ 
					isPwd2();
				});
				$("input[name='phone']").blur(function() {
					isTelCode();
				});
				$("input[name='email']").blur(function() {
					IsEmail();
				});
				$("#myForm").submit(function() {
					return isUserName() && isPwd() && isPwd2() && isGender() && isTelCode() && IsEmail();
				});
			});
		</script>
	</head>

	<body>
	<h1>注册</h1>
	<form id="myForm" action="提交.html" method="get"> 
		*用户名:<input type="text" name="userName" placeholder="请输入用户名" />
			   <span id="userNameMsg">用户名长度至少6位,只能包含数字、字母、下划线,必 须以字母开头</span><br />
		*密码: <input type="password"  name="pwd1" placeholder="请输入密码" required/> 
			  <span id="pwd1Msg">密码长度至少8位</span><br /> 
		*确认密码:
		         <input type="password" name="pwd2" placeholder="请确认密码" required/> 
				 <span id="pwd2Msg">确认密码与密码一致</span><br /> *性别:
		<select id="gender">
			<option value="-1">请选择性别</option>
			<option value="0">女</option>
			<option value="1">男</option>
		</select><br /> 
		*电话号码:<input name="phone" required/>
				<span id="phoneMsg"></span> <br /> 
		*邮箱:<input name="email" type="email" required/>
				<span id="emailMsg"></span><br /> 
		<button type="submit">注册</button> 
		<button type="reset">重置</button> 
	</form>
</body>

</html>

11 jQuery案例

11.1 全选/全不选

当点击全选时,获取全选表单项的checked属性值flag为true即被选中然后给所有属性名name='one'表单项添加被选中的属性checked="true"

给所有单选框绑定点击事件,当点击某个单选框取消被选中时,这时候需要遍历所有单选框当找到任意一个没被选中的单选框时就修改全选的那个单选框的被选中状态为false即checked=false,若是所有单选框的checked属性都是true则修改全选的那个单选框为被选中状态checked=true

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>全选</title>
		<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
		<script>
			$(function() {
				/*当点击全选时,获取全选表单项的checked属性值flag为true即被选中
				     然后给所有属性名name='one'表单项添加被选中的属性checked="true"
				 */
				$("#all").click(function() {
					var flag = $(this).prop("checked");
					console.log(flag);
					var oneList = $("input[name='one']");
					for(var i = 0; i < oneList.length; i++) {
						$(oneList[i]).prop("checked", flag);
					}
				});
				/*给所有单选框绑定点击事件,当点击某个单选框取消被选中时,
				 *这时候需要遍历所有单选框当找到任意一个没被选中的单选框时
				 *就修改全选的那个单选框的被选中状态为false即checked=false,
				 *若是所有单选框的checked属性都是true则修改全选的那个单选框为被选中状态checked=true
				 **/
				$("input[name='one']").click(function() {
					var oneList = $("input[name='one']");
					for(var i = 0; i < oneList.length; i++) {
						if(!$(oneList[i]).prop("checked")) {
							$("#all").prop("checked", false);
							return;
						}
					}
					$("#all").prop("checked", true);
				});
			});
		</script>
	</head>

	<body>
		<table id="myTable" border="1" cellpadding="0" cellspacing="0" width="90%" height="160px">
			<tr>
				<th>全选<input id="all" type="checkbox" /></th>
				<th>序号</th>
				<th>名称</th>
				<th>单价</th>
				<th>数量</th>
				<th>总计</th>
			</tr>
			<tr>
				<td><input name="one" type="checkbox" /></td>
				<td>1</td>
				<td>小熊饼干1</td>
				<td>¥125</td>
				<td>1</td>
				<td>¥125</td>
			</tr>
			<tr>
				<td><input name="one" type="checkbox" /></td>
				<td>2</td>
				<td>小熊饼干2</td>
				<td>¥125</td>
				<td>1</td>
				<td>¥125</td>
			</tr>
			<tr>
				<td><input name="one" type="checkbox" /></td>
				<td>3</td>
				<td>小熊饼干3</td>
				<td>¥125</td>
				<td>1</td>
				<td>¥125</td>
			</tr>
		</table>
	</body>

</html>

11.2 动态时间

使用Date获取当前时间(年月日时分秒),使用html()/text()向元素中插入时间

使用定时器setInterval每一秒调用一次方法获取时间

或使用setTimeout递归调用方法获取时间

给停止按钮绑定点击事件,清除定时器

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>动态时间</title>
		<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
		<script>
			function showTime() {
				var time = new Date(); /*获取当前时间 年月日时分秒*/
				var y = time.getFullYear();
				var mon = time.getMonth() + 1; //0-11 
				var d = time.getDate();
				var h = time.getHours();
				var m = time.getMinutes();
				var s = time.getSeconds();
				/*向div中插入内容   年月日时分秒  val()只能用在表单中*/
				$("#myTime").html(y + "年" + mon + "月" + d + "日 " + h + ":" + m + ":" + s);
			}

			function showTime2() {
				var time = new Date();
				var y = time.getFullYear();
				var mon = time.getMonth() + 1; //0-11 
				var d = time.getDate();
				var h = time.getHours();
				var m = time.getMinutes();
				var s = time.getSeconds();
				$("#myTime2").html(y + "年" + mon + "月" + d + "日 " + h + ":" + m + ":" + s);
				clock2 = window.setTimeout("showTime2()", 1000);/*递归实现定时器*/
			}
			
			//setTimeout只能定时执行唯一一次,可使用递归达到定时器效果
			var clock2 = window.setTimeout("showTime2()", 1000);
			
			
			//页面加载事件 
			$(function() {
				//定时器 
				var clock1 = window.setInterval("showTime()", 1000);
				$("#btn1").click(function() {
					window.clearInterval(clock1);
				});
				$("#btn2").click(function() {
					window.clearTimeout(clock2);
				});
			});
		</script>
	</head>
	<body>
		<button id="btn1">停止</button>
		<div id="myTime"> </div>
		<button id="btn2">停止2</button>
		<div id="myTime2"> </div>
	</body>

</html>

11.3 动态表格

遍历表格逻辑

1.浏览器会自动把所有行tr使用tbody标签包裹起来

2.使用childern()获取当前元素的所有儿子标签

3.table表格需要两个childern才能获取到所有tr行,若一个childern只能获取到tbody,即$("#myTable").childern().childern()

4.遍历每行,每行元素trObject调用childern()获取每行的所有单元格(列)集合,时刻将js对象转成jq对象。

5.遍历每个单元格,使用Htm()获取每个单元格内容存入字符串变量str中

添加表格一条记录逻辑

1.给添加按钮绑定点击事件

2.点击按钮后,获取table元素的tbody元素,给table表格的tbody中append内部末尾追加一个行元素

3.注意,由于表格自动生成tbody,不能直接获取table表格append一个tr,这样也能追加,但追加的tr在tbody外。

删除表格一条记录逻辑

1.此种绑定事件的方式对动态添加的元素不生效

即通过 元素.click(function(){})绑定事件方式是无法绑定动态生成的任何元素的,因为这种方式是在页面加载完成后就当前页面所选中的元素进行绑定,后续动态添加且符合被选中的元素是不会被绑定,这就需要使用另一种事件绑定方式$(document).on(事件名称,要选中的元素,匿名函数)即整个文档准备完毕后再进行绑定事件。

2.使用下面这种绑定事件方式进行记录的删除,this表示当前触发的按钮

3.点击删除按钮,触发绑定的事件,获取当前元素的父级td的父级tr元素,即删除该按钮所在的行

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>动态表格</title>
		<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
		<style>
			td,
			th {
				padding: 10px;
			}
		</style>
		<script>
			$(function() {
				/*给遍历表格按钮绑定点击事件*/
				$("#blBtn").click(function() {
						var tab = $("#myTable"); //获取到了表格的jQuery对象
						//获取表格的所有行 
						//tab.children()获取的是表格tbody,
						//表格默认把所有tr行用tbody包裹,使用两次childer即可
						var trArr=tab.children().children(); 
						//遍历行
						for(var i=0;i<trArr.length;i++){ 
							var trObj=$(trArr[i]); /*使用$包裹,将js对象转出jq对象*/
							//获取每行的单元格的集合
							var tdArr=$(trObj.children()); /*同样要转成jq对象*/
							//遍历每个单元格 
							var str=""; 
							for(var j=0;j<tdArr.length;j++){ 
								var tdObj=$(tdArr[j]); /*列集合中每一个js对象转出jq*/
								var html=tdObj.html();/*获取单元格内所有内容包括标签*/
								//获取每个单元格中的内容
								str += html+"--";
							}
							console.log(str);
						}
				});
				/*给添加按钮绑定点击事件
				  获取table,给table表格append追加一个行元素
				 * */
				$("#addBtn").click(function() {
					var tab = $("#myTable>tbody"); //获取到了表格中tbody元素的jQuery对象 
					
					var num = parseInt(Math.random() * 10) + 1;/*产生随机数*/
					var tr = ' <tr > '+ 
						 			'<td >' +num+'</td>'+ 
						 			'<td >小熊饼干 '+num+' </td>'+ 
									'<td >¥125</td>'+  
						 			'<td >1</td>'+
						 			'<td ><button name ="delBtn" >删除 </button></td > '+ 
							' </tr>';
					tab.append(tr); /*向表格内部末尾追加一个行元素使用append*/
				});
			
				//此种绑定事件的方式对动态添加的元素不生效
				/*$("button[name='delBtn']").click(function(){ 
				 * 	alert("aaaa"); 
				 *});*/ 
			 
				 $(document).on("click", "button[name='delBtn']", function() {
						$(this).parent().parent().remove();
				});
		});</script>
	</head>

	<body>
		<button type="button" id="blBtn">遍历表格</button> 
		<button type="button" id="addBtn">添加</button>
		<table id="myTable" border="1" cellpadding="0" cellspacing="0" width="90%" style="text-align: center;">
			<tr>
				<th>序号</th>
				<th>名称</th>
				<th>单价</th>
				<th>数量</th>
				<th>总计</th>
			</tr>
			<tr>
				<td>1</td>
				<td>小熊饼干1</td>
				<td>¥125</td>
				<td>1</td>
				<td><button name="delBtn">删除</button></td>
			</tr>
			<tr>
				<td>2</td>
				<td>小熊饼干2</td>
				<td>¥125</td>
				<td>1</td>
				<td><button name="delBtn">删除</button></td>
			</tr>

		</table>
	</body>

</html>

11.4 省市级联

逻辑

1.首先来两个下拉列表,一个是省份列表,一个是城市列表,将来这些列表内容都是从数据库读取到数据通过使用html(...)动态向select元素中填充option元素,这里的省份列表直接写死了,存储城市的存储结构使用的是数组。

2.给省份列表绑定change事件(内容改变事件)

3.当省份内容发生变化时,获取对应option(就是当前选中元素this)中的value值

4.根据value值在数组中找到省份对应的所有城市,通过html(..)将每一个option填充到city的下拉列表中,达到不同的省份显示不同城市效果。

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>省市级联</title>
		<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
	</head>

	<body>
		<select id="province">
			<option>--请选择省份--</option>
			<option value="0">北京</option>
			<option value="1">浙江省</option>
			<option value="2">河北省</option>
			<option value="3">广东省</option>
		</select>
		<select id="city"> </select>
	</body>

</html>
<script>
	$(function() { 
		//创建二维数组存储省份和对应的城市
		var cityList = new Array();
		cityList[0] = new Array("朝阳区", "海淀区", "东城区", "西城区");
		cityList[1] = new Array("杭州市", "嘉兴市", "宁波市", "绍兴市");
		cityList[2] = new Array("石家庄市", "唐山市", "承德市", "张家口市");
		cityList[3] = new Array("广州市", "惠州市", "深圳市", "茂名市");
		$("#province").change(function() { 
			//获取到城市的下拉列表框 
			var city=$("#city"); 
			//先去清空原有的列表内容 
 			city.html(""); 
 			var arr=cityList[$(this).val()]; 
 			var str=""; 
 			for(var i=0;i<arr.length;i++){ 
 				str+='<option value=' +arr[i]+ '>'+arr[i]+ '</option>'; 
 			}
 			city.html(str); 
		}); 
	});
</script>

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐