jQuery的DOM文檔對象模型,常見的事件,遍歷,validate插件,自定義事件方法

jQuery

大綱:
	jQuery-Dom操作
		jQuery效果
		jQuery遍歷
	jQuery的事件總結
		常見事件
		事件和事件源的綁定
		事件切換	
	jQuery插件
		插件機制
		validate插件 
jQuery效果
基本:高和寬都變化
	hide([毫秒值]):隱藏(幾毫秒後完成隱藏)
	show([毫秒值]):展示(幾毫秒後完成展示)
	toggle([毫秒值]):切換(幾毫秒後完成切換)
滑入滑出:高變化
	slideUp([毫秒值]):滑出
	slideDown([毫秒值]):滑入
	slideToggle([毫秒值]):切換
淡入淡出:
	fadeIn([毫秒值]):淡入
	fadeOut([毫秒值]):淡出
	fadeToggle([毫秒值]):切換
瞭解:
	fadeToggle(毫秒值,[速度],function(){});
	以上效果都可以添加一個回調函數
jQuery遍歷
方式一:jQuery的對象方法
格式:[ele0,ele1,ele2]
jq對象.each(function([index],[dom對象]){
對遍歷到的每個元素進行操作
})
  
寫法:
	$("#city>li").each(function(index,ele){})
    //index是被遍歷到的索引, ele就是被遍歷到的js對象
方式二:全局函數
格式:
$.each(要遍歷的對象,function([index],[dom對象]){})
方式三:新特性:
格式:for of
for(var 變量 of 被遍歷的對象){}
jQuery的事件和事件源的綁定
派發事件:
	jq對象.事件名稱(function(){})
jQuery的事件綁定與解綁
	on綁定事件
		jQuery對象.on("事件名稱",function(){})
    off解綁事件
    	jQuery對象.off("事件名稱")//如果不給名稱則解綁當前對象上的所有事件
事件切換
hover:相當於給一個元素添加了mouseover和mouseout兩個事件
jq元素對象.hover(function(){
	//第一個函數相當於mouseover	
	},function(){
	//第二個函數相當於mouseout
	})
案例
案例一:定時彈出廣告
	需求分析:
		頁面加載成功5秒後,彈出一個廣告,廣告時間3秒鐘,3秒後消失
	技術分析:
		頁面加載成功事件:
			$(function(){})
        定時器:
			setTimeout(函數名,5000)
         效果:
			show();
			hide();
步驟分析:
	1:確定事件
		頁面加載成功事件
        $(function(){
        	//設置一個單次執行定時器
        	setTimeout(showAd,5000);
        })
     2:編寫showAd函數
     function showAd(){
     	//a.展示廣告
     		//讓存放廣告的div展示
     	//b.設置單詞執行定時器計時
     		setTimeout(hideAd,3000)
     }
     3:編寫hideAd函數
     	 function hideAd(){
     	 	//a.隱藏廣告
     			//讓存放廣告的div隱藏
     	 }
案例一代碼:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>定時彈出廣告</title>
    <style>
        #content{width:100%;height:300px;background:#999}
    </style>
    <script type="text/javascript" src="../js/jquery-3.3.1.js"></script>
    <script>
        $(function () {
            //頁面加載成功5秒後,彈出一個廣告,廣告時間3秒鐘,3秒後消失
            setTimeout(showAd, 5000);
        });
        //展示廣告
        function showAd() {
            $("#ad").show();
            setTimeout(hideAd,3000)

        }
        //隱藏廣告
        function hideAd() {
            $("#ad").hide();
        }
    </script>
</head>
<body>
    <div id="ad" style="display: none">
        <img src="../img/ad.jpg" style="width: 100%">
    </div>
    <div id="content">
        正文部分
    </div>
</body>
</html>
案例二:抽獎小程序
需求分析:
	1:當頁面加載成功後,讓點擊停止按鈕失效,點擊開始按鈕生效
	2:當點擊開始按鈕時,
		讓點擊開始按鈕失效,讓點擊停止按鈕生效.小圖片輪播
	3:當點擊停止按鈕時,
		讓點擊停止按鈕失效,讓點擊開始按鈕生效.
        讓輪播圖停止輪播,讓選中的圖片2秒展示到大圖區域
案例二代碼:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>抽獎小程序</title>
    <script type="text/javascript" src="../js/jquery-3.3.1.js"></script>
    <script language='javascript' type='text/javascript'>
        //準備一個一維數組,裝用戶的像片路徑
        var imgs = [
            "../img/scenery/1.jpg","../img/scenery/2.jpg","../img/scenery/3.jpg",
            "../img/scenery/4.jpg","../img/scenery/5.jpg","../img/scenery/6.jpg",
            "../img/scenery/7.jpg","../img/scenery/8.jpg","../img/scenery/9.jpg",
            "../img/scenery/10.jpg","../img/scenery/11.jpg","../img/scenery/12.jpg",
            "../img/scenery/13.jpg","../img/scenery/14.jpg","../img/scenery/15.jpg",
            "../img/scenery/16.jpg","../img/scenery/17.jpg","../img/scenery/18.jpg",
            "../img/scenery/19.jpg","../img/scenery/20.jpg","../img/scenery/21.jpg",
        ];
    </script>
    <script>
        $(function () {
            //1:當頁面加載成功後,讓點擊停止按鈕失效,點擊開始按鈕生效
            $("#stopID").attr("disabled", true);
        });
        //2:當點擊開始按鈕時,
        //    讓點擊開始按鈕失效,讓點擊停止按鈕生效.小圖片輪播
        function imgStart() {
            $("#startID").attr("disabled", true);
            $("#stopID").attr("disabled", false);
            intervalId=setInterval(showImg, 500);
        }
        //3:當點擊停止按鈕時,
        //    讓點擊停止按鈕失效,讓點擊開始按鈕生效.
        //    讓輪播圖停止輪播,讓選中的圖片2秒展示到大圖區域
        function imgStop() {
            $("#startID").attr("disabled", false);
            $("#stopID").attr("disabled", true);
            clearInterval(intervalId);
            showBigImg();
        }

        var i = 0;
       function showImg() {
           $("#img1ID").attr("src",imgs[i]);
           i++;
           if(i==imgs.length) {
               i = 0;
           }
       }
       function showBigImg() {
           $("#img2ID").attr("src",imgs[--i]);
       }
    </script>
</head>
<body>
<!-- 小像框 -->
<div style="border-style:dotted;width:50px;height:50px">
    <img id="img1ID" src="" style="width:50px;height:50px"/>
</div>
<!-- 大像框 -->
<div style="border-style:double;width:700px;height:500px;position:absolute;left:500px;top:10px">
    <img id="img2ID" src="" style="width:700px;height:500px"/>
</div>

<!-- 開始按鈕 -->
<input onclick="imgStart()" id="startID" type="button" value="點擊開始" style="width:150px;height:150px;font-size:22px" >

<!-- 停止按鈕 -->
<input onclick="imgStop()" id="stopID" type="button" value="點擊停止" style="width:150px;height:150px;font-size:22px" >

</body>
</html>
jQuery插件

插件:實現了指定功能的代碼片段

jq對象.text()等等都是jq爲我們定義好的方法.而我們可以模仿jq方法定義我們自己的方法 也就是插件擴展機制

插件擴展機制(兩種:jQuery對象進行方法擴展,jQuery全局進行方法擴展)
注意:在extend使用中this代表的是掉用者的jQuery對象
jQuery插件機制概述:
	jQuery插件的機制很簡單,就是利用jQuery提供的		         jQuery.fn.extend()和jQuery.extend()方法,擴展jQuery功能
jQuery插件機制語法
	jQuery.fn.extend(object) 對jQuery對象進行方法擴展

1:jQuery對象進行方法擴展

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>插件機制</title>
    <script type="text/javascript" src="../js/jquery-3.3.1.js"></script>
    <script>
        jQuery.fn.extend({
            "checkAll":function () {
                //extend使用中this代表調用者的jQuery對象在這裏也就是 $("input[type='checkbox']")
                $.each(this,function (index,ele) {
                    ele.checked = true;
                })
            }
        });
        jQuery.fn.extend({
            "uncheckFn":function () {
                //extend使用中this代表調用者的jQuery對象在這裏也就是 $("input[type='checkbox']")
                this.each(function (index,ele) {
                    ele.checked = false;
                })
            }
        })
        function checkFn() {
            $("input[type='checkbox']").checkAll();
        }
        function uncheckFn() {
            $("input[type='checkbox']").uncheckFn();
        }
    </script>

</head>
<body>
    <input id="btn-check" type="button" value="點擊選中複選框" onclick="checkFn()">
    <input id="btn-uncheck" type="button" value="點擊取消複選框選中" onclick="uncheckFn()">
    <br/>
    <input type="checkbox" value="football">足球
    <input type="checkbox" value="basketball">籃球
    <input type="checkbox" value="volleyball">排球
</body>
</html>

2:jQuery全局進行方法擴展

jQuery.extend({
  "min":function(i,j){
    return i>j ? j:i;
  }
   "max":function(i,j){
    return i>j ? i:j;
  }
})
validate插件
作用:對錶單進行校驗.
下載路徑:http://jqueryvalidation.org/files/jquery-validation-1.15.0.zip
使用方式:
	導入jquery.js
	validate是基於jquery寫的,所以要先導入jquery的js文件
	在導入validate.js
	想要使用別人的插件必須導入人家已經寫好的js文件
	在頁面加載成功後,要確定頁面上的那個表單進行校驗
   	    $(function(){
    		表單對象.validate():
    	})
    validate使用格式:
		表單對象.validate({
          rules:{//校驗規則
            //需要校驗那個輸入框就是用其name的值
          },
          	messages:{}//不滿足規則時的提示信息
		})
   自定義校驗器:
		格式:
			$.validator.addMethod(name,function(val,ele,param){},"message");
			val:輸入框的值
			ele:被校驗的輸入框的對象(js對象)
            param:校驗器的值(true,false)
            message:提示信息
            需要有返回值,默認爲false
  • 常見的校驗規則

    校驗器名稱 描述
    required true|false 必須填寫
    number true|false 只能輸入數字
    min 數字 最小值
    max 數字 最大值
    range [min,max] 取值範圍
    minlength 數字 最小長度
    maxlength 數字 最大長度
    rangelength [minlength,maxlength] 長度範圍
    equalTo 通過jQuery選擇器選中指定元素對象 和誰相等(重複密碼)
    email “email” 校驗郵箱
    date true 校驗日期
    dateISO true 校驗日期格式xxxx-xx-xx xxxx/xx/xx
    案例:
    <!DOCTYPE html>
    <!--suppress XmlInvalidId -->
    <html lang="en">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>我的jquery表單校驗頁面</title>
            
    		<style type="text/css">
    			p{text-align: center;font-size:24px;}
    			table{margin: 0 auto;border: 0;}
    			table tr{height:40px;border:0;}
    			table tr td{padding:0 14px;border:1px solid #999}
    			.error{color:red}
    		</style>
           <!-- 1.導入jq的js文件 -->
            <script src="../js/jquery-3.3.1.js"></script>
            <!-- 2.導入validate的js文件 -->
            <script src="../js/jquery.validate.min.js"></script>
            <script src="../js/messages_zh.js"></script>
            <!-- 3.在頁面加載成功後,鎖定被校驗的表單對象 -->
            <script>
                $(function () {
                    // 鎖定被校驗的表單對象
                    $("#empForm").validate({
                        rules:{  // 校驗規則
                            // 需要校驗哪個輸入框就使用那個輸入框name屬性的值
                            realname:"required", // 單一校驗規則
                            username:{
                                required:true, // 校驗不可爲空
                                rangelength:[5,10] // 校驗長度
                            },
                            psw:{
                                required:true,
                                number:true
                            },
                            psw2:{
                                equalTo:$("#psw")
                            },
                            gender:{
                                required:true
                            },
                            age:{
                                required:true,
                                range:[26,50]
                            },
                            edu:{
                                required:true
                            },
                            birthday:{
                                required:true,
                                dateISO:true,
                                date:true
                            },
                            email:{
                                required:true,
                                email:"email"
    
                            },
                            card:{
                                required:true,
                                cardLength:true
                            }
                        },
                        messages:{  // 當不滿足規則時的提示信息
                            realname:"真實姓名不可爲空.",
                            username:{
                                required:"用戶名不可爲空", // 校驗不可爲空
                                rangelength:"長度在{0}到{1}位之間" // 校驗長度
                            },
                            card:{
                                cardLength:"身份證號長度只能是15或18位"
                            }
                        }
                    });
                });
                // 自定義校驗器
                $.validator.addMethod(
                    "cardLength", // 校驗器的名稱
                    // val: 被校驗的輸入框中的內容
                    // ele: 被校驗的輸入框對象(js對象)
                    // params: 是否需要校驗(校驗器的值)
                    function (val,ele,params) {
                        // 在該函數中完成校驗,需要返回校驗結果 boolean
                        // 默認返回false
                        if(params){
                            // 需要校驗
                            if(val.length==15 || val.length==18){
                                return true;
                            }
                        }
                    },
                    "默認: 身份證號長度不合法" // 當不滿足校驗規則時的默認提示信息
                );
            </script>
    </head>
    <body>
        <p>員工信息錄入</p>
    	<form name="empForm" id="empForm" method="get" action="test.html">
    		<table border=1>
    			<tr>
    				<td>真實姓名(不能爲空 ,沒有其他要求)</td>
    				<td><input type="text" id="realname" name="realname" />
    				</td>
    			</tr>
    			<tr>
    				<td>登錄名(登錄名不能爲空,長度應該在5-8之間,可以包含中文字符(一個漢字算一個字符)):</td>
    				<td><input type="text" id="username" name="username" /></td>
    			</tr>
    			 <tr> 
    		      <td>密碼(不能爲空,長度6-12字符或數字,不能包含中文字符):</td>
    		      <td><input type="password" id="psw"  name="psw" /></td>
    		    </tr>
    		    <tr> 
    		      <td>重複密碼密碼(不能爲空,長度6-12字符或數字,不能包含中文字符):</td>
    		      <td><input type="password" id="psw2" name="psw2" /></td>
    		    </tr>
    		    <tr>
    				<td>性別(必選其一)</td>
    				<td>
    				    <input  type="radio" id="gender_male" value="m" name="gender"/>&nbsp;&nbsp;&nbsp;
    				    <input  type="radio" id="gender_female" value="f" name="gender"/>&nbsp;<label class="error" for="gender" style="display: none;">必須選擇一個性別</label>
    				</td>
    			</tr>
    			<tr>
    				<td>年齡(必填26-50):</td>
    				<td><input type="text" id="age" name="age" /></td>
    			</tr>
    			
    		    <tr> 
    		      <td>你的學歷:</td>
    		      <td> <select name="edu" id="edu">
    			          <option value="">-請選擇你的學歷-</option>
    			          <option value="a">專科</option>
    			          <option value="b">本科</option>
    			          <option value="c">研究生</option>
    			          <option value="e">碩士</option>
    			          <option value="d">博士</option>
    		          </select>
    			  </td>
    		    </tr>
    			
    			<tr> 
                  <td>出生日期(1982/09/21):</td>
                   <td><input type="date" id="birthday"  name="birthday" value="" /></td>
                </tr>
    			
    		   <tr> 
    		      <td>興趣愛好:</td>
    		      <td colspan="2"> 
    			      <input type="checkbox" name="checkbox1" id="qq1"/>&nbsp;乒乓球 &nbsp;
    		          <input type="checkbox" name="checkbox1" id="qq2" value="1" />&nbsp;羽毛球 &nbsp;
    		          <input type="checkbox" name="checkbox1" id="qq3" value="2" />&nbsp;上網 &nbsp;
    		          <input type="checkbox" name="checkbox1" id="qq4" value="3" />&nbsp;旅遊 &nbsp;
    		          <input type="checkbox" name="checkbox1" id="qq5" value="4" />&nbsp;購物 &nbsp;
    		          <label class="error" for="checkbox1" style="display: none;">必須選一個</label>
    			  </td>
    		    </tr>
    			 <tr> 
    			      <td align="left">電子郵箱:</td>
    			      <td><input type="text" id="email" name="email" /></td>
    			  </tr>
    			  <tr> 
    			      <td align="left">身份證(15-18):</td>
    			      <td><input type="text" id="card" name="card" /></td>
    			  </tr>
    			<tr>
    				<td></td>
    				<td><input type="submit"  name="firstname"  id="firstname" value="保存"></td>
    			</tr>
    		</table>
    
    </form>
    </body>
    </html>
    
    總結:
    DOM:
    	效果:
    		基本效果:
    			hide show toggle
    		滑入滑出:
    			slideUp,slideDown,slideToggle
    		淡入淡出:
    			fadeIn,fadeOut,fadeToggle
    	遍歷:
    		jq對象.each(function(index,ele){})
            $.each(被遍歷的對象,function(index,ele){})
            for of 
            	for( var 變量名 of 被遍歷的對象){}
    	事件總結:
    		派發事件:
    			jq對象.事件方法(function(){})
    		綁定事件:
    			jq對象.on("事件名稱",function(){})
    		解綁事件:
    			jq對象.off("事件名稱")//不給事件名稱則解綁此對象上的所有事件
            事件切換:
    			jq對象.hover(function(){},function(){})//第一個fn爲懸停事件方法,第二個爲移出事件方法
    	插件:
    		插件擴展機制:
    			jq對象的方法:
    				jq對象.fn.extend("函數名稱":function(){
      					//這裏的this代表jq對象
    				})
    			全局方法:
    				$.extend(function(){})
    		validate插件:
    			作用:表單的檢驗
    			使用步驟:
    				1:導入jq的js文件
    				2:導入validate的js文件
    				3.編寫頁面加載成功事件
                    表單對象.validate({
                    rules:{
                    	name屬性的值:"校驗器"
                        name屬性的值:{
                        	校驗器:,
                        	校驗器:}
                    }
                    messages:{
                    name屬性的值:"提示信息"
                        name屬性的值:{
                        	校驗器:提示信息,
                        	校驗器:提示信息
                        }
                    }
                    })
     自定義校驗器:
    $.validator.addMethod("校驗器名":function(val,ele,param){
      //返回值true和false(默認)
    },"提示信息")
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章