JQ二刷

作者: 山猪打不过家猪 | 来源:发表于2022-11-30 15:50 被阅读0次

    1. JQ操作和原生JS操作

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="js/jquery-3.4.1.min.js"></script>
    </head>
    <style>
        #dom1 #dom2{
            height: 100px;
            width: 100px;
            border: 1px solid grey;
        }
        #dom2{
            height: 100px;
            width: 100px;
            border: 1px solid grey;
        }
    </style>
    <body>
        <div id="dom1"></div>
        <div id="dom2"></div>
    </body>
    <script>
        let dom1 = document.querySelector('#dom1')
        dom1.innerHTML = "我是原生JS"
        dom1.style.backgroundColor = 'red'
        dom1.onclick = function(){
            alert('dom1被点击了')
            dom1.style.backgroundColor = 'green'
    
        }
        $(function(){
            $('#dom1').html('这是jq操作').css({backgroundColor:'yellow',font:'20px'}).click(function(){
                alert('jq操作')
            }) 
        })
    </script>
    </html>
    

    2.选择器

    2.1基本选择器

    <body>
        <ul>
            <li class="yi">1</li>
            <li>2</li>
            <li id="san">3</li>
            <li>4</li>
            <li>5</li>
        </ul>
    </body>   
    <script>
        
        //id选择器
        $('#san').html('三')
        //类选择器
        $('.yi').html('一')
        //标签选择器
        $('li').css('fontSize','60px')
    </script>
    

    2.2后代选择器

    <body>
      
        <div class="one">
            <div class="two">two</div>
            <div class="three">three</div>
            <div class="four">444</div>
            <div class="five">
                five
                <div class="four">444</div>
            </div>
        </div>
        <div class="four">444</div>
    
    </body>   
    <script>
        //后代选择器:one下的所有four
        $('.one .four').css('color','red')
        //直系子选择器:one下面的直系four
        $('.one>.four').css('border','1px solid grey')
        //兄弟选择器:给four下面的兄弟
        $('.one>.four+div').css('color','green')
    
    </script>
    
    image.png

    2.3 索引选择器

    <body>
        <table>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </table>
    </body>
    <script>
        //偶数,索引从0开始
        $('tr:even').css('backgroundColor','lightgreen')
        //奇数
        // $('tr:odd').css('backgroundColor','lightgreen')
        //设置第一行
        $('tr:first').css('backgroundColor','red')
        //最后一行
        $('tr:last').css('backgroundColor','lightyellow')
        //获取1+4的行数
        $('tr:eq(4)').css('backgroundColor','black')
     
    </script>
    
    image.png

    2.4 显示隐藏效果

    <body>
        <button id="btn1">显示/隐藏</button>
        <button id="btn2">下拉/上拉</button>
        <div id="box"></div>
    </body>
    <script>
        $('#btn1').click(function(){
            $('#box').toggle(150)
        })
        $('#btn2').click(function(){
            $('#box').slideToggle(150)
        })
    </script>
    
    image.png

    2.5 jquery与js对象互相转换

    <body>
        <input id="ck" type="checkbox" value="游泳" checked>游泳
    </body>
    <script>
        let ck = document.querySelector('#ck')
        //js转jq
        let ck_j = $(ck)
        //jq提供的方法:给表单的value赋值
        ck_j.val("练习时常两年半")
        ck_j.css('width','50px')
        //jq转jsdome
        let ckjs = ck_j[0]
        //获取dome元素的状态
        alert(ckjs.checked)
    </script>
    

    注意:JS转JQ的原因是:很多第三方库返回的是JS对象,要继续使JQ的话,就要转;JQ转JS,JQ提供的方法不够用的时候需要转为JS

    2.6 tab选项卡切换练习

    image.png
    <!DOCTYPE html>
    <html lang="en">
    <head>
         <style type="text/css">
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }
            #box{
                height: 400px;
                width: 400px;
                margin: 20px;
                border: 1px solid #ccc;
            }
            .tab{
                display: flex;
            }
            .tab li{
                border: 1px solid #ccc;
                margin: 5px;
                padding: 5px 10px;
                cursor: pointer;
            }
            .tab li.active{
                background-color: orangered;
                color: white;
            }
            .list{
                margin:0 5px;
            }
            .list li{
                display: none;
            }
            .list li.show{
                display: block;
            }
        </style>
    </head>
    <body>
        <div id="box">
            <ul class="tab">
                <li class="active">奔驰</li>
                <li>宝马</li>
                <li>奥迪</li>
            </ul>
            <ul class="list">
                <li class="show">奔驰内饰好看</li>
                <li>宝马价格贵</li>
                <li>奥迪低调</li>
            </ul>
        </div>
    </body>
    <script>
        //点击既要切换内容也要高亮
        $('.tab li').click(function(){
            //1.切换高亮
            $(this).addClass('active').siblings('.active').removeClass('active')
            //2.获取当前点击li的下标,this为dome,$转为jq
            let li_index = $(this).index()
            //3.根据下标获取指定的jq对象①添加show②移除sibling
            $('.list li').eq(li_index).addClass('show').siblings('.show').removeClass('show')
        })
    </script>
    </html>
    

    注意:
    index()方法,获取当前元素的下标
    eq()方法,根据指定的index获取元素
    addClass()方法,给元素添加class
    removeClass()方法,给元素去除class
    siblings()方法,获取元素的所有兄弟,该方法可以添加一个选择器参数,用于精确的查找兄弟元素

    2.7 动态加载一级菜单

    image.png
    • common.css
    *{
        margin: 0;
        padding: 0;
        list-style: none;
        text-decoration: none;
        outline: none;
        font-size: 12px;
    }
    .flex{
        display: flex;
    }
    .j_c{
        justify-content: center;
    }
    .j_s{
        justify-content: space-between;
    }
    .a_c{
        align-items: center;
    }
    
    • menu.json模拟后台API传来的json
     {
        "data":[
            {
                "name":"Web",
                "icon":""
            },
            {
                "name":"Java",
                "icon":""
            },
            {
                "name":"BIG DATA",
                "icon":""
            },
            {
                "name":"CLOUND",
                "icon":""
            },
            {
                "name":"AI",
                "icon":""
            }
        ]
     }
    
    • firstMenuDemo.html
        <link rel="stylesheet" type="text/css" href="css/common.css">
        <style type="text/css">
            .nav{
                background-color: #ccc;
                height: 30px;
                margin: 20px 0;
            }
            .introduce{
                width: 100px;
                height: 50px;
                background-color: rgb(72,204,193);
                margin-left: 100px;
                line-height: 50px;
                font-size: 20px;
                text-align: center;
                color: white;
                transform: skew(-15deg);
            }
            ul>li:not(:first-child){
                margin: 5px 0 0 20px;
                font-size: 14px;
                cursor: pointer;
            }
            ul>li:not(:first-child):hover{
                color: lightskyblue;
            }
        </style>
    </head>
    <body>
        <ul class="nav flex a-c">
            <li class="introduce">课程介绍</li>
        </ul>
    </body>
    <script>
        //加载菜单的方法
        function loadMenue(){
            $.get(
                'menu.json',
                function(res){
                    console.log(res)
                    let {data} = res
                    //es6语法
                    data.forEach(r=>{
                        //每个对象创建一个对应的li
                        let li = '<li>'+r.name+'</li>'
                        //注意使用该方法创建标签必须使用语义化
                        let li_jq = $('<li>')
                        //将li添加到ul里面 jq的append=js的appendChild
                        $('.nav').append(li)
                    })
                }
            )
        }
        loadMenue()
    </script>
    </html>
    

    2.8 动态加载三级导航

    相关文章

      网友评论

          本文标题:JQ二刷

          本文链接:https://www.haomeiwen.com/subject/nwcsfdtx.html