• 第四篇 前端学习之JQuery基础


    一 jQuery是什么?  

    jQuery就是一个JavaScript的库。

    <1> jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team。

    <2>jQuery是继prototype之后又一个优秀的Javascript框架。其宗旨是——WRITE LESS,DO MORE!

    <3>它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器(IE6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+);

    <4>jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTMLdocuments、events、实现动画效果,并且方便地为网站提供AJAX交互。

      AJAX:实现前端向后端发送数据——非常重要

    <5>jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。

    参考JQuery文档:http://jquery.cuishifeng.cn/

    二 什么是jQuery对象?

     jQuery 对象就是通过jQuery包装DOM对象后产生的对象。

     jQuery 对象是 jQuery 独有的

     如果一个对象是 jQuery 对象那么它就可以使用 jQuery 里的方法: $(“#test”).html();

    $("#test").html()    
           //意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法 
    
           // 这段代码等同于用DOM实现代码: document.getElementById(" test ").innerHTML; 
    
           //虽然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法.乱使用会报错
    
           //约定:如果获取的是 jQuery 对象, 那么要在变量前面加上$. 
    
    var $variable = jQuery 对象    定义jquery对象时,变量前就加个 $符号,明确告诉人家这是jQuery对象
    var variable = DOM 对象
    
    $variable[0]:jquery对象转为dom对象      $("#msg").html(); $("#msg")[0].innerHTML

    jquery的基础语法:$(selector).action()

    幸福生活的开始从导入jQuery库开始

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>hello</div>
    
        <!--要使用JQuery,必选先通过script引入jQueryku才行-->
        <script src="jquery-3.3.1.js"></script>
        <script>
            // $符号:就代表JQuery对象,里面有无穷尽的语法,全在$里
            // 找到div标签: $("div")
            // 对div标签进行样式设置:$("div").css("color","red");
            
            $("div").css("color","red");
            // 当然也可以用jQuery,但是用$符号更简单
            jQuery("div").css("color","red");
    
        </script>
    </body>
    </html>

    三 寻找元素(选择器和筛选器) 

    3.1   选择器

    3.1.1 基本选择器      

    $("*"): 对所有标签进行操作
    $("#id"):通过id找标签
    $(".class") :通过class属性找
    $("element") :通过标签名字找
    $(".class,p,div"):可以一次找多个元素
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>hello</div>
        <p id="p1">ppp</p>
        <a href="">click</a>
    
        <div class="outer">
            outers
            <div class="inner">inner</div>
        </div>
    
        <div class="outer">helllllllo</div>
        <!--要使用JQuery,必选先通过script引入jQueryku才行-->
        <script src="jquery-3.3.1.js"></script>
        <script>
    
            // $("*").css("color","red");
            // $("#p1").css("color","blue");
            // $(".inner").css("color","green");
            // $(".outer").css("color","brown"); // jQuery自己做了遍历
            // $(".inner,p,div").css("color","red");
            $("p").css("color","red"); // 通过element找,即通过标签的名字去找
    
    
    
        </script>
    </body>
    </html>
    示例

    3.1.2 层级选择器:处理层级嵌套, 后代(儿子)选择器      

    $(".outer div")  :后代选择器
    $(".outer>div") :子代选择器
    $(".outer+div") :向下找紧挨着的兄弟标签
    $(".outer~div") :向下找兄弟标签,可以不紧挨着outer的,也能找到
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>hello</div>
        <p id="p1">ppp</p>
        <a href="">click</a>
    
        <div class="outer">
            outers
            <div class="inner">
                inner
                <p>innerP</p>
            </div>
            <p>alex</p>
        </div>
        <div>lalal</div>
        <p>隔着一个,向下也能找到兄弟标签</p>
        <p>向下紧挨着的兄弟标签</p>
    
        <!--<div class="outer">helllllllo</div>-->
        <!--要使用JQuery,必选先通过script引入jQueryku才行-->
        <script src="jquery-3.3.1.js"></script>
        <script>
            // 后代选择器:
            // 找到class属性值为outer的下面的所有 p 标签,不管是子代,孙子代,还是重孙子代都找到
            $(".outer p").css("color","red");
            // 子代选择器:
            // 找到找到class属性值为outer的下面的所有 p 标签且找到的p标签都是outer的儿子代
            $(".outer > p").css("color","red");
            // 向下紧挨着的兄弟标签
            // $(".outer + p").css("color","blue");
            // 向下找兄弟标签(同级的),可以不紧挨着
            $(".outer ~ p").css("color","green");
    
        </script>
    </body>
    </html>
    层级选择器示例

    3.1.3 基本筛选器      

    选择出后再过滤一遍的意思

    $("li:first")  
    $("li:eq(2)")  
    $("li:even") 
    $("li:gt(1)")
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <ul>
        <li>111</li>
        <li>222</li>
        <li>333</li>
        <li>444</li>
        <li>555</li>
        <li>666</li>
        <li>777</li>
        <li>888</li>
    </ul>
    
    <script src="jquery-3.3.1.js"></script>
    <script>
        console.log($("li"));
       // 对第一个li标签操作
        $("li:first").css("color","red");
        // 对最后一个li标签操作
        $("li:last").css("color","red");
    //    对其他第n个操作
        $("li:eq(1)").css("color","blue");
        // 控制偶数行,从0开始的
        $("li:even").css("color","green");
        //控制奇数行
        $("li:odd").css("color","brown");
        //筛选出的是大于索引为3的标签,不包含索引3
        $("li:gt(3)").css("color","brown");
        //筛选出的是小于索引为3的标签,不包含索引3
        $("li:lt(3)").css("color","red");
    
    
    </script>
    </body>
    </html>
    基本筛选器

    3.1.4 属性选择器    

    通过标签的属性来查找属性。自己也可以添加属性

    $('[id="div1"]')   
    $('[alex="sb"][id]') 
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>hello</div>
        <p id="p1" alex="bbb">ppp属性选择器</p>
        <p id="p2" alex="bbb">ppp属性选择器</p>
        <p id="p3" alex="bbb">ppp属性选择器</p>
        <a href="">click</a>
    
        <!--<div class="outer">helllllllo</div>-->
        <!--要使用JQuery,必选先通过script引入jQueryku才行-->
        <script src="jquery-3.3.1.js"></script>
        <script>
            // 通过属性选择器查找
            $("[alex='bbb']").css("color","red");
        //    如果有多个属性标签属性名相同,可以多层选择
            $("[alex='bbb'][id='p2']").css("color","blue");
        </script>
    </body>
    </html>
    属性选择器

    3.1.5 表单选择器     

    $("[type='text']")----->$(":text")         注意 :只适用于input标签
    $("input:checked")
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <input type="text">
    <input type="checkbox">
    <input type="submit">
    
    <script src="jquery-3.3.1.js"></script>
    <script>
    
        // $("[type='text']").css("width","200px");
        //只有input表单选择器才可以通过冒号的形式筛选
        $(":text").css("width","400px");
    
    </script>
    </body>
    </html>
    表单选择器

    实例之左侧菜单

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>left_menu</title>
    
        <style>
              .menu{
                  height: 500px;
                   30%;
                  background-color: gainsboro;
                  float: left;
              }
              .content{
                  height: 500px;
                   70%;
                  background-color: rebeccapurple;
                  float: left;
              }
             .title{
                 line-height: 50px;
                 background-color: #425a66;
                 color: forestgreen;}
    
    
             .hide{
                 display: none;
             }
    
    
        </style>
    </head>
    <body>
    
    <div class="outer">
        <div class="menu">
            <div class="item">
                <div class="title">菜单一</div>
                <div class="con">
                    <div>111</div>
                    <div>111</div>
                    <div>111</div>
                </div>
            </div>
            <div class="item">
                <div class="title">菜单二</div>
                <div class="con hide">
                    <div>111</div>
                    <div>111</div>
                    <div>111</div>
                </div>
            </div>
            <div class="item">
                <div class="title">菜单三</div>
                <div class="con hide">
                    <div>111</div>
                    <div>111</div>
                    <div>111</div>
                </div>
            </div>
    
        </div>
        <div class="content"></div>
    
    </div>
    <script src="jquery-3.2.1.js"></script>
    <script>
               $(".item .title").click(function () {
                    $(this).next().removeClass("hide").parent().siblings().children(".con").addClass("hide");
    
    //                $(this).next().removeClass("hide");
    //                $(this).parent().siblings().children(".con").addClass("hide");
               })
    </script>
    
    
    </body>
    </html>
    View Code

    实例之tab切换

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>tab</title>
        <script>
               function tab(self){
                   var index=$(self).attr("xxx");
                   $("#"+index).removeClass("hide").siblings().addClass("hide");
                   $(self).addClass("current").siblings().removeClass("current");
    
               }
        </script>
        <style>
            *{
                margin: 0px;
                padding: 0px;
            }
            .tab_outer{
                margin: 0px auto;
                 60%;
            }
            .menu{
                background-color: #cccccc;
                /*border: 1px solid red;*/
                line-height: 40px;
            }
            .menu li{
                display: inline-block;
            }
            .menu a{
                border-right: 1px solid red;
                padding: 11px;
            }
            .content{
                background-color: tan;
                border: 1px solid green;
                height: 300px;
            }
            .hide{
                display: none;
            }
    
            .current{
                background-color: darkgray;
                color: yellow;
                border-top: solid 2px rebeccapurple;
            }
        </style>
    </head>
    <body>
          <div class="tab_outer">
              <ul class="menu">
                  <li xxx="c1" class="current" onclick="tab(this);">菜单一</li>
                  <li xxx="c2" onclick="tab(this);">菜单二</li>
                  <li xxx="c3" onclick="tab(this);">菜单三</li>
              </ul>
              <div class="content">
                  <div id="c1">内容一</div>
                  <div id="c2" class="hide">内容二</div>
                  <div id="c3" class="hide">内容三</div>
              </div>
    
          </div>
    </body>
    </html>
    View Code

    3.2 筛选器

     3.2.1  过滤筛选器    

    与3.1.3基本筛选器实现的功能一样,但是推荐以后都用过滤筛选器这种方式实现。应该筛选条件是写在外面的,更灵活

    $("li").eq(2)  
    $("li").first()
    $("ul li").hasclass("test")
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <ul>
        <li>111</li>
        <li>222</li>
        <li>333</li>
        <li>444</li>
        <li>555</li>
        <li>666</li>
        <li>777</li>
        <li>888</li>
    </ul>
    
    <input type="text">
    <input type="checkbox">
    <input type="submit">
    
    <script src="jquery-3.3.1.js"></script>
    <script>
        $("li").eq(2).css("color","red");
        $("li").first().css("color","red");
        $("li").last().css("color","red");
    
    
    
    </script>
    </body>
    </html>
    过滤筛选器示例
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <li class="title">ll</li>
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            // 查询某标签是否具有某属性
           console.log($("li").hasClass("title2"));
        </script>
    </body>
    </html>
    查询某标签是否具有某属性

    3.2.2  查找筛选器(基本四组)

    非常重要,没有项目不用到这种筛选方法。

    1. 找子代
    $("div").children(".test")
    $("div").find(".test")

    2.找下一个 $(
    ".test").next()
    $(".test").nextAll()
    $(".test").nextUntil()

    3. 找上一个,完全与next组对应的 $(
    "div").prev()
    $("div").prevAll()
    $("div").prevUntil()

    4. $(
    ".test").parent()
    $(".test").parents()
    $(".test").parentUntil()
    $(
    "div").siblings()
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    
    <p id="p1" alex="sb">pppp</p>
    <p id="p2" alex2="sb">pppp2</p>
    
    <div class="outer"> outer
        <div class="inner">
            inner
            <p>孙子p标签</p>
        </div>
        <p>儿子p标签</p>
    </div>
    <div class="outer2">Yuan</div>
    <p>先走一步</p>
    
    
    <ul>
        <li>111</li>
        <li class="begin">222</li>
        <li>333</li>
        <li>444</li>
        <li>555</li>
        <li>666</li>
        <li id="end">777</li>
        <li>888</li>
    </ul>
    
    <input type="text">
    <input type="checkbox">
    <input type="submit">
    
    <script src="jquery-3.3.1.js"></script>
    <script>
        // 1. 根据一个已知的标签找到它的子代标签
        // 只找子标签
        $(".outer").children("p").css("color","red");
        // 找到.outer下的所有p标签
        $(".outer").find("p").css("color","red");
    
    //    2.next组查找
    //    找到索引为2的li标签的下一个标签
        $("li").eq(2).next().css("color","red");
    //    找到索引为2的li标签后面的所有标签
        $("li").eq(2).nextAll().css("color","red");
    //    从索引为2的li标签开始,一直找到 id=end的li标签,左开右开区间)
        $("li").eq(2).nextUntil("#end").css("color","red");
    
    //    3.prev组查找:向上找
    //    找到索引为2的li标签的上一个标签
        $("li").eq(2).prev().css("color","red");
    
        //    找到索引为2的li标签上面的所有标签
        $("li").eq(2).prevAll().css("color","red");
    
        //    从索引为5的li标签开始,一直找到 id=end的li标签,左开右开区间)
        $("li").eq(5).prevUntil(".begin").css("color","red");
    
    //    4. parent 组查找
        $(".outer .inner p").parent().css("color","red");
        $(".outer .inner p").parents().css("color","red");
    
    
        // 常用
        $(".outer .inner p").parentsUntil("body").css("color","red");
    
    // siblings 用的最多的. 找兄弟标签,上下的全部兄弟标签都找出来,除了.outer
       $(".outer").siblings().css("color", "red");
        
    </script>
    </body>
    </html>
    
    示例
    示例

    四 操作元素(属性,css,文档处理)

    4.1 属性操作

    --------------------------属性: attr 和 prop的使用方法和作用是完全一样的。区别只在于,attr既能处理固有属性,又能处理自定义属性,而prop只能处理固有属性
    $("").attr(); -->常用的属性标签:既可以取到属性值,也可以给属性设置值;既可以处理固有属性,也可以处理自定义属性,推荐attr只用来处理自定义属性
    $("").removeAttr();
    $("").prop();-->获取属性,如果存在返回true,如果不存在返回false,用于判断使用;只能处理固有的属性,所以推荐对所有固有属性,都用prop处理
    $("").removeProp();
    --------------------------CSS类
    $("").addClass(class|fn)   --> 见左侧菜单实例
    $("").removeClass([class|fn])-->见左侧菜单实例
    --------------------------HTML代码/文本/
    要处理的标签内部如果是html,就得用html()处理;
    要处理的标签内部如果是text,就得用text()处理; $(
    "").html([val|fn]) --> 用html,可以区别出里面是文本还是标签,然后进行替换 $("").text([val|fn]) --> text,()里的内容全部当做纯文本来处理,去替换 $("").val([val|fn|arr])--> val不能随便用,只能处理固有属性:input,option,select,表单类都有value属; 可以获取值也可以替换原来的值
    ---------------------------
    $("").css("color","red")

     需求:

     常见的web项目左侧有个菜单,点击某个菜单,该菜单下面的子菜单显示,其他菜单隐藏

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <!--2. 再处理布局-->
        <style>
            .outer{
                height: 1000px;
                 100%;
                background-color: gray;
            }
    
            .menu{
                float: left;
                background-color: rebeccapurple;
                 30%;
                height: 500px;
            }
            .title{
                background-color: lightgreen;
            }
    
            .hide{
                display: none;
            }
        </style>
    </head>
    <body>
    
        <!--步骤:1. 先写html-->
        <div class="outer">
            <div class="menu">
                <div class="item">
                    <div class="title" onclick="show(this)">菜单一</div>
                    <!--默认进来菜单一不是折叠的,可以去掉hide属性,如果是折叠的,就像下面那样写上hide-->
                    <div class="con hide">
                        <div>111</div>
                        <div>111</div>
                        <div>111</div>
                    </div>
                </div>
    
                <div class="item">
                    <div class="title" onclick="show(this)">菜单二</div>
                    <div class="con hide">
                        <div>222</div>
                        <div>222</div>
                        <div>222</div>
                    </div>
                </div>
    
                <div class="item">
                    <div class="title" onclick="show(this)">菜单三</div>
                    <div class="con hide">
                        <div>333</div>
                        <div>333</div>
                        <div>333</div>
                    </div>
                </div>
            </div>
            <div class="content"></div>
        </div>
    
        <!--3.JQuery实现功能-->
        // 先引入Jquery
        <script src="jquery-3.3.1.js"></script>
        <script>
            // this表示找到当前点击的元素,function函数里用self接
            function show(self) {
                // 1)实现点哪个菜单,该菜单下面的子菜单展示出来;
                // 用到JQuery的属性操作知识了,找到当前点击的菜单,移除它的hide属性
                $(self).next().removeClass("hide");
                // 2)同时其他菜单的子菜单全部折叠
                // 先找到当前点击菜单的父元素,再通过siblings找到父元素的所有兄弟元素,然后找到所有兄弟元素下面的子元素
                // 里的 con属性,为其增加 hide属性
                // 如果没有hide属性,就增加,如果已经有hide属性就不增加
                $(self).parent().siblings().children(".con").addClass("hide");
            }
        </script>
    </body>
    </html>
    左侧菜单显示折叠实例:addClass, removeClass
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="div1" con="c1"></div>
        <input type="checkbox" checked="checked"> 是否可见1
        <input type="checkbox" > 是否可见2
        <script src="jquery-3.3.1.js"></script>
        <script>
    
            // 1. attr()属性
            // attr属性,取出con属性的值
            console.log($("div").attr("con"));
            // attr属性,给con属性设置值;本来没有con1属性,还可以新增这个属性并设置属性值
            console.log($("div").attr("con","c2"));
            console.log($("div").attr("con1","c3"));
    
        //    2.取input标签的属性,看prop和attr的区别
            console.log($(":checkbox:first").attr("checked"));
            console.log($(":checkbox:last").attr("checked"));
    
            // prop返回的是属性的值,存在是true,不存在是false,方便用于判断
            // prop主要用来处理固有属性,比如上面自定义的con属性找不到的;
            // 如果是自己定义的属性,都用attr,更好的区分固有属性和自定义属性
            console.log($(":checkbox:first").prop("checked")); // attr和prop括号内都是些的属性名称,而不是具体的属性值
            console.log($(":checkbox:last").prop("checked"));
            // 自定义属性,找不到的
            console.log($(":checkbox:last").prop("con"));
            
        </script>
    </body>
    </html>
    attr和prop的区别
    <!DOCTYPE html>
    <html lang="en" xmlns="http://www.w3.org/1999/html">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="div1" con="c1"></div>
        <input type="checkbox" checked="checked"> 是否可见1
        <input type="checkbox" > 是否可见2  </br>
        <input type="text" value="请输入你的大名">
        <div value = "234">测试value是否可以检测到</div>
    
        <div id="id1">
            uuuuu
            <p>ppppp</p>
        </div>
        <script src="jquery-3.3.1.js"></script>
        <script>
            // html()把标签里面的所有内容都取出来了,有其他标签也会取出来
            console.log($("#id1").html());
            // text()只会把下面的文本内容取出来,带标签的文本,也只会把文本取出来
            console.log($("#id1").text());
            // html()里面如果加了内容,会把下面原理所有的内容都会用新内容替换,相当于重新设值了
            console.log($("#id1").html("<h1>Ma Ge</h1>>"));
            console.log($("#id1").html("用文本替换"));
    
            // 如果是text(),就会把text里面的所有内容都当做纯文本来处理的
            // console.log($("#id1").text("<h1>Ma Ge</h1>>"));
    
    
        //    val不能随便用,只能处理固有属性:input,option,select,表单类都有value属性
            console.log($(":text").val());
            // 替换掉原来的值
            console.log($(":text").val("把你的大名换掉"));
    
            console.log($(":text").next().val());  // div本身没有value属性,所以取不到
    
        //    css 修改样式
        //    css都是一个个键值对,第一个参数是属性,第二个参数是值
            $("div").css("color","red");
        //    如果想设置多个样式可以用字典的方式做
            $("div").css({"color":"red","background-color":"green"});
    
            
        </script>
    </body>
    </html>
    示例

    jQuery循环

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
        <p>哦哦哦哦哦</p>
        <p>哦哦哦哦哦</p>
        <p>哦哦哦哦哦</p>
        <p>哦哦哦哦哦</p>
        <p>哦哦哦哦哦</p>
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            arr = [11,22,33,44,55];
    
            //jQuery的循环方式1
    
            // $.each(obj:遍历对象; callback:就是函数)
            // function(x,y):两个参数,x:表示索引,y:表示索引对应的值
            $.each(arr,function (x,y) {
                console.log(x);
                console.log(y);
            });
    
    
            //jQuery的循环方式二,也是最常用的方式
            // 原理:
            // 1. 通常都是先拿到一个要遍历的标签对象集合,$("p"):即先找到要遍历的标签集合
            // 2. 然后对该集合里的标签进行遍历: .each(function(){}),这个each里就只有一个参数了,直接写function就行
            // 因为要遍历的对象是$("p")已经在前面了,each就是对它进行遍历的,所有只有一个参数
    
            //.each其实就已经对拿到的标签集合进行了处理,所以接下来关键的就是如何表示每一个标签,如何对遍历到的每个标签进行处理
            // 答案就是强大的this, $(this)就表示遍历到的标签集合里你当前要操作的标签;
            $("p").each(function () {
                // $(this) 就是用来表示集合$("p")里每一个标签,
                console.log($(this))  //$(this) 就代表当前的标签对象
                $(this).html("<h1>把哦哦哦哦哦改成嘎嘎嘎嘎嘎</h1>")
            })
    
            // JQuery和js可以混搭着用
            // for(var i = 0; i<arr.length;i++){
            //     $("p").eq(i).html(arr[i])
            // }
    
        </script>
    </body>
    </html>
    jQuery的两种循环方式
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <button onclick="selectAll()">全选</button>
        <button onclick="reverse()">反选</button>
        <button onclick="cancle()">取消</button>
    
        <table border="1px">
            <tr >
                <td><input type="checkbox"></td>
                <td>111</td>
                <td>111</td>
                <td>111</td>
            </tr>
    
            <tr >
                <td><input type="checkbox"></td>
                <td>222</td>
                <td>222</td>
                <td>222</td>
            </tr>
    
            <tr >
                <td><input type="checkbox"></td>
                <td>333</td>
                <td>333</td>
                <td>333</td>
            </tr>
        </table>
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            // 还是要先绑定一个函数,这个绑定方式还是按照js的绑定方式走的
    
            // 全选
            function selectAll() {
                // 在函数内部用jQuery进行遍历,然后把checked属性改为true
                $(":checkbox").each(function () {
                    $(this).prop("checked",true)
                })
            }
    
            //反选
            function reverse() {
                $(":checkbox").each(function () {
                    if ($(this).prop("checked")){
                        $(this).prop("checked",false)
                    }else{
                        $(this).prop("checked",true)
                    }
    
                })
    
            }
    
            // 取消
            function cancle() {
                $(":checkbox").each(function () {
                    $(this).prop("checked",false)
                })
    
            }
        </script>
    
    </body>
    </html>
    jQuery之正反选实例

     模态:

    就是执行一个操作,弹出一个透明页遮挡,让透明页底部的元素不可操作,透明页上面的元素可以操作

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .content{
                height: 1800px;
                background-color: antiquewhite;
            }
    
            .shade{
                position: fixed;
                /*占满屏,设置下面四个参数为0*/
                top:0;
                left:0;
                right: 0;
                bottom:0;
                background-color: gray;
                opacity: 0.7; /*透明度*/
            }
    
            .model{
                200px;
                height: 200px;
                background-color: bisque;
                border: #FF0000;
                /*居中*/
                position: absolute;
                top:50%;
                left: 50%;
                margin-top: -100px;
                margin-left: -100px;
    
            }
    
            .hide{
                display: none;
            }
        </style>
    </head>
    <body>
    
        <!-- 第一层:正常显示的网页内容-->
        <div class="content">
            <button onclick="show(this)">show</button>
        </div>
    
        <!--第二层:遮挡层:是有透明度的,且固定住不可让content内容再上下滑动了-->
        <div class="shade hide"></div>
    
        <!--第三层:点击show后显示在最上面的对话框-->
        <div class="model hide">
            <button onclick="cancle(this)">取消</button>
        </div>
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            function show(self) {
                $(self).parent().siblings().removeClass("hide")
            }
    
            function cancle(self) {
                // 方式1:链式寻找法操作
                $(self).parent().addClass("hide").prev().addClass("hide");
                
                // 方式2:先找到当前元素的父级,再找到父级的父级,然后父级下面的子级里有shade属性的标签,执行操作
                $(self).parent().parent().children(".models,.shade").addClass("hide")
    
    
            }
    
        </script>
    
    </body>
    </html>
    模态实例

    4.2 文档处理

    用于处理节点的增删改查

    //创建一个标签对象
        $("<p>")
    
    
    //内部插入  -- 插入的对象变成了儿子
       
      append是加到当前标签下面 $("").append(content|fn) ----->$("p").append("<b>Hello</b>"); 就是把append里的内容添加到前面的对象($("p"))里面去,= 给前面的对象加了个儿子 $("").appendTo(content) ----->$("p").appendTo("div"); 与append功能完全一样,只是写法不同,按正常顺序往下写的;将$("p")追加到"div"的下面 prepend是加到当前标签的上面
       $(
    "").prepend(content|fn) ----->$("p").prepend("<b>Hello</b>");将对象添加到$("p")的前面; $("").prependTo(content) ----->$("p").prependTo("#foo"); //外部插入 -- 插入的对象变成了兄弟, 原理类似 上面的内部插入 $("").after(content|fn) ----->$("p").after("<b>Hello</b>"); $("").before(content|fn) ----->$("p").before("<b>Hello</b>"); $("").insertAfter(content) ----->$("p").insertAfter("#foo"); $("").insertBefore(content) ----->$("p").insertBefore("#foo"); //替换 $("").replaceWith(content|fn) ----->$("p").replaceWith("<b>Paragraph. </b>"); //删除 $("").empty() $("").remove([expr]) //复制 $("").clone([Even[,deepEven]])
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="c1">
            <p>P级父标签</p>
        </div>
    
        <button class="b1">add</button>
        <script src="jquery-3.3.1.js"></script>
        <script>
    
            // append 内部插入 ---插入到下面
    
            // 点击add 按钮,给p标签下面添加一个 h1标签
            // 先找到button标签,给绑定一个click事件,然后给click事件一个函数,执行某功能
            $("button").click(function () {
                var $ele = $("<h1></h1>");   // 定义一个jquery变量,令该变量是一个h1标签;通变量写活了
                $ele.html("Hello World").css("color","red"); // 给该标签对象赋值
    
                $(".c1").append($ele);  // 将$els对象添加到 p级标签的下面
    
                   // appendTo :将要添加的对象$ele添加到".c1"的下面,按顺序写,更好看懂
            // 实现的功能与append是完全一样的,只是写法不同
                $ele.appendTo(".c1");
            });
    
    
            // prepend 内部插入--插入到上面
            
            // 点击add 按钮,给p标签下面添加一个 h1标签
            // 先找到button标签,给绑定一个click事件,然后给click事件一个函数,执行某功能
            $(".b1").click(function () {
                var $ele1 = $("<h1></h1>");   // 定义一个jquery变量,令该变量是一个h1标签;通变量写活了
                $ele1.html("加到当前标签的上面").css("color","green"); // 给该标签对象赋值
    
                $(".c1").prepend($ele1);  // 将$els对象添加到 p级标签的下面
    
                $ele1.prependTo(".c1");
            });
    
            // 第二种方式,直接append,只不过写死了
            $(".c1").append("<h2>直接添加h2标签</h2>").css("color","green");
    
        </script>
    </body>
    </html>
    内部插入示例append, prepend
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="c1">
            <p>P级父标签</p>
        </div>
    
        <button class="b1">add</button>
        <script src="jquery-3.3.1.js"></script>
        <script>
    
            // after 外部插入 ---插入到当前对象的下面,变成了二弟
    
            $("button").click(function () {
                var $ele = $("<h1></h1>");
                $ele.html("插入到当前对象的下面,变成了二弟").css("color","red");
                // 插入方式1
                $(".c1").after($ele);
                // 插入方式2
                // $ele.insertAfter(".c1");
            });
    
    
            // before 外部插入--插入到当前对象的上面,变成了大哥
    
            $(".b1").click(function () {
                var $ele1 = $("<h1></h1>");
                $ele1.html("插入到当前对象的上面,变成了大哥").css("color","green");
                // $(".c1").before($ele1);
    
                $ele1.insertBefore(".c1");
            });
    
    
    
        </script>
    </body>
    </html>
    外部插入before,after
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="c1">
            <p>P级父标签</p>
        </div>
    
        <button class="b1">add</button>
        <script src="jquery-3.3.1.js"></script>
        <script>
    
            $(".b1").click(function () {
                var $ele1 = $("<h1></h1>");
                $ele1.html("替换掉P标签").css("color","green");
                $(".c1").replaceWith($ele1);
            });
    
        </script>
    </body>
    </html>
    替换:replaceWith
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="c1">
            <p>P级父标签</p>
            <h1>h1能清空吗</h1>
        </div>
    
        <button class="b1">删除</button>
        <script src="jquery-3.3.1.js"></script>
        <script>
            
            $(".b1").click(function () {
                // empty:h1这个当前标签还在,只是下面的p标签没了
                $(".c1 h1").empty();
    
                // remove:c1这个当前标签也被删除了
                $(".c1").remove();
            });
    
        </script>
    </body>
    </html>
    删除和清空:empty和remove
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="c1">
            <p>P级父标签</p>
            <h1>h1能清空吗</h1>
        </div>
    
        <button class="b1">复制</button>
        <script src="jquery-3.3.1.js"></script>
        <script>
    
            $(".b1").click(function () {
                $(".c1").clone().insertAfter(".c1")
            });
    
        </script>
    </body>
    </html>
    复制:clone

    但是,这个clone有个问题,执行添加多次,是成倍的复制的,下面的示例来解决这个问题

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
        <div class="outer">
            <div class="item">
                <button onclick="clone_obj(this)"> + </button>
                <input type="text">
            </div>
        </div>
    
    
        <script src="jquery-3.3.1.js"></script>
        <script>
    
            function conle_obj(self) {
                // 定义个变量,通过this可以找到本标签,然后找到本标签的父级item,复制
                var $conle_object = $(self).parent().clone();
                // 然后将复制的标签插入到.outer的下面
                $conle_object.insertAfter(".outer");
            };
    
    
        </script>
    </body>
    </html>
    解决成倍复制的问题

    新需求:让新复制的变成减号,点击减号可以删除标签

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
        <div class="outer">
            <div class="item">
                <button onclick="clone_obj(this)"> + </button>
                <input type="text">
            </div>
        </div>
    
    
        <script src="jquery-3.3.1.js"></script>
        <script>
    
            function clone_obj(self) {
                // 1.定义个变量,通过this可以找到本标签,然后找到本标签的父级item,复制
                var $conle_object = $(self).parent().clone();
    
                // 2. children("button").html("-")是找到子标签然后改成 -
                // attr("onclick","remove_obj(this)") 是添加一个onclick点击属性,属性名remove_obj(this)
                $conle_object.children("button").html("-").attr("onclick","remove_obj(this)");
    
                // 3. 然后再把该对象添加到.outer下面
                $conle_object.appendTo(".outer");
            };
    
            // 4.点击减号的时候可以删除
            function remove_obj(self){
                $(self).parent().remove()
    
            }
        </script>
    </body>
    </html>
    可以复制,也可以remove

    4.3 css操作

    CSS
            $("").css(name|pro|[,val|fn])
        位置
            $("").offset([coordinates]):标签相当于视口(当前窗口)的偏移量
            $("").position():相对于已经定位了的父标签的偏移量
    $(
    "").scrollTop([val]):scrollTop:表示举例顶部的距离 $("").scrollLeft([val]) 尺寸 $("").height([val|fn]):拿到的就是内容的高度,还可以改值,比如加上参数:height("300px"),高度就变成了300px了 $("").width([val|fn]):拿到的是内容的宽度 $("").innerHeight():拿到的是包括了padding,没包括boder的 $("").innerWidth() $("").outerHeight([options]):拿到的是包括了padding和boder的;如果再加个options 为 true的参数,就会包括margin了 $("").outerWidth([options])
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <style>
            /*  将 body的边距设置位0 */
            body{
                margin: 0px;
                padding: 0px;
            }
    
            .div1,.div2{
                height: 200px;
                 200px;
            }
    
            .div1{
                background-color: red;
            }
            .div2{
                background-color: rebeccapurple;
            }
    
        </style>
    
    </head>
    <body>
        <div class="div1"></div>
        <div class="div2"></div>
    
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            // offset 和 position都只有两个方法:top 和 left
            // offset方法的参照对象都是当前视口(能看见的窗口)
            console.log($(".div1").offset().top);
            console.log($(".div1").offset().left);
            // position的参数对象是已经定位了的父级标签
            // 该示例中,它的父级标签就是body,body默认就是已经定位了的
            console.log($(".div2").position().top);
            console.log($(".div2").position().left);
        </script>
    </body>
    </html>
    位置:offset和position
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <style>
            /*  将 body的边距设置位0 */
            body{
                margin: 0px;
                padding: 0px;
            }
    
            .div1,.div2{
                height: 200px;
                 200px;
            }
    
            .div1{
                background-color: red;
            }
            .div2{
                background-color: rebeccapurple;
            }
    
            .outer{
                position: relative;
                height: 400px;
                 400px;
                background-color: green;
            }
    
        </style>
    
    </head>
    <body>
        <div class="div1"></div>
    
        <div class="outer">
            <div class="div2"></div>
        </div>
    
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            // offset 和 position都只有两个方法:top 和 left
            // offset方法的参照对象都是当前视口(能看见的窗口)
            console.log($(".div1").offset().top);
            console.log($(".div1").offset().left);
            // position的参数对象是已经定位了的父级标签
            // 该示例中,它的父级标签就是outer,outer已经定位了
            // 所以此时,再看他的位置,就是相对于outer来说的,变成了0,0
            console.log($(".div2").position().top);
            console.log($(".div2").position().left);
        </script>
    </body>
    </html>
    位置:position相对于已经定位的父级标签标签
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <style>
            /*  将 body的边距设置位0 */
            body{
                margin: 0px;
                padding: 0px;
            }
    
            .div1,.div2{
                height: 200px;
                 200px;
            }
    
            .div1{
                background-color: red;
                border: 6px solid black;
                padding: 20px;
                margin: 3px;
    
            }
            .div2{
                background-color: rebeccapurple;
            }
    
            .outer{
                position: relative;
                height: 400px;
                 400px;
                background-color: green;
            }
    
        </style>
    
    </head>
    <body>
        <div class="div1"></div>
    
        <div class="outer">
            <div class="div2"></div>
        </div>
    
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            // height: 拿到的就是内容的大小 --- 用的最多
            // innerHeight: 取出的是带着padding的大小
            // outerHeight: 取出的是带着padding 和 boder的大小
    
            console.log($(".div1").height());   // 200
            console.log($(".div1").height("300px"));   // 340 可以改值
            console.log($(".div1").innerHeight()); // 240
            console.log($(".div1").outerHeight()); // 252
            console.log($(".div1").outerHeight(true)); // 258 加上参数true,就包括了外边距margin了。
    
        </script>
    </body>
    </html>
    尺寸示例

    实例:返回顶部

    需求:

    1. 出现滚动条;2;随着滚动条的下滑,底部出现"返回顶部",点击页面滚动条返回到顶部

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <style>
    
            .div1,.div2{
                height: 2000px;
                 100%;
            }
    
            .div1{
                background-color: red;
            }
            .div2{
                background-color: rebeccapurple;
            }
    
            /*让返回顶部固定到右下角*/
            .return-to-top{
                 80px;
                height: 50px;
                position: fixed;
                right: 20px;
                bottom: 20px;
                background-color: bisque;
                line-height: 50px;
                text-align: center;
            }
            /*隐藏某个标签,给它加个hide 属性,然后display =none 这都是套路*/
            .hide{
                display: none;
            }
    
    
        </style>
    
    </head>
    <body>
        <div class="div1"></div>
    
        <div class="outer">
            <div class="div2"></div>
        </div>
    
        <div class="return-to-top hide" onclick="returnTop()">返回顶部</div>
    
    
        <script src="jquery-3.3.1.js"></script>
        <script>
    
            // window.onscroll 通过窗口的onscrool属性来监听滚动事件
    
            window.onscroll = function f() {
                // 可以看到滚动条当前的位置与窗口顶部的举例
                console.log($(window).scrollTop());
    
            //  滚动条滑动过程中才出现返回顶部,默认不显示返回顶部
            //  需要用到判断
            //    $(window).scrollTop()得到的是距离窗口顶部的距离,是一个具体的值
            //    当该值>800时,将hide属性移除,就显示了返回顶部
                if ($(window).scrollTop()>800){
                    $(".return-to-top").removeClass("hide")
                }
                // 当该值小于800时,就添加hide属性,返回顶部就隐藏了
                else {
                    $(".return-to-top").addClass("hide")
                }
    
    
            };
    
            function returnTop() {
    
                //以window为作为当前窗口,是个参照物;事件监听对象
                // scrollTop(0):表示举例window窗口顶部距离为0
                // 这样就实现了点击返回顶部的功能
                $(window).scrollTop(0)
    
            }
    
        </script>
    </body>
    </html>
    返回顶部实例
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <style>
    
            .div1,.div2{
                height: 2000px;
                 100%;
            }
    
            /*overflow: auto表示内容填充满后会自动产生一个滚动条,而不会再溢出内容 */
            .div1{
                background-color: red;
                height: 300px;
                 300px;
                overflow: auto;
            }
            .div2{
                background-color: rebeccapurple;
            }
    
            /*让返回顶部固定到右下角*/
            .return-to-top{
                 80px;
                height: 50px;
                position: fixed;
                right: 20px;
                bottom: 20px;
                background-color: bisque;
                line-height: 50px;
                text-align: center;
            }
            /*隐藏某个标签,给它加个hide 属性,然后display =none 这都是套路*/
            .hide{
                display: none;
            }
    
    
        </style>
    
    </head>
    <body>
        <div class="div1">
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
        </div>
    
        <div class="outer">
            <div class="div2">
                    <button class="return-top" onclick="returnTop()">returntop</button>
            </div>
        </div>
    
    
        <script src="jquery-3.3.1.js"></script>
        <script>
    
            // 监听局部div1,让一点returntop button,就返回顶部
            function returnTop() {
                //$(".div1"):要监听哪个,就找哪个,不一定非得是监听Window
                $(".div1").scrollTop(0)
    
            }
    
        </script>
    </body>
    </html>
    监听div,返回顶部

    五 事件页面载入

    
    

    页面载入

       
    ready(fn)
    //当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。 页面载入语法1:
    $(document).ready(function(){
       函数代码
    })

    页面载入语法2:是语法一的简写方式:
    $(function(){
       函数代码
    }) 事件委托(.on)---终极版的绑定方法 $(
    "").on(eve,[selector],[data],fn) // 在选择元素上绑定一个或多个事件的事件处理函数。 // .on的selector参数是筛选出调用.on方法的dom元素的指定子元素,如: // $('ul').on('click', 'li', function(){console.log('click');})就是筛选出ul下的li给其绑定click事件;
    // 语法解析:就是给ul标签绑定了click事件,然后ul把这个事件委托给它下面的所有li标签,使所有li标签都具有click的事件
    [selector]参数的好处: 好处在于.on方法为动态添加的元素也能绑上指定事件;如: //$('ul li').on('click', function(){console.log('click');})的绑定方式和 //$('ul li').bind('click', function(){console.log('click');})一样;
         
        
      我通过js给ul添加了一个
    //li:$('ul').append('<li>js new li<li>');这个新加的li是不会被绑上click事件的 //但是用$('ul').on('click', 'li', function(){console.log('click');}方式绑定,然后动态添加 //li:$('ul').append('<li>js new li<li>');这个新生成的li被绑上了click事件 [data]参数的调用: function myHandler(event) { alert(event.data.foo); } $("li").on("click", {foo: "bar"}, myHandler)
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    </head>
    <body>
        <ul>
            <li>111</li>
            <li>222</li>
            <li>333</li>
            <li>444</li>
            <li>555</li>
    
        </ul>
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            // 在js里找到li标签,没法直接按照下面的方式用,需要遍历后才能用
            // var eles = document.getElementsByTagName("li");
            // eles.onclick = function () {
            //     alert(123)
            // }
    
            // 来看看jquery的方便之处
        //    ul,li标签都没有绑定任何事件
    
    
        //    1. 下面看Jquer的事件绑定————简写方式
    
            // 用jquery绑定事件,就已经帮你做了内部遍历了
            $("ul li").click(function () {
                alert("Jquety之事件绑定简写方式")
    
            });
    
        //  2.事件绑定的完整写法
        //    上面的简写方式如果写完整了就是下面的样子,把click 和 function作为参数传递进去
        //    首先还是得先找到要绑定的标签
            $("ul li").bind("click",function () {
                alert("Jquety之事件绑定的完整写法")
            });
    
        //    3. 有事件绑定,就有事件解绑
            $("ul li").unbind("click");
    
    
    
        </script>
    </body>
    </html>
    事件绑定示例
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    </head>
    <body>
        <ul>
            <li>111</li>
            <li>222</li>
            <li>333</li>
            <li>444</li>
            <li>555</li>
        </ul>
    
        <button>add</button>
    
        <script src="jquery-3.3.1.js"></script>
        <script>
    
        // 事件绑定  --- 平时就用事件绑定就够了
            $("ul li").click(function () {
                alert("Jquety之事件绑定简写方式")
    
            });
    
        //    on:事件委托
        // 但是上面新增的标签却没有点击事件,只是把标签加上了而已,如何才能动态给新增的标签也绑定事件呢?
        //    用事件委托的方式解决这个问题----用 on方法
        // on(第一个参数是事件,此例子是click事件,第二个参数是对谁起作用,本利是li标签,第三个参数是具体的函数)
        // 这个事件委托本质就是给ul绑定了一个事件,然后ul把这个事件委托给了ul下面的所有的li,这个时候,其实主语就变成了ul
        // 遇到动态绑定,就需要用到事件委托了
        $("ul").on("click","li",function () {
            alert("Jquety之事件委托方式")
    
        });
    
        //  给button标签绑定事件,一点击就新增衣蛾li标签,并数字也变化
            $("button").click(function () {
            //    1. 先创建一个li标签
                var $eli = $("<li>");
                // 2. 获取li标签的长度
                var len = $("ul li").length;
                // 3. 给新增的li标签加1再*1111,用来作为新增的li标签的文本
                $eli.html((len+1)*111);
            //    4. 然后将li标签添加到ul里去
                $eli.appendTo("ul");
            })
    
        </script>
    </body>
    </html>
    on:事件委托
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
            <script src="jquery-3.3.1.js"></script>
        <script>
    
            // 如果直接把jquery放到head里,这个功能就无法生效,因为上面的加载完了,下面的body的代码还没加载完,找不到 "ul li"
            // $("ul li").html(5)
    
        //    所以就引入一个页面载入,等所有页面就加载完成后再执行函数
        //    1. 完整写法方式
            $(document).ready(function () {
                $("ul li").html(5)
            });
    
            // 2. 页面加载简写方式
            $(function () {
                $("ul li").html(5)
            })
    
        </script>
    
    </head>
    <body>
        <ul>
            <li>111</li>
            <li>222</li>
            <li>333</li>
            <li>444</li>
            <li>555</li>
        </ul>
    
        <button>add</button>
    
    
    </body>
    </html>
    页面载入完整写法和简写

    六 动画效果

    1. 显示与隐藏 

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>动画效果-显示与隐藏</title>
    </head>
    <body>
        <div>hello</div>
        <button onclick="f1()">显示</button>
        <button onclick="f2()">隐藏</button>
        <button onclick="f3()">切换</button>
    
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            function f1() {
                    // $("div").show();   // 点击就可以显示div
                $("div").show(1000)   // 点击就可以显示div,参数表示的毫秒,慢慢显示
    
            }
    
            function f2() {
                    // $("div").hide()  // 点击就可以隐藏div
                $("div").hide(1000)  // 点击就可以隐藏div,参数表示的是毫秒,可以实现慢慢隐藏的效果
            }
            
            // toggle()方法,一个方法可以实现上面两个功能,会自己判断,
            // 如果div是隐藏的,点击就会显示;如果div是显示的,点击就会隐藏
            function f3() {
                $("div").toggle(1000)
            }
    
    
        </script>
    </body>
    </html>
    显示与隐藏 show hide

    2. 滑动

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="jquery-3.3.1.js"></script>
        <script>
        $(document).ready(function(){
    
         //   找到div给它绑定一个click事件
         $("#slideDown").click(function(){
             $("#content").slideDown(1000);  // 向上滑动
         });
          $("#slideUp").click(function(){
             $("#content").slideUp(1000);    // 向下滑动
         });
          $("#slideToggle").click(function(){
             $("#content").slideToggle(1000);   // 自己判断是向上滑还是向下滑;根据需求决定是否加参数,表示时间
         })
      });
        </script>
        <style>
    
            #content{
                text-align: center;
                background-color: lightblue;
                border:solid 1px red;
                display: none;
                padding: 50px;
            }
        </style>
    </head>
    <body>
    
        <div id="slideDown">出现</div>
        <div id="slideUp">隐藏</div>
        <div id="slideToggle">toggle</div>
    
        <div id="content">helloworld</div>
    
    </body>
    </html>
    滑动 sliddeUp slideDown slideToggle

    3.淡入淡出

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>淡入淡出</title>
    
        <style>
            .div1{
                 80px;
                height: 80px;
                background-color: #FF0000;
    
            }
        </style>
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            $(document).ready(function () {
                $("#in").click(function () {
                    $(".div1").fadeIn(2000)
                });
    
                $("#out").click(function () {
                    $(".div1").fadeOut(2000)
                });
    
                $("#switch").click(function () {
                   $(".div1").fadeToggle(2000)
                });
                
                // 淡出到某个设定的透明度为止,只有fadeTo有透明度参数
                $("#to").click(function () {
                    $(".div1").fadeTo(2000, 0.4)
                })
            })
    
        </script>
    </head>
    <body>
        <button id="in">淡入</button>
        <button id="out">淡出</button>
        <button id="switch">切换</button>
        <button id="to">fadeto</button>
    
        <div class="div1"></div>
    
    
    </body>
    </html>
    淡入淡出fadeIn fadeOut fadeToggle fadeTo

    4.回调函数

    python里的回调函数就是callback

    所谓回调函数:就是完成了一个动作之后再去执行某个内容

    比如上面的淡出动画效果完成后,在执行一个回调函数,弹出alert

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>淡入淡出</title>
    
        <style>
            .div1{
                 80px;
                height: 80px;
                background-color: #FF0000;
    
            }
        </style>
    
        <script src="jquery-3.3.1.js"></script>
        <script>
            $(document).ready(function () {
                $("#in").click(function () {
                    $(".div1").fadeIn(2000)
                });
    
                $("#out").click(function () {
                    // 淡出效果2秒钟完成后,再执行回调函数function,弹出alert
                    $(".div1").fadeOut(2000,function () {
                        alert("1234")
                    })
                });
    
                $("#switch").click(function () {
                   $(".div1").fadeToggle(2000)
                });
    
                // 淡出到某个设定的透明度为止,只有fadeTo有透明度参数
                $("#to").click(function () {
                    $(".div1").fadeTo(2000, 0.4)
                })
            })
    
        </script>
    </head>
    <body>
        <button id="in">淡入</button>
        <button id="out">淡出</button>
        <button id="switch">切换</button>
        <button id="to">fadeto</button>
    
        <div class="div1"></div>
    
    
    </body>
    </html>
    回调函数

    七 扩展方法 (插件机制)

    一 用JQuery写插件时,最核心的方两个方法

    <script>
        
    $.extend(object)      //为JQuery 添加一个静态方法。
    $.fn.extend(object)   //为JQuery实例添加一个方法。
    
       // jQuery.extend 也可以写成 $.extend
        jQuery.extend({
              min: function(a, b) { return a < b ? a : b; },  // 三元表达式:如果a<b,返回a,否则返回 b
              max: function(a, b) { return a > b ? a : b; }
            });
        console.log($.min(3,4));
    
    //-----------------------------------------------------------------------
    
    $.fn.extend({
        "print":function(){
            for (var i=0;i<this.length;i++){
                console.log($(this)[i].innerHTML)
            }
    
        }
    });
    
    $("p").print();
    </script>

    二 定义作用域

          定义一个JQuery插件,首先要把这个插件的代码放在一个不受外界干扰的地方。如果用专业些的话来说就是要为这个插件定义私有作用域。外部的代码不能直接访问插件内部的代码。插件内部的代码不污染全局变量。在一定的作用上解耦了插件与运行环境的依赖。

    (function(a,b){return a+b})(3,5)
    
           (function ($) { })(jQuery);
    //相当于
            var fn = function ($) { };
            fn(jQuery);

    三 默认参数

    定义了jQuery插件之后,如果希望某些参数具有默认值,那么可以以这种方式来指定

    /step01 定义JQuery的作用域
    (function ($) {
        //step03-a 插件的默认值属性
        var defaults = {
            prevId: 'prevBtn',
            prevText: 'Previous',
            nextId: 'nextBtn',
            nextText: 'Next'
            //……
        };
        //step06-a 在插件里定义方法
        var showLink = function (obj) {
            $(obj).append(function () { return "(" + $(obj).attr("href") + ")" });
        }
    
        //step02 插件的扩展方法名称
        $.fn.easySlider = function (options) {
            //step03-b 合并用户自定义属性,默认属性
            var options = $.extend(defaults, options);
            //step4 支持JQuery选择器
            //step5 支持链式调用
            return this.each(function () {
                //step06-b 在插件里定义方法
                showLink(this);
            });
        }
    })(jQuery);
    View Code

    参考博客:http://www.cnblogs.com/xcj26/p/3345556.html

    八 经典实例练习

    实例之注册验证

    <form class="Form">
    
        <p><input class="v1" type="text" name="username" mark="用户名"></p>
        <p><input class="v1" type="text" name="email" mark="邮箱"></p>
        <p><input class="v1" type="submit" value="submit"  onclick="return validate()"></p>
    
    </form>
    
    <script src="jquery-3.1.1.js"></script>
    <script>
        // 注意:
        // DOM对象--->jquery对象    $(DOM)
        // jquery对象--->DOM对象    $("")[0]
    
        //---------------------------------------------------------
    
    
        // DOM绑定版本
        function validate(){
    
            flag=true;
    
            $("Form .v1").each(function(){
                $(this).next("span").remove();// 防止对此点击按钮产生多个span标签
                  var value=$(this).val();
                if (value.trim().length==0){
                     var mark=$(this).attr("mark");
                     var ele=document.createElement("span");
                     ele.innerHTML=mark+"不能为空!";
                     $(this).after(ele);
                     $(ele).prop("class","error");// DOM对象转换为jquery对象
                     flag=false;
                     //  return false-------->引出$.each的return false注意点
                }
    
    
            });
    
            return flag
        }
                       //---------------------------------------------------------
    //---------------------------------------------------------
                       //---------------------------------------------------------
    
    
    
            function f(){
    
            for(var i=0;i<4;i++){
    
                if (i==2){
                    return
                }
                console.log(i)
            }
    
        }
        f();  // 这个例子大家应该不会有问题吧!!!
    //------------------------------------------
        li=[11,22,33,44];
        $.each(li,function(i,v){
    
            if (v==33){
                    return ;   //  ===试一试 return false会怎样?
                }
                console.log(v)
        });
    
    //------------------------------------------
    
        //  $.MyEach(obj,function(i,v){}):
             for(var i in obj){
    
                 func(i,obj[i]) ; //  i就是索引,v就是对应值
                 // {}:我们写的大括号的内容就是func的执行语句;
             }
    
        // 大家再考虑: function里的return只是结束了当前的函数,并不会影响后面函数的执行
    
        //本来这样没问题,但因为我们的需求里有很多这样的情况:我们不管循环到第几个函数时,一旦return了,
        //希望后面的函数也不再执行了!基于此,jquery在$.each里又加了一步:
             for(var i in obj){
    
                 ret=func(i,obj[i]) ;
                 if(ret==false){
                     return ;
                 }
    
             }
        // 这样就很灵活了:
        // <1>如果你想return后下面循环函数继续执行,那么就直接写return或return true
        // <2>如果你不想return后下面循环函数继续执行,那么就直接写return false
    
    
    // ---------------------------------------------------------------------
       // 说了这么多,请问大家如果我们的需求是:判断出一个输入有问题后面就不判断了(当然也就不显示了),
       // 怎么办呢?
       // 对了
        if (value.trim().length==0){
                      //...
                      //...
                      //flag=false;  //   flag=false不要去,它的功能是最后如果有问题,不提交数据!
                      return false
                }
    
    
    //最后,大家尝试着用jquery的绑定来完成这个功能!
    
          $(".Form :submit").click(function(){});
        
    </script>
    View Code

    轮播图练习

    .outer{
         520px;
        height: 280px;
        margin: 80px auto;
        position: relative; /*relative相对定位加上后,才会按照父亲本身的盒子居中定位*/
    }
    
    /*.img其实不需要什么样式,关键是它下面的图片需要样式,
    每张图片都按照父亲进行绝对定位,定位的时候都叠加到一起*/
    .img li{
        position: absolute;
        list-style: none;  /*把li的样式给去掉*/
        top: 0;
        left: 0;
    }
    
    
    .num{
        position: absolute;
        bottom: 10px;
        left: 30%;  /*居中*/
        list-style: none;
    }
    
    
    .num li {
        display: inline-block;
         18px;
        height: 18px;
        background-color: white;
        border-radius: 50%;   /*设置成圆球*/
        text-align: center;
        line-height: 18px;
        margin-left: 14px;   /*每个li之间的间距*/
        font-size: 0; /*把字体大小设置为0,就不显示1,2,3,4*/
    
    }
    
    .btn{
        position: absolute; /*加上就能看见了*/
        top: 110px;   /*举例盒子顶部的一半140px- btn的一半30px, 就能实现居中*/
         30px;
        height: 60px;
        background-color: lightgray;
        color: white;
        text-align: center;/*左右居中*/
        line-height: 55px;/*上下居中*/
        font-size: 30px;
        opacity: 0.6;  /*透明度*/
        display: none;  /*默认不显示左右切换箭头*/
    
    }
    
    .left{
        left: 0;
    }
    
    .right{
        right: 0;
    }
    
    /*鼠标悬浮在图片上的时候,左右的切换箭头显示*/
    .outer:hover .btn{
        display: block;
    }
    
    .num .active{
        background-color: #FF0000;
    }
    css样式
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script src="jquery-3.1.1.js"></script>
        <title>Title</title>
    
        <link rel="stylesheet" href="css/lunbo.css">
    
    
    </head>
    <body>
    
    
          <div class="outer">
              <ul class="img">
                  <li><a href=""><img src="img/1.jpg" alt=""></a></li>
                  <li><a href=""><img src="img/2.jpg" alt=""></a></li>
                  <li><a href=""><img src="img/3.jpg" alt=""></a></li>
                  <li><a href=""><img src="img/4.jpg" alt=""></a></li>
    
              </ul>
    
              <ul class="num">
                  <li class="active"></li>
                 <!--空的,下面可以实现动态添加-->
                  <!--<li>1</li>-->
                  <!--<li>2</li>-->
                  <!--<li>3</li>-->
                  <!--<li>4</li>-->
              </ul>
    
              <div class="left  btn"> < </div>
              <div class="right btn"> > </div>
    
          </div>
    
          <script src="jquery-3.3.1.js"></script>
    <script>
        var i=0;
    //  通过jquery自动创建按钮标签
        /*
            通过jquery 自动创建标签
            根据图片数量实现动态添加num 下的li标签
            */
        var img_num=$(".img li").length;  /*看有多少个图片,size 和 length都可以*/
    
        for(var j=0;j<img_num;j++){
            $(".num").append("<li></li>")
        }
        // 给上面循环加的li标签加上属性active,进来的时候就是默认给第一个加上active的
        $(".num li").eq(0).addClass("active");
    
    
        // 先做手动悬浮的轮播
            /*
            1. 鼠标放在哪个圆点上,哪个圆点变红
            2. 对应的图片也显示出来
            */
    // 手动轮播
           /*给num下的li绑定事件*/
        $(".num li").mouseover(function () {
            i=$(this).index();
            $(this).addClass("active").siblings().removeClass("active");
            // 当鼠标悬浮在小圆点上的时候,对应的图片展示出来
                // 方法一:show(), hide()
                // $(".img li").eq(index).show():通过索引找到对应的图片,让他显示出来
                // .siblings().hide() 让该索引对应的其他兄弟姐妹图片都隐藏
                // $(".img li").eq(index).show().siblings().hide();
                // $(".img li").eq(index).show(1000).siblings().hide(); // 有个特殊展开的效果
    
                // 方法二:淡入淡出
                // 道理同上
                // 但是这个有个小bug,如果快速在小圆点滑动多次停下,然后图片还在那里不停的闪烁
            // $(".img li").eq(index).fadeIn(1000).siblings().fadeOut();
    
            
                // 解决办法:加个stop
                // 意思是当鼠标悬浮在哪个小圆点时,其他的效果全部停止,然后执行淡入,或者淡出效果
            $(".img li").eq(i).stop().fadeIn(200).siblings().stop().fadeOut(200)
    
        });
    
    
    // 自动轮播
                //    自动轮播
            //    设置一个定时器 c, 每隔1500毫秒,执行一次GO_R函数
        var c=setInterval(GO_R,1500);
    
    
        function GO_R() {
    
            if(i==img_num-1){
                i=-1
            }
             i++;
             $(".num li").eq(i).addClass("active").siblings().removeClass("active");
             $(".img li").eq(i).stop().fadeIn(1000).siblings().stop().fadeOut(1000)
    
        }
    
    
        function GO_L() {
            if(i==0){
                i=img_num
            }
             i--;
             $(".num li").eq(i).addClass("active").siblings().removeClass("active");
             $(".img li").eq(i).stop().fadeIn(1000).siblings().stop().fadeOut(1000)
        }
        
        // hover(参数一:表示悬浮是,参数二:表示没有悬浮时)
    
        $(".outer").hover(function () {
            clearInterval(c)
        },function () {
            c=setInterval(GO_R,1500)
        });
    
    // button 加定播
        //    给btn加手动定播
        
        $(".right").click(GO_R);
        $(".left").click(GO_L)
    
    
    
    </script>
    </body>
    </html>
    轮播

     

    转:https://www.cnblogs.com/yuanchenqi/articles/6070667.html 

  • 相关阅读:
    5.24 javascrip累加求和练习
    5.23 汽车之家 界面练习
    5.22 格式与布局知识点整理
    MVC4是不是类似于html页+ashx页之间用JSON通过AJAX交换数据这种方式、?
    .net面试题
    ASP.Net1
    登陆、激活、权限
    无边框窗体
    用户控件
    弹出唯一窗口
  • 原文地址:https://www.cnblogs.com/victorm/p/9614983.html
Copyright © 2020-2023  润新知