第二阶段(day05)jquery

1.Jquery介绍

1.1jquery带来的改变

隔行变色效果 传统js需要很多行代码 通过jquery 只需要一行

$(“tr:even”).not(“:first”).css(“background-color”,”#eee”);

前端技术发展中,javascript作为基本技术,出现越来越多这样繁琐的问题,故,出现了各种js的扩展库。不同的扩展库语法区别很大,换一个就相当于学习新语言。(故,前端技术学的很多),后面还要学vue。

1.2jquery介绍

随着JavaScript、CSS、Ajax等技术的不断进步,越来越多的开发者将一个又一个丰富多彩的程序功能进行封装,供其他人可以调用这些封装好的js库-----扩展库(一堆写好的js文件)

如jquery extjs等

Jquery特点:(j宽瑞)

1.流行的JavaScript程序库

2.它是对JavaScript对象和函数的封装

3.它的设计思想是write less,do more

案例:用js写table隔行变色:

<!DOCTYPE html>
<html>
    <head> 
        <meta charset="utf-8">
        <title></title>
        <script src="js/jquery-3.6.0.min.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <table id="mytable" border="1">
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
            <tr>
                <td>1</td>
                <td>xiaoming</td>
                <td>15</td>
                
            </tr>
            <tr>
                <td>1</td>
                <td>xiaoming</td>
                <td>15</td>
                
            </tr>
            <tr>
                <td>1</td>
                <td>xiaoming</td>
                <td>15</td>
                
            </tr>
            <tr>
                <td>1</td>
                <td>xiaoming</td>
                <td>15</td>
                
            </tr>
            <tr>
                <td>1</td>
                <td>xiaoming</td>
                <td>15</td>
                
            </tr>
        </table>
    </body>
    <script>
            
    /*  //以前的写法,先找到table,拿到所有行,再隔行遍历
        var allRow = document.getElementById("mytable").rows;
            for(var i = 0;i<allRow.length;i++){
                if(i%2==0){
                    document.getElementById("mytable").rows[i].style.background ="gray";
                }
            } */
            
    //若用jquery去写,先将库文件导入,再用如下代码:        
    $("tr:even").not(":first").css("background-color","#eee");
            
        </script>
</html>

1.3jquery下载使用

jQuery官网:jQuery

jQuery库分开发版和发布版:

Jquery-x.x.js 开发版

Jquery-x.x.min.js 发布版 代码经过压缩 容量更小

Download the compressed, production jQuery 3.6.0 (生产版本)

Download the uncompressed, development jQuery 3.6.0 (开发版本)

二者区别:使用起来无区别。但开发版有详细的注释, 和完整地变量名。生产版本做了代码压缩(空格,回车等都没有,代码只有一行,分析代码很麻烦,但文件小了狠多)。

在页面引入jQuery

<script src="jquery-x.x.min.js" ></script>

2.Jquery基本语法

2.1基本语法结构与常用方法

右下角可勾选jquery的语法提示

Jquery基本语法结构 :

$(选择器).jquery方法();

(两部分:选择器和方法。原生js有的地方方法,有的地方属性。jquery里全是方法。故学习时先看有哪些选择器,再看有哪些方法)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body> 
        <h1 class="myp">静夜思--李白</h1>
        <p class="myp">床前明月光</p>
        <p id="mytest">疑是地上霜</p>
        <p class="myp">举头望明月</p>
        <p id="mytest">低头鞋一双</p>
        
    </body>
    <script>
    /* jquery基本语法结构: $(选择器).jquery的方法
     
     选择器(借鉴了css的选择器)
     三个基本选择器:
     1.元素(标签)选择器   p   div
     2.class选择器         .class值
     3.id选择器            #id值
     
     常用方法
     .css()     相当于之前的style属性
     (还是有些区别,.css()的key带横线,如:background-color;但js里不带横线,是驼峰形式。)
     (juqery里修改样式用的)
     */
        /*
        使用元素(标签)选择器
        $("h1").css("color","red");      //修改标题颜色 
        $("h1").css("background-color","lightgreen")     //修改标题背景颜色 
        
        //让所有段落的颜色改变
        //jquery有一个特性:隐式循环(如果对元素的操作做相同,即改变的效果相同,可以直接改,让jquery自动循环)
        $("p").css("color","blue");        //所有的段落都改为蓝色    */
            
        /*class选择器     
        $(".myp").css("color","blue");        同样有隐式循环效果,相同的class值都被选中改变效果*/
        
        /*id选择器
        即使有两个相同id。也只会选到一个元素(基本规则同js)
        $("#mytest").css("color","red"); */
    </script>
</html>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body> 
        <h1 class="myp">静夜思--李白</h1>
        <p class="myp">床前明月光</p>
        <p id="mytest">疑是地上霜</p>
        <p class="myp">举头望明月</p>
        <p id="mytest">低头鞋一双</p>
        
        
        <h1 id="mytitle">静夜思--李白</h1>
        <div id="aimdiv">
            <div>
                <p>床前明月光</p>
                <p>疑是地上霜</p>
            </div>
            
            <p>举头望明月</p>
            <p>低头鞋一双</p>
        </div>
        
        <input id="mytext" type="text" value="123" />
        <input type="button" value="123" />
    </body>
    <script>
    /* jquery基本语法结构: $(选择器).jquery的方法
​
     4.交集选择器         选择器选择器  先元素再其他
     5.并集选择器         选择器,选择器
     6.后代选择器         选择器 选择器  查找元素内部的元素
     7.子代选择器         选择器>选择器  查找子元素
     8.属性选项器         ["属性"] ["属性"="属性值"]
     
     常用方法
     .css()     style属性
     */
        
        /* 交集选择器  先加元素,再加其它
        $("h1.map").css("color","blue"); */
        
        /* 并集选择器  
        $("h1,p").css("color","blue"); */
        
        /*还可以根据层次结构选择元素,最简单的方法,加div。比如第二首诗
        这里还结合了子代选择器
         $("#aimdiv>p").css("color","blue");        将第二首诗前两句修改  */
         
         
        /* 属性选项器
        $("input[type='button']").css("color","red");   让按钮颜色变红*/
        
    </script>
</html>

jquery其它常用样式属性:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body> 
        <h1 class="myp">静夜思--李白</h1>
        <p class="myp">床前明月光</p>
        <p id="mytest">疑是地上霜</p>
        <p class="myp">举头望明月</p>
        <p id="mytest">低头鞋一双</p>
        
        
        <h1 id="mytitle">静夜思--李白</h1>
        <div id="aimdiv">
            <div>
                <p>床前明月光</p>
                <p>疑是地上霜</p>
            </div>
            
            <p>举头望明月</p>
            <p>低头鞋一双</p>
        </div>
        <input id="mytext" type="text" value="123" />
        <input type="button" value="123" />
    </body>
    <script>
    /* jquery基本语法结构: $(选择器).jquery的方法
     
     常用方法
     .css()     类似style属性   (元素样式)
     .html()    类似innerHTML属性    (双标签中的内容)
     .val()     类似value属性        (表单元素的value) 
     
     使用jquery选择器获取的对象 是jquery对象   可以调用jquery方法
     使用document.getElementxxxx 获取的对象 是原生js对象  可以调用原生的属性和方法
     故,对象类型不同,方法不能乱用。
     
     原生js对象 转成jquery对象     $(原生对象),也叫jquery里的工厂函数    
     (this是原生对象,故在jquery里用this要转, $(this))
     
     jquery对象转成原生对象   法一:jquery对象.get(idx)   法二:jquery对象[idx]   
     (jquery对象实际是个数组。用get方法或取下标转成原生对象)
​
     */
        //.html() 
        //$("#mytitle").html("新标题");     将第二首诗标题改为新标题(写操作)
        //console.log($("#mytitle").html());     不传值就是读
        
        //.val()
        //console.log($("#mytext").val());   不传值就是读
        //$("#mytext").val("new value");     改变文本框的值
        //$("#mytext").value="abc";     这样不行,$("#mytext").value获得的元素不是原生的js对象,是jquery对象(jquery封装后的数组)。
        
        console.log($("#mytext"));      //jquery对象
        console.log(document.getElementById("mytext"));    //原生对象
        //$(document.getElementById("mytext")).val("abc");    js转jquery $()
        //$("#mytext").get(0).value="abc";   jquery转js
        //$("#mytext")[0].value="abc";   jquery转js,也可直接用索引下标去取。
    </script>
</html>

练习一:梅兰竹菊,春夏秋冬

2.2Jquery对象与原生js对象

3.Jquery选择器

3.1常见选择器

<!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script src="js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
        </head>
        <body>
            <ul id="myul">
                <li>新闻1</li>
                <li>新闻2</li>
                <li>新闻3</li>
                <li>新闻4</li>
                <li>新闻5</li>
                <li>新闻6</li>
            </ul>
        </body>
        <script>
            /* 
            
            选择器(css选择器)
            1.元素(标签)选择器   p   div
            2.class选择器         .class值
            3.id选择器            #id值
            
            4.交集选择器         选择器选择器  先元素再其他
            5.并集选择器         选择器,选择器
            6.后代选择器         选择器 选择器  查找元素内部的元素
            7.子代选择器         选择器>选择器  查找子元素
            8.属性选项器         ["属性"] ["属性"="属性值"] 
             
            筛选元素
            :first  第一个
            :last   最后一个
            :even   偶数
            :odd    奇数
            :eq(idx)  指定索引
            :lt(idx)  小于指定索引
            :gt(idx)  大于指定索引
             */
​
            //console.log($("#myul li"));       拿到的是juqery元素集合,包含6个li元素
            //console.log($("#myul li:first"));   拿到的还是数组,但只包含第一个li  
            //其它类似
                        
        </script>
    </html>
​
​

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <form id="myform">
            <input type="text" value="文本框" />
            <input type="text" value="文本框"/>
            <input type="button" value="按钮"/>
            <input type="button" value="按钮"/>
            <input type="checkbox" />
            <input type="checkbox" checked="checked" />
            <input type="checkbox"  checked="checked" />
            
            <select id="mysel" multiple="multiple">
                <option value="010" selected="selected">北京</option>
                <option value="021">上海</option>
                <option value="035" selected="selected">深圳</option>
            </select>
            
        </form>
    </body>
    <script>
        /* 
         
         选取表单元素(都是选择器,前面有冒号)
         :input       表单元素
         :text        文本框
         :password    密码框
         :radio       单选按钮
         :checkbox    多选框
         :button      普通按钮
         :submit      提交按钮
         :image       图片
         比较特殊的两个:
         :checked     选中的选项(被选中的checkbox)
         :selected    选中的option(下拉列表中被选中的option)
     
         */
        //css里对表单元素都是标签加属性去选取,jquery将常见的表单元素直接封装好,变成选择器
        //console.log($("#myform :checked"));   注意空格是后代选择器,不加空格是交集选择器
    
        //console.log($("#mysel :selected"));    
        
    </script>
</html>
​

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
        <style>
            .innerdiv{
                display: none;
            }
        
        </style>
    </head>
    <body>
        <div id="testdiv">
            <div id="div1" class="innerdiv">div1</div>
            <div id="div2" class="innerdiv">div2</div>
            <div id="div3" class="innerdiv">div3</div>
            <div id="div4" class="innerdiv2">div4</div>
            <div id="div5" class="innerdiv2">div5</div>
        </div>
    </body>
    <script>
        /* 
         
         可见性选择器(就是样式里的显示和隐藏)
         :hidden      隐藏的元素
         :visible     显示的元素
​
         */
        
        console.log($("#testdiv :hidden"));    //选取隐藏的元素
        
    </script>
</html>

3.2辅助筛选元素的方法

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <ul id="myul">
            <li>xxx</li>
            <li class="mycls">xxx</li>
            <li>xxx</li>
        </ul>
    </body>
    <script>
        /* 若想修饰ul,还想修饰li,下面这样写太啰嗦:
        $("#myul").xxxx;
        $("#myul li").xxxx; 
        
        
        .find("选择器")  内部查找元素(注意参数是选择器)
        .eq(idx)        集合中取某个元素(索引从0开始)
        .not("选择器")   排除某个特征的元素
        .prev()           向前查找同级元素
        .next()          向后查找同级元素
​
        */
        
        //推荐这样写:
        var myele = $("#myul");
        //myele.xxxx;       先对ul进行想要的操作
        //再操作ul内部的li元素
        console.log(myele.find("li").not(".mycls").eq(1).prev().prev().next().next()); 
    
    </script>
</html>
​

4.练习中会使用到的方法

<body>
        <div id="mydiv">div1</div>
        <div>div2</div>
        <div>div3</div>
    </body>
    <script>
            /* 
            .css()       style属性
            .val()       value属性
            .html()      innerHTML属性
            .addClass()    追加样式
            .removeClass() 去除指定样式 
             */
​
            //document.getElementById("mydiv").className += " mycls3";   原生js中加class属性,还要自己加空格。
            //若原生js中去除class属性,还要splist截取掉,再取值赋值,很麻烦
            
            $("#mydiv").addClass("mycls3");     //增加class属性 
            $("#mydiv").addClass("mycls2");
            $("#mydiv").removeClass("mycls1")
            
        </script>

遍历元素集合:

<body>
        <div>div1</div>
        <div>div2</div>
        <div>div3</div>
    </body>
    <script>
        
            //隐式循环 在统一赋值时适用
            $("div").html("aaa");        //以上三个div块都会被改成aaa文本
            
            //隐式循环不适用的情况:
            //1.取值  只会返回集合中第一个元素的值
            console.log($("div").html(););   //一组元素有多个,只会返回第一个元素的值
            //2.赋值时 赋的值不同
            //隐式循环无法满足需求时,需要遍历元素集合,使用.each(function(){   }) 
    /* 遍历过程允许在匿名函数里加形参index,表示遍历的索引
    $("div").each(function(i){    
                //遍历时执行的代码
                //this表示被遍历到的元素
                console.log(i); 
                console.log($(this).html()); 
                $(this).html("div"+(i+4));    //将文本改成div4 div5 div6
            }) */
  </script>         

事件绑定写法:

之前的写法:

<body>
        <div>div1</div>
        <div>div2</div>
        <div οnclick="myTest()">div3</div>
    </body>
    <script>
    
            //事件绑定  js中在元素上直接加事件
    /*      function myTest(){
                console.log(1);
            } */
    </script>       

jquery中事件绑定的写法:

<body>
        <div>div1</div>
        <div>div2</div>
        <div id="mydiv">div3</div>
    </body>
    <script>
        
        //先定位元素,先用原生写法:
    /*      document.getElementById("mydiv").οnclick=function(){
                console.log(123);
            } */
            
        //用jquery里的方法写:注:将点击事件的on去掉了    
            $("#mydiv").click(function(){
                console.log(456);
            }) 
</script>

jquery中事件绑定也支持隐式循环:

<body>
        <div>div1</div>
        <div>div2</div>
        <div>div3</div>
    </body>
    <script>
     
            //事件绑定方法 隐式循环也生效
        
            //this 指针 ,若不改变任何指向,表示当前窗口对象(windows)。但在不同的扩展库和方法中,this的指向会发生改变。
            //在遍历代码中,this表示被遍历到的元素
            //绑定事件里,this表示事件发生的元素
            
            
            //想点击不同的div块,输出对应的文本
             $("div").click(function(){
                console.log( $(this).html());
            }) 
        </script>
</html>

课堂练习2:事件绑定案例

<body>
        <div id="spans">
            <span id="sea">海边</span>
            <span id="garss">草原</span>
            <span id="mount">爬山</span>
        </div>
        
        <hr />
        <div id="spans2">
            <span class="mount">五台山</span>
            <span class="sea">三亚</span>
            <span class="garss">张北草原</span>
            <span class="sea">海口</span>
            <span class="mount">华山</span>
            <span class="sea">日照</span>
            <span class="mount">呼伦贝尔</span>
            <span class="garss">青青草原</span>
            <span class="mount">喜马拉雅山</span>
        </div>
    </body>
    <script> 
    //希望点击不同的景点可使对应景点高亮显示----------事件绑定案例
        $("#spans span").click(function(){
            //console.log($(this).html());   点击输出文本
            //console.log($(this).prop("id"))  点击输出id属性值
            var myClsName = $(this).prop("id");
            $("#spans2 span").css("background-color","white");  //状态还原
            $("."+myClsName).css("background-color","#15E");
            
        })
​
    </script>

事件绑定案例优化:

<body>
        <div id="spans">
            <span id="seaBtnblue">海边</span>
            <span id="garssBtngreen">草原</span>
            <span id="mountBtnyellow">爬山</span>
        </div>
        
        <hr />
        <div id="spans2">
            <span class="mount">五台山</span>
            <span class="sea">三亚</span>
            <span class="garss">张北草原</span>
            <span class="sea">海口</span>
            <span class="mount">华山</span>
            <span class="sea">日照</span>
            <span class="mount">呼伦贝尔</span>
            <span class="garss">青青草原</span>
            <span class="mount">喜马拉雅山</span>
        </div>
    </body>
    <script>
    //点击不同的景点,对应具体景点被选中,且颜色不同
    //事件绑定常用。    事件绑定支持隐式循环,传参方式使用元素属性传参。
        $("#spans span").click(function(){
            var myClsName = $(this).prop("id").split("Btn")[0];
            var myColor = $(this).prop("id").split("Btn")[1];
            $("#spans2 span").css("background-color","white");  //状态还原
            $("."+myClsName).css("background-color",myColor);
            
        })
    
    </script>

案例3:全选和反选:

<body>
        <input id="checkAllBtn" type="checkbox" />全选
        <input id="checkRecvBtn" type="checkbox" />反选
        <hr />
        <div id="cbs">
            <input type="checkbox" />
            <input type="checkbox" />
            <input type="checkbox" />
            <input type="checkbox" />
        </div>
    </body>
    <script>
    //想要效果:点击全选,下面四个选项全部被选中;再点击全选,四个选项都取消选中。
    $("#checkAllBtn").click(function(){
        //console.log($(this).prop("checked"));   可读出全选对应按钮的选中状态
        $("#cbs :checkbox").prop("checked",$(this).prop("checked"));
    })
    
    //点击反选,下面四个选项反选
    //给四个选项赋值,赋的值不一样。选中改成未选中,未选中改成选中。将之前的值取出,再取反。
    //赋的值不同,隐式循环用不了.
    $("#checkRecvBtn").click(function(){
        $("#cbs :checkbox").each(function(){
            console.log($(this).prop("checked"));  //取自己元素的checked值。
            $(this).prop("checked",!$(this).prop("checked"));  //将相反状态赋值
        })
    })
​
    </script>

5.jquery里的两个特殊用法:

$(document).ready(function(){}) 等同于$(function(){}) 页面加载结束后执行

(相当于之前在body上加onload事件)

<script>
        //若jquery里想将script写在前面,可这样:
        $document.ready(function(){
            $("#checkAllBtn").click(function(){
                $("#cbs :checkbox").prop("checked",$(this).prop("checked"));
            })
            
            $("#checkRecvBtn").click(function(){
                $("#cbs :checkbox").each(function(){
                    console.log($(this).prop("checked")); 
                    $(this).prop("checked",!$(this).prop("checked"));  
                })
            })
        })
        
        //$(document).ready(function(){})的一个简化写法:$(function(){})    
        
        </script>
    </head>
    <body>
        <input id="checkAllBtn" type="checkbox" />全选
        <input id="checkRecvBtn" type="checkbox" />反选
        <hr />
        <div id="cbs">
            <input type="checkbox" />
            <input type="checkbox" />
            <input type="checkbox" />
            <input type="checkbox" />
        </div>
    </body>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值