jQuery_05 之快速入门 继承&插件

目录

 

一、插件

        1.区分java的类方法以及对象方法

               1.1.插件:就是封装类javaScript的一些列方法,导入之后可以调用这些方法。

                 1.2.如何下载插件?

        1.3.如何使用插件?

2.自定义插件 $.extend() | $.fn.extend()

        2.1.$.extend();实现对象继承 (类似java的静态方法 直接可以通过$工具调用)

        2.2.自定义插件(方法)

         2.3. $.extend()扩展jQuery类方法

        2.4. argument 数组容器,可以存储函数中的参数个数

         2.5. $.fu.exntend(); 扩展jQuery对象的方法 

3.第三方插件:表单验证插件 

        3.1.规则定义:

二、思维导图

 三、案例

                1.插件案例:

                2.全选案例:

                3.购物车案例(由于上个文档还是有bug,因此本次案例是对上次bug进行处理优化后的代码):


一、插件

        1.区分java的类方法以及对象方法

                答:类(静态)方法(直接调用,无需实例化对象);

                对象方法:StuDao sd =new StuDao(); sd.addStu();(需要实例化对象调用);

               1.1.插件:就是封装类javaScript的一些列方法,导入之后可以调用这些方法。

                 1.2.如何下载插件?

                                        第一步:浏览器搜索:jQuery,点击插件

                                         第二步:根据需要点击需要的插件

 

                                        第三步:进入下图界面,根据需求选择,进行双击

                                         第四步:选择需求的版本,点击下载

                                         第五步:选择好版本之后,如图所示:下载即可

        1.3.如何使用插件?

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>案例</title>
	</head>
<!-- 导入jQuery插件 -->
	<script src="js/jquery-3.3.1.min.js" type="text/javascript">
	</script>
<!-- 导入validate插件 -->
		<script src="js/jquery.validate.js" type="text/javascript">
	<!-- 编写jQuery代码 -->
	<script type="text/javascript">
</script>

2.自定义插件 $.extend() | $.fn.extend()

        2.1.$.extend();实现对象继承 (类似java的静态方法 直接可以通过$工具调用)

                        语法:$.extend(被继承对象,继承对象1,继承对象2···);

//例:案例1:两个对象的继承(两个参数)
		                        var person = {
		                  	    "name":"老王",
		                    	"sex":"男",
	            	    	    "age":18
	                        	};
	                    	    console.log(person);
	                    	    var stu = {};
	                	        console.log(stu);
//使用$.extend()来实现将stu继承person中的属性		
		                         $.extend(stu,person);
console.log("---------------------------------------------------------------------------")
//例:案例2:三个对象的继承(三个参数)
	                        	console.log(stu);
	                        	var teacher ={"name":"张老师","phone":"110"};
		                        console.log(teacher);
//使用$.extend()来实现将stu继承person以及teacher中的属性		
	                        	$.extend(stu,person,teacher);
	                        	console.log(stu);

 特点:当参数有三个或多个的时候,多个继承对象有一个属性相同,那么被继承人会继承的              那个属性是最后一个继承对象的属性,前面会被覆盖掉,如果是属性不相同,那么,              就会被继承所有。

        2.2.自定义插件(方法)

         2.3. $.extend()扩展jQuery类方法

//语法:
                                 $.extend({
                              "方法名":function(){
                                  执行语句;
                                          }
                                         });

        2.4. argument 数组容器,可以存储函数中的参数个数

//例:
//获取多个数中最大值
		$.extend({
		"myMax":function(){
			var max =arguments[0];
			if(arguments.length>0){
			for(var i =0;i<arguments.length;i++){
				if(arguments[i]>max){
					max=arguments[i];
				}
			}
			}else{
//如果没有数据,返回0
				return arguments.length;
			}
			return max;
		}
		});
		//调用
		console.log($.myMax(45,3,23,3249,6,23));
		console.log($.myMax());

         2.5. $.fu.exntend(); 扩展jQuery对象的方法 

//语法:

                                     $.fn.nextend({
                                  "方法名":function(){
                                      执行语句;
                                              }
                                                 });

特点:需要通过对象来调方法,亦或者通过$.fn.方法名;

3.第三方插件:表单验证插件 

//语法:
$().validate({
					rules:{
						对象1的name属性名称:{
							规则1,
							规则2,
							···
						},
						对象2的name属性名称:{
							规则1,
							规则2,
							···
						},
						对象n的name属性名称:{
							规则1,
							规则2,
							···
						}
					},
					messages:{
						对象1的name属性名称:{
							规则1:错误信息提示,
							规则2:错误信息提示,
							···
							},
							对象2的name属性名称:{
								规则1:错误信息提示,
								规则2:错误信息提示,
								···
							},
							对象3的name属性名称:{
								规则1:错误信息提示,
								规则2:错误信息提示,
								···
							}
					}
				});

    注意:不能有分号结尾,根据name属性来定义规则和错误信息提示。

        3.1.规则定义:

二、思维导图

 

 三、案例

                1.插件案例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>插件案例</title>
		<style type="text/css">
			#myForm .error{
				color:red;
				font-size: 12px;
				margin-left: 10px;
			}
		</style>
		<!-- 导入jQuery插件 -->
		<script src="js/jquery-3.3.1.min.js" type="text/javascript">
		</script>
		<!-- 导入validate插件 -->
		<script src="js/jquery.validate.js" type="text/javascript">
		</script>
		<!-- 编写jQuery代码 -->
		<script type="text/javascript">
		
			 $(function(){
				//获取表单标签调用设置插件的方法
				$("#myForm").validate({
					//规则:rules
					rules:{
						//账号:username
						username:{
							//必填项
							required:true
						},
							//邮件	myeamil
						myeamil:{
							required:true,
							//email格式
							email:true
						}
					},
					//自定义错误信息
					messages:{
						username:{
							// 账户的错误信息提示
						required:"用户名不能为空"
						},
						myeamil:{
							required:"邮箱不能为空",
							myeamil:"邮箱的格式不满足要求"
						}
					}
				});
				});
		</script>
	</head>
	<body>
		<form action="" method="get" id="myForm">
		账号:<input type="text" autocomplete="off" name="username" id="" value="" /><span id="">
		</span>
		<br>
		邮箱:<input type="email" name="myeamil" id="" value="" />
		<br>
		密码<input type="password" name="" id="" value="" />
		<br>
		<input type="submit" name="" id="" value="注册" />
		</form>
	</body>
</html>

                2.全选案例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>案例</title>
	</head>
	<!-- 导入jQuery插件 -->
	<script src="js/jquery-3.3.1.min.js" type="text/javascript">
	</script>
	<!-- 编写jQuery代码 -->
	<script type="text/javascript">
	// 加载函数
	$(function(){
		
		//全选方法
		$.fn.extend({
			"myAll":function(){
				console.log($(this));
				$(this).each(function(){
					//跟随着全选改变而改变
					$(this).prop("checked",$("#ckx").prop("checked"));
				});
			}
		});
		
		//全选	按钮设置点击事件
		$("#ckx").click(function(){
			//获取到所有的复选框
			$("input:checkbox:gt(0)").myAll();
		});
		
		
		//优化全选
		$.fn.extend({
			"optimizeAll":function(){
				$(this).click(function(){
				// console.log($(this));
					var flag =true;
					$("input:checkbox:gt(0)").each(function(){
					//但凡有一个没有选中,就不选中
						if($(this).prop("checked") === false){
							// console.log(123);
							flag=false;
						}
					});
					console.log(flag);
					$("#ckx").prop("checked",flag);
			});
		}
		});
	 	
		//为所有复选框设置点击事件(除了全选的那个)
		$("input:checkbox:gt(0)").optimizeAll();
		
	});	
	</script>
	<body>
		<input type="checkbox" name="" id="ckx" value="" />全选|取消全选
		<input type="checkbox" value="1">1
		<input type="checkbox" value="2">2
		<input type="checkbox" value="3">3
		<input type="checkbox" value="4">4
		<input type="checkbox" value="5">5
		<button type="button" id="obtn1">$.fn.extend()调用</button>
	</body>
</html>

                3.购物车案例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>购物车案例</title>
		<!-- css代码 -->
		<style type="text/css">
		/* 居中 */
		th{
			text-align: center;
		}
		table tr{
		text-align: center;
		}
		</style>
		<!-- 导入插件 -->
		<script src="js/jquery-3.3.1.min.js" type="text/javascript">
		</script>
		<!-- 编写jQuery代码 -->
		<script type="text/javascript">
			// 加载函数|入口函数
			$(function(){
				//定义一个变量保存总金额
				var sum =0;
				//1.全选
				$("#all").click(function(){
					//每次都清空
					sum=0;
					// 点击全选的时候,其它的也选中
					// console.log($(":input:checkbox:gt(0)"));
					$(":input:checkbox:gt(0)").each(function(){
						$(this).prop("checked",$("#all").prop("checked"));
					});
					//全选选中的情况
					if($("#all").prop("checked")===true){
						//获取所有的选中的复选框,除了本身
						$(":input:checkbox:gt(0)").each(function(){
							//总金额:
						sum+=parseInt($(this).parent().parent().children().eq(4).text());
						//进行设置
						$("span").text(sum);
						});
					}else if($("#all").prop("checked")===false){
						sum=0;
						//进行设置
						$("span").text(sum);
					}
				});
				//优化全选
				$(":input:checkbox:gt(0)").click(function(){
					//每次都清空
					sum=0;
					//但凡一个没有选中,全选就不选中
					//控制结果
					var flag =true;
					$(":input:checkbox:gt(0)").each(function(){
						if(!$(this).prop("checked")===flag){
							flag=false;
						}
						if($(this).prop("checked")===true){
							// alert($(this).parent().parent().children().eq(4).text());
							sum+=parseInt($(this).parent().parent().children().eq(4).text());
							//总金额		1.选中的			2.当我点击选中的按钮不断更新
							$("span").text(sum);
							//当我点击后取消的情况
							if($(this).prop("checked")===false){
								//拿到总金额
								sum-=parseInt($(this).parent().parent().children().eq(4).text());
							}
						}
					});
							$("#all").prop("checked",flag);
				});
				//2.删除
				$(":button").click(function(){
					//排除掉
					// console.log($(this).html());
					if($(this).html()==="删除"){
						//拿到行对象
						var Tr =$(this).parent().parent();
						//拿到总价格
						var money =parseInt(Tr.children().eq(4).text());
						// console.log(money);
							//删除需要减掉
							//解决没有选中的情况
							console.log(sum);
							// console.log(type(sum));
							if(!sum==0){
								// alert(123);
							sum-=money;
							//总金额:
							$("span").text(sum);
							}
					//自己删除自己
					Tr.remove();
					}
				});
				//3.批量删除
				$("#Del").click(function(){
					//获取所有选中的除了全选
					$(":input:checkbox:gt(0)").each(function(){
						if($(this).prop("checked")===true){
							// console.log(123);
							//拿到行对象
							var Tr =$(this).parent().parent();
							//拿到总价格
							var money =parseInt(Tr.children().eq(4).text());
								if(!sum==0){
									// alert(123);
								sum-=money;
								//总金额:
								$("span").text(sum);
								}
								//自己删除自己
								Tr.remove();
						}
					});
				});
				//4.加减数量
				// console.log($(":button"));
				$("table tr>td>button").click(function(){
					// console.log($(this).html());
					if($(this).html()==='+'){
						//获取文本框的内容
						// console.log($(this).prevAll().eq(0));
						//数量
						var quantity =$(this).prevAll().eq(0).val();
						quantity++;
						//赋值给文本框
						$(this).prevAll().eq(0).prop("value",quantity);
						// alert("加法");
						//判断除非选中,否则不加
						//拿到当前的复选框
						//点击只能是一次
						//行
						var Tr =$(this).parent().parent();
						//当前按钮
						var btn =Tr.children().eq(0).children();
						// console.log(btn);
						//判断是否选中
						if(btn.prop("checked") === true){
							//获取单价
							var price =parseInt($(this).parent().parent().children().eq(2).text());
							// console.log(price);
							//总价
							sum+=price;
							$("span").text(sum);	
							}
					}else if($(this).html()==='-'){
						var quantity =$(this).nextAll().eq(0).val();
						// alert(quantity);
						if(quantity==='1'){
							// alert("商品数量不能小于1件");
							//选择权交给用户
							var answer =prompt("你确定需要删除吗?回答:“是”或“不是”");
							if(answer==="是"){
								//拿到行对象
								var Tr =$(this).parent().parent();
								//删除之前拿到它的总价格
								var money =Tr.children().eq(4).text();
								// alert(money);
								//自己删除自己
								//总价
								sum-=money;
								$("span").text(sum);
								Tr.remove();
								return false;
							}else{
								return false;
							}
						}else{
						quantity--;
						//行
						var Tr =$(this).parent().parent();
						//当前按钮
						var btn =Tr.children().eq(0).children();
						// console.log(btn);
						//判断是否选中
						if(btn.prop("checked") === true){
							//获取单价
							var price =parseInt($(this).parent().parent().children().eq(2).text());
							// console.log(price);
							//总价
							sum-=price;
							$("span").text(sum);	
							}
						}
						// console.log($(this).nextAll().eq(0).val());
						// alert("减法");
						//赋值给文本框
						$(this).nextAll().eq(0).prop("value",quantity);
					}
					//单价
					// console.log($(this).parent().parent().children().eq(2).text());
					var price = $(this).parent().parent().children().eq(2).text();
					//总价
					var money = price*quantity;
					$(this).parent().parent().children().eq(4).text(money);
				});
				//开始显示价格
				// console.log($("table tr:gt(0)"));
				//加载价格
				//获取数量和单价
				$("table tr:gt(0)").each(function(){
					//单价
				var price =$(this).children().eq(2).text();
						//数量
					var many =$(this).children().eq(3).children().eq(1).val();
						// alert(many);
					var money =price*many;
					$(this).children().eq(4).text(money);
					//总价
						$("span").text(sum);
				});
			});
		</script>
	</head>
	<body>
		<table border="1px" cellspacing="" cellpadding="" width="100%">
			<tr>
				<th>全选<input type="checkbox" name="" id="all" value="" /></th>
				<th>商品名称</th>
				<th>商品单价</th>
				<th>商品数量</th>
				<th>商品总价</th>
				<th>操作</th>
			</tr>
			<tr>
				<td><input type="checkbox" name="" id="" value="" /></td>
				<td>巧克力</td>
				<td>15</td>
				<td><button type="button">-</button><input type="text" name="" id="" readonly="readonly" value="1" style="width: 14px;" /><button type="button">+</button></td>
				<td></td>
				<td><button type="button">删除</button></td>
			</tr>
			<tr>
				<td><input type="checkbox" name="" id="" value="" /></td>
				<td>牛奶</td>
				<td>25</td>
				<td><button type="button">-</button><input type="text" name="" id="" readonly="readonly" value="2" style="width: 14px;" /><button type="button">+</button></td>
				<td></td>
				<td><button type="button">删除</button></td>
			</tr>
			<tr>
				<td><input type="checkbox" name="" id="" value="" /></td>
				<td>爆米花</td>
				<td>5</td>
				<td><button type="button">-</button><input type="text" name="" id="" readonly="readonly" value="3" style="width: 14px;" /><button type="button">+</button></td>
				<td></td>
				<td><button type="button">删除</button></td>
			</tr>
		</table>
				<button type="button" id="Del">批量删除</button>
		<font size="5">金额:</font><span id="">
		</span>&nbsp;<b>元</b>
	</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值