1.自己封装dom操作
就是将document.getElementById("id")封装成一个方法,然后单独放到一个
js文件中,然后,直接可以调用这个方法获取标签对象
例如:

     function $(name) {
     //通过用户传递进来的name名称,也就是标签名称获取到标签对象
       var element = document.getElementById(name);
       return element;
     }

2.Dom和jquery之间的相互转化:
dom-->jquery :$(dom) dom就是js对象
jquery--->dom对象 jquery对象[0];或者 jQuery对象.get(0);

     对象和jQuery对象的区别:
        

1. js对象是通过dom操作获取的对象,指的是页面上的一个标签对象;
        
2. jQuery对象是通过jQuery的手段获取到的一个类数组对象,里边包含的有JS对象;
3.页面加载,就是整个html文档加载完成时候执行
   js中       window.load(){...}
   jquery中   $(function(){...})  或者 $(document).ready(funcition(){...}) 
4.时间的绑定 (类似于js中的动态绑定)
   例如有一个按钮  <button id="btn"></button>
   现在给这个按钮动态的绑定一个点击事件
   /**
    步骤
       1.首先,通过jquery中的选择器,来获取这个按钮标签的对象
       2.利用jquery中的click方法给这个按钮绑定一个点击事件
   **/
    如下:$("#btn").click(function(){
            ....
           })

5.jquery中常见的事件:click鼠标单击事件   blur失去焦点事件    change内容改变事件   submit表单提交事件
         
         事件的切换【了解】  鼠标的移入移出事件:hover(fn1,fn2);
         事件切换:
                 jq对象.hover(fn1,fn2);
                         fn1:mouseover  鼠标移入事件
                        fn2:mouseout   鼠标移出事件

    
6.选择器★

    1.基本选择器
          
        $("element")  元素选择器
        $("#id")      id选择器器
        $(".class")   class属性选择器
        $("选择方式1,选择方式2")  将多个选择器选中的标签合并返回
     例如:
           var $2 = $(".ad1,#password");
           $2.css("background-color","red");  //执行的结果就是这两个都是相同的效果

        $("*") 选择页面上的所有标签


     2.层级选择器
          
          A B,获取A元素内部的所有的B元素,后代
      A>B,获取A元素下的所有的B子元素 父子
      A+B,获取到A元素同级下的一个B元素 一个兄弟(最大的兄弟)
      A~B,获取到A元素同级下的所有的B元素 所有的兄弟


     3.基本过滤选择器
             :first         第一个元素
             :last          最后一个元素
             :even          索引值为偶数的元素
             :odd           索引值为基数的元素
             :eq(索引值)    索引值等于一个数的元素
             :gt(索引值)    索引值大于一个数的元素
             :lt(索引值)    索引值小于一个数的元素
             :not('选择器2')选择某一个不为选择器2的元素

             基本过滤选择器的原理:就是当jquery利用$()选择器选择了一些
                                   元素以后,但是这个元素不是我们想要的
                                   所以就需要利用过滤器过滤一下,留下某
                                   一个元素或者一小部分元素,留下来就是
                                    目标元素。
              注意点:选择器中有多个括号嵌套的时候,除了数字角标不需要将里面的括号
                       用单引号括起来,其余的都需要将单引号括起来,演示如下:

             例如:
                  
                    /*可以理解从div数据中按照索引值去除div元素*/
            //页面加载事件
            $(function () {
                //绑定事件
                $("#btn1").click(function () {
                    //选择第一个div元素
                    $("div:first").css("background-color","red");
                })

                //"绑定事件
                $("#btn2").click(function () {
                    //选择最后一个div元素
                    $("div:last").css("background-color","yellow");
                })


                //绑定事件
                $("#btn3").click(function () {
                    //选择索引值为偶数的元素,从0开始
                    $("div:even").css("background-color","green");
                })

                //绑定事件
                $("#btn4").click(function () {
                    //选择索引值为基数的div
                    $("div:odd").css("background-color","green");

                })

                //绑定事件
                $("#btn5").click(function () {
                    $("div:eq(3)").css("background-color","red");
                })

                //绑定事件
                $("#btn6").click(function () {
                    //选择索引值大于3div元素
                    $("div:gt(3)").css("background-color","red");
                })

                //绑定事件
                $("#btn7").click(function () {
                    //选择class不为one的所有div元素
                    $("div:not('.one')").css("background-color","red");
                })

                 
                   
          
            4.属性过滤选择器
  
                [attribute]              $("input[name]")           过滤拥有指定属性的元素
                  

                [attribute=value]        $("input[name=userName]")   过滤出属性值=value的元素
                
                  
                [attribute!=value]       $("input[name!=password]")  过滤出属性值!=value的元素


                [attribute^=value]       $("input[name^=myClass]")   过滤出属性值以value开始的元素
                
                
                [attribute$=value]       $("input[name$=myClass]")   过滤出属性值以value结束的元素
                  

                [attribute*=value]        $("input[class*=myClass]")  过滤出属性值含有value的元素
                  

                [attr1][attr2][attr3]...  $("input[name=username][value!=张三]..."")  过滤指定的多个属性同时满足条件的元素,以上属性过滤的任意组合


                注意点:例如在 $("input[name=userName]") 写法中,[name='userName']  加上括号和不加括号都是一样的效果,但是建议加上!



            5.表单对象属性过滤选择器

                  :enable   $("input:enable")  过滤可用的input元素对象,因为可以在form表单中设置有些表单对象可以使用,有些不可用!所
                                                所以可以利用这个enable进行筛选!
                  :disable  $("input:disable")  过滤不可用的元素

                  :checked  $("input[type=checkbox]:checked")  过滤被选中元素(复选框、单选框等,不包括select中的option)

                  :selected $("select option:selected")         过滤被选中的元素select的option

           6.可见性过滤选择器

                  可见:$("div:visible") 选取所有可见的div元素
                  不可见 $("div:hidden").show();  选取所有不可见的div元素,可以利用jQuery中的 show()方法将它们显示出来

                     1. 隐藏域:<input type="hidden" name="id" value="520"> 
                     
                     2. diaplay属性隐藏:<div style="display:none"></div> ;
           

7.jQuery的操作方法

    1.jQuery的dom操作
       
       
        (1) html代码  text文本  val值  的操作
                     val()是jQuery中方法,用来获取到表单标签中的value属性,前提是这个表单标签设置了value属性
                *      如果是设置value属性,就是将属性值放在val函数中,如:val("属性值")
                *      这个val()对应着js中的value方式获取
                *      例如:
                *      //js
                *      var value = document.getElementById("username").value;
                *      //jQuery
                *      var val = $("input[name=username]").val();
                *
                *    html是jQuery中获取某一个标签的中的所有内容,包括标签里面嵌套的标签,对应着js中的innnerHTML
                *
                *      获取:jQuery对象.html();
                *      设置:jQuery对象.html("内容");
                *
                *    text是jQuery中获取某一个标签中的标签体中的内容,不包含标签,对应着js中的innerTEXT
                *
                *      获取:jquery对象.text();
                *      设置:jQuery对象.text("内容");

    
        (2) 属性操作:attr()和prop() 
                        对标签的普通属性的操作使用attr()方法更准确;
                       
                       在获取checked或者selected属性值的时候建议使用prop()方法,其余都使用attr()方法;


        (3) class属性操作和css样式操作
        
                        class属性操作:
                              addClass():给元素添加class属性;
                              removeClass():给元素移除class属性;
                        css属性操作:
                              css(cssName):获取标签的css样式;
                              css(cssName,cssValue):给标签添加css样式;
                        注意:如果是在css样式操作的时候,操作一个样式可以直接是jQuery对象.css("background-color","red");
                              如果是多组样式的操作时候,使用: jQuery对象.css({
                                                                           "background-color":"red",
                                                                           "border":"1px solid red"
                                                                      })
        (4) html标签的创建  插入  删除 操作
                        创建:$(html代码)  例如$("<span>我是一个span标签</span>");    
                        插入:
                            内部插入:就是在一个标签的里面在插入一个之标签
                                     分为:在这个标签的前面插入prepend (被动插入)  prependTo (主动插入)
                                           在这个标签的后面插入append   (被动插入)  appendTo (主动插入)                            
                              
                              
                            外部插入:就是将一个标签插入到和这个标签的同级的位置,是兄弟的关系
                                     分为:在标签的前面插入一个同级节点   before (被动插入)   insertBefore  (主动插入)
                                           在标签的后面插入一个同级节点   after   (被动插入)  insertAfter    (主动插入)  

                                           
                                           
                        删除操作:jQuery对象.empty()  删除的是这个标签的子标签,自身保留
                                  jQuery对象.remove() 删除的是整个 包括自身

                                  
                                           
                                           
    2.jQuery效果
                     
                                           
        1.元素的显示和隐藏
             show(speed,fn)
             hide(speed,fn)
             toggle(speed,fn)

         2.元素的滑动显示和隐藏
              slideUp(speed,fn)
              slideDown(speed,fn)
              slideToggle(speed,fn)

         3.元素的淡入淡出效果
              fadeln(speed,fn)
              fadeOut(speed,fn)
              fadeToggle(speed,fn)
                           
                                           
                                           
                                           
                                           
8 案例: 弹出广告,利用jQuery的效果来操作
         表格的隔行换色,利用jQuery的样式css操作
         全选全不选,jQuery操作方法中的属性操作,获取到总的复选框的选中状态,然后去改变分的复选框的选中状态
         省市联动,利用change事件,然后配合jQuery操作方法中的html元素的创建 插入 删除 来操作
         
         
         省市联动案例代码:
         
         
         
         <!DOCTYPE html>
   <html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script>
            // 定义二维数组:
            var arr = new Array(4);
            arr[0] = ["石家庄", "邯郸", "保定", "秦皇岛"];
            arr[1] = ["郑州市", "洛阳市", "安阳市", "南阳市"];
            arr[2] = ["沈阳市", "锦州市", "大连市", "铁岭市"];
            arr[3] = ["长春市", "吉林市", "四平市", "通化市"];
        </script>
        <script src="../js/jquery-3.3.1.js"></script>
        <script type="text/javascript">
            /*步骤
            * 需求:在选择省以后动态的加载对应的市
            * 1.通过change事件,获取省的value值 val()  对应的市为 arr[value]
            * 2.遍历数组,动态创建市的标签,插入到市的select中。
            * */

            /*页面加载事件*/
            $(function () {
                //获取到省的select标签对象
                $("select[name='pro']").change(function () {

                    /*
                    * 注意:就是当用户选择一个省份,将市信息显示到市的select中以后,
                    *      当用户第二次来选择省份的时候,需要将市的select中的数据清空,也就是重新覆盖
                    *
                    * */

                      $("#city").html($("<option>--请选择--</option>"))



                    /*这种写法,不是太好理解,其实就是option被选中以后,会将value值给select,因为最后提交到服务器还是需要
                      select标签的name属性的,所以在select中也是可以直接访问到用户选择的option选项的

                    */
                    /*var value = this.value;
                    alert(value);*/

                    //一般的写法,也是一种比较好理解的写法,使用了一个表单对象选择器
                    var value = $("select[name='pro'] option:selected").val();

                   //将这个value值给数据,当做数组的角标,因为这个value值正好是对应数组的角标

                    //利用var 来接收一个数组对象,这个数组中的元素都是一些基本元素
                    var any = arr[value];

                    //遍历数组,然后创建市的option,插入到市的select中即可!

                    $(any).each(function (index,element) {
                        //index为角标
                        //element为市,不是对象,因为这是一个普通的数组

                        //获取到市的select对象
                        $("#city").append($("<option>"+element+"</option>"));
                    })




                })
            });



        </script>
    </head>

    <body>
        <form action="#" method="get">
            <select name="pro" >
                <option>--请选择--</option>
                <option value="0">河北</option>
                <option value="1">河南</option>
                <option value="2">辽宁</option>
                <option value="3">吉林</option>
            </select>省
            <select id="city">
                <option>-请选择-</option>
            </select>市
        </form>
    </body>

</html>
         

jquery高级部分:

jQuery的插件 validate

jQuery插件定义: 插件就是将jQuery实现的某些特定的功能,进行封装,而我们可以按照

             插件的语法去操作,就可以实现很多复杂的功能。
             
             

validate 插件
插件的语法:类似于json格式的语法
使用步骤:

   1.导入jQuery文件,因为这个是依赖jQuery的
   2.导入jQuery.validate.js文件
   3.在页面加载的代码中,确定需要对哪个表单进行校验
   4.获取到需要校验的表单对象 对象.validate({
      rules:{
       //规则
      },
      messages:{
       //提示信息
      }
   
   })
   
例如:


 /*页面加载事件*/
       $(document).ready(function () {
           //一定要知道你需要对那个表单进行校验,对id=fomrId
            $("#formId").validate( {

                rules :{
                    //校验规则
                   username:{
                       required:true
                   },
                    password:{
                       required:true,
                        minlength :4,
                        maxlength :6
                    },
                    repassword:{
                       required :true,
                       equalTo:$("input[name=password]")
                    },
                    card:{
                       //校验身份证号码的长度时候满足条件
                        //使用自己写的校验规则
                        checkCard:[12,18]
                    }
                    
                },
                messages :{
                 //返回的消息
                  username :{
                      required:"用户名不可以为空"
                  },
                    password:{
                      required:"密码不可以为空",
                      minlength:"最小长度为4",
                      maxlength:"最大长度为6"
                    },
                    repassword:{
                      required:"请在输入一次密码",
                      equalTo:"两次输入不相同"
                    }

                },
                card:{
                    checkCard:"身份证的位数不满足条件!"
                }

            })
       })
       

验证规则:例如上面代码中的 required:ture 就是一个验证规则是一条默认的验证规则,required为规则的名称 ture为规则的参数

自定义验证规则:在实际开发中,默认的规则不满足需求的时候,就需要自己定义验证规则从而达到表单校验的任务!

自定义验证规则的语法:

       $.validator.addMethod(name , method  , message);
       说明:name为规则的名称 例如 required 
             method为 执行校验时使用的处理函数。返回true表示校验通过,返回false表示校验未通过。
             message为错误提示信息
        注意:name和message都需要使用单引号引用起来
        
        method 是处理函数  格式如下:
         funcition(value,element,params){}
         
        说明:value 为从文本框中获取到的值,也是用户输入的值
              element为这个文本框的对象
              params 为用户在使用这个验证规则的时候,传递进来得参数 例如 : checkCard :[15,18]
              
      例如:(这是一个自定义身份证规则的验证规则)
      
        $.validator.addMethod('checkCard',function (value,element,params) {
    
         if(value.length==params[0]||value.length==params[1]){
            //长度属于这两个都是合法的,放行
                return true;
          }else{
                return false;
        }

      },'身份证号码长度必须是{0}位或者{1}位数字');
       

对自定义validate中的参数的理解:

 1.以上的{0} {1} 获取到是在使用这个规则的时候,checkCard:[参数1,参数2],但是这个{0}方式在message中使用
 2.从使用规则的那边传递过来的参数就是这个方法中的params,可以通过params[0] 和 params[1] 访问到第一个参数和第二个参数
           this关键字总结:只有js中有this关键字
                    1.在动态绑定事件中,this指向的是被绑定事件的js标签对象;
                    2.在遍历的过程中,this指向的是被遍历到的那个元素;