day46 jQuery

老子叫甜甜 提交于 2019-11-25 23:22:49
day46 jQuery
 
内容回顾:
    1.库和框架的区别
        库: 小而精: 直接操作DOM, 如css()方法 
            jquery封装了js中的哪些操作(大量的api=方法)
            - 事件
            - 属性
            - DOM
            - 选择器
            - ajax(交互的技术)
        jQuery的链式编程: jQuery的方法可以实现和js的属性操作一样的功能, 好处在哪, jQuery的方法执行完,给返回了jQuery对象, 还可以接着使用其他方法, 这就是链式编程
 
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <ul>
        <li>bajie</li>
        <li>wukong</li>
        <li>datang</li>
    </ul>
    <script src="jquery.js"></script>
    <script>
        var colors = ['red','yellow','blue'];
 
 
        //1.从jquery对象转换为js对象
        console.log($('li')[0]);        //注意这里, 方式一.加上[下标], 是从jquery对象到js对象的转换
                                        //方式二.JQ对象.get(0)
 
 
        //2.从js对象转换为jquery对象
        var item = document.getElementsByTagName('li')[0];
        console.log(item);
        console.log($(item));
 
 
        //链式编程
        $(item).css('color','blue').click(function () {
           alert(666)
        });
 
 
        for(var i=0; i<colors.length; i++){
            $('li')[i].style.backgroundColor = colors[i];   //使用 .style 而不是.css(), 因为这里的是js对象
        }
    </script>
</body>
</html>
 
 
 
        框架: 
            事件, DOM, 属性操作, ajax, '模板引擎'
 
    2.jQuery的入口函数
        $(function(){})    #等待文档加载完成之后才调用
        $(window).ready(function(){})    #和js的window.onload 一样, 但是没有时间覆盖现象
 
    3.DOM事件的三步走
        事件源, 主要还是学习选择器, 和css基本一样: $('div') $('#box') $('.box') $('*') 获取到的是jQuery对象
                选择器的方法
        绑定事件, JQ对象调用的是JQ的事件,都不带on: 比如js 是onclick onmouseover onmouseout onscroll onresize onchange
                                                   比如JQ 是: JQ对象.click(function(){}); 当调用完事件操作, jQuery内部又返回一个jQuery对象,可以接着调方法
        事件的回调函数 是事件驱动
    4.对样式属性的操作
        .css()方法
            如果有一个参数,并且参数类型是字符串:.css('color')是获取对应的属性值
            如果有两个参数:.css('color','red')是设置单个的属性值
            如果有一个参数,并且参数类型是{}: 是设置多个属性值 .css({'color':'red',width:300})
            
 
今日内容
 
一.jQuery
 
1.js和jquery对象的转换
    js对象->jquery对象: $(js对象)
    jquery对象->js对象: 方式一: JQ对象[0], 方式二: JQ对象.get(0)
 
2.选择器
    作用: 选中标签对应的JQ对象
 
    高级选择器里面说个后代选择器(用法和css的一样)
<body>
    <div id="box">
        <p>bajie</p>
    </div>
    <p>wukong</p>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $('#box p').css('color','red');
        })
    </script>
</body>
 
 
    
    紧邻选择器 + : div+p(兄弟关系的下一个p)
    兄弟选择器 ~ : div~p(兄弟关系的后面的所有p)
<body>
    <div id="box">
        <p>bajie</p>
        <p>datang</p>
        <p>xiha</p>
    </div>
    <p>wukong</p>                   // #box+p: 选择的是兄弟关系的紧挨着的下一个
    <p>wukong</p>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $('#box+p').css('color','green');
        })
    </script>
</body>
 
    基本过滤选择器:这个是css没有的
        $('li:eq(2)')    #多个li标签时,选择下标是2的li,eq()和标签一样写在''引号的里面
        :eq()
        :gt()
        :lt()
        :odd    (odd number: 奇数)
        :even    (even number: 偶数)
        :first
        :last
<body>
<ul>
    <li>bajie</li>
    <li>wukong</li>
    <li>dalang</li>
    <li>xiha</li>
    <li>strong</li>
</ul>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $('li:eq(0)').css('color','red');
        })
    </script>
</body>      
 
 
  
    属性选择器: 主要应用在form表单里面
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        input{
            border:none;
            outline:none;    //先清理边框和外线在,重新进行设置
            width: 300px;
            height: 50px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <form action="#">
        <input type="text" name="user">
        <input type="password" name="pwd">
        <input type="submit">
    </form>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $('input[type=text]').css('width','100px'); //属性选择器, []括号里面不用使用''引号
        })
 
    </script>
 
 
</body>
</html>   
 
 
     
    筛选选择器(通过方法进行调用)    
        .find(): 查找指定父元素的所有后代元素(包括子子孙孙)
<body>
    <div class="father">
        <p>bajie</p>
        <a href="#">wukong</a>
        <span>datang</span>
        <div class="g">xiha</div>
    </div>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $('.g').click(function () {
                console.log(this);              //this是js对象
                $(this).css('color','red');     //$(this) 转换成jquery对象
            });
            $('.father').find('.g').click(function () {         //find获取的是 .father下面的及下下面的所有的符合find()条件的标签, find()里面的选择器可是css的任一种
                console(this);                  //this 是谁, 是最后一个引用事件的js对象
                }
            );
        })
    </script>
</body>
    
    筛选选择器
        .children()    :获取的是亲儿子
        .father()    :获取的是亲爹
        .eq()
<body>
    <div class="father">
        <p>bajie</p>
        <a href="#">wukong</a>
        <span>datang</span>
        <div class="g">
            <span>xiha</span>
        </div>
    </div>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $('.father').find('span').click(function () {
                $(this).css('color','red');                     //对.father下的所有span生效
            });
            $('.father').children('span').click(function () {
                $(this).css('background-color','green');        //只对.father下的直接子标签span生效
            });
            $('.father span').eq(0).css('color','blue');    // 和基本过滤选择器 ':eq()'一样
        })
    </script>
</body>
    
    筛选选择器
        .siblings()    :查找所有的兄弟元素不包括自己,排他思想,选项卡时可用这个
<body>
    <ul>
        <li>bajie</li>
        <li>wukong</li>
        <li>datang</li>
        <li>xiha</li>
        <li>xiaoliu</li>
    </ul>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            //选项卡, 点一个变色, 其他为初始颜色
            $('li').click(function () {
                $(this).css('color','red').siblings('li').css('color','black');
            })
        })
    </script>
</body>
 
    筛选选择器
        .siblings()    :当有嵌套结构时, 需要找 .father().siblings().children()才是siblings的关系
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        ul{
            list-style-type: none;
        }
        a{
            text-decoration: none;
            color: white;
        }
        .box{
            width: 600px;
            height: 300px;
        }
        .box ul{
            width: 100%;
            overflow: hidden;
        }
        .box ul li{
            float: left;
            width: 100px;
            height: 50px;
            margin: 0 10px;
            
            text-align: center;
            line-height: 50px;
        }
        .active{
            width: 100%;
            height: 200px;
            
            display: none;
        }
    </style>
</head>
<body>
    <div class="box">
        <ul>
            <li>
                <a href="javascript:void(0)">bajie</a>
            </li>
            <li>
                <a href="javascript:void(0)">wukong</a>
            </li>
            <li>
                <a href="javascript:void(0)">datang</a>
            </li>
            <li>
                <a href="javascript:void(0)">xiha</a>
            </li>
            <li>
                <a href="javascript:void(0)">xiaoliu</a>
            </li>
        </ul>
        <div class="active">
        </div>
    </div>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $('.box ul li a').click(function () {
                $(this).css('color', 'green').parent().siblings().children().css('color','white');  //注意a标签是嵌套结构, 不是直接的siblings()关系
 
 
                //jquery对值的操作: .text()
                console.log($(this).text()); //text()里面没有参数是获取当前对象的值; text('八戒')有参数时是设置值
                $('.active').show().text($(this).text());
                var textVal = $(this).text();
                //jquery对值的操作: .html()
                var newVal = `<h1>${textVal}</h1>`;
                $('.active').show().html(newVal);
            })
        })
    </script>
</body>
</html>
 
 
3.对样式属性的操作
    .css()
 
4.对属性的操作
    html的标签属性操作: 是对html文档中的属性进行读取, 设置和移除操作. 比如attr(), removeAttr()
    对类的操作: 建议使用addClass() removeClass() 
 
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        a{
            color: red;
        }
        .active{
            color: green;
        }
    </style>
</head>
<body>
    <div class="box">
    </div>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            //初始化操作, 往div里面添加a标签
            // $('.box').html(`<a href="http://www.baidu.com">百度一下</a>`);
            //
            $('.box').html(`<a id="anchor"></a>`);  //(anchor: 锚)
            $('#anchor').attr('href','http://www.baidu.com').text('百度一下');
            $('#anchor').attr(
                {
                    title: '123',
                    class: '456'                                //一般class名的设置不用attr设置, 因为会把原先的类名覆盖掉
                }
            );
            $('body').click(function () {
                // $('#anchor').attr('class','active')         //我们改成jquery给我们提供的专门操作类名的方法 addClass()  removeClass() toggleClass()
                $('#anchor').addClass('active');            //追加类名
                $('#anchor').removeClass('active 456');     //移出多个类名用空格分隔
                $('#anchor').removeAttr('title href');     //移出多个标签的属性
            })
        })
    </script>
</body>
</html>
   
    对类的操作: toggleClass()
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            
        }
        .hidden{
            display: none;
        }
    </style>
</head>
<body>
    <button>隐藏</button>
    <div class="box"></div>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $('button').click(function () {
                $('.box').toggleClass('hidden');    //自动控制显示隐藏
            })
        })
    </script>
</body>
</html>
 
    对标签对象的属性的操作 .prop()
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    男<input type="radio" name="sex" checked>
    女<input type="radio" name="sex">
    <script src="jquery.js"></script>
    <script>
        $(function () {
            //获取标签属性
            console.log($('input[type=radio]').eq(0).attr('checked'));
            //js 对标签对象的属性的操作
            console.dir($('input[type=radio]').eq(0)[0]);       //可以看到input的js对象里的, checked: 为true
            console.dir($('input[type=radio]').eq(1)[0]);       //可以看到input的js对象里的, checked: 为false
            //jquery 对标签对象的属性的操作
            console.dir($('input[type=radio]').eq(1).prop('checked'));  //.prop()方法, 单选的时候给后端传的是true和false用这样的方法获取
                                                                        //.removeProp()
        })
    </script>
</body>
</html>
 
 
 
5.对值的操作
    .text()
    .html()
    .val()
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        ul{
            list-style-type: none;
        }
        a{
            text-decoration: none;
            color: white;
        }
        .box{
            width: 600px;
            height: 300px;
        }
        .box ul{
            width: 100%;
            overflow: hidden;
        }
        .box ul li{
            float: left;
            width: 100px;
            height: 50px;
            margin: 0 10px;
            
            text-align: center;
            line-height: 50px;
        }
        .active{
            width: 100%;
            height: 200px;
            
            display: none;
        }
    </style>
</head>
<body>
    <div class="box">
        <ul>
        </ul>
        <div class="active">
        </div>
        <form action="">
            <input type="text" value="123">
        </form>
    </div>
    <script src="jquery.js"></script>
    <script>
        $(function () {
 
            //模板字符串的应用
            $('.box ul').html(`<li>
                <a href="javascript:void(0)">bajie</a>
            </li>
            <li>
                <a href="javascript:void(0)">wukong</a>
            </li>
            <li>
                <a href="javascript:void(0)">datang</a>
            </li>
            <li>
                <a href="javascript:void(0)">xiha</a>
            </li>
            <li>
                <a href="javascript:void(0)">xiaoliu</a>
            </li>`);
 
            $('.box ul li a').click(function () {
                $(this).css('color', 'green').parent().siblings().children().css('color','white');  //注意a标签是嵌套结构, 不是直接的siblings()关系
                //jquery对值的操作: .text()  : innerText的封装
                console.log($(this).text()); //text()里面没有参数是获取当前对象的值; text('八戒')有参数时是设置值
                $('.active').show().text($(this).text());
                var textVal = $(this).text();
                //jquery对值的操作: .html()  : innerHTML的封装
                var newVal = `<h1>${textVal}</h1>`;
                $('.active').show().html(newVal);
                //jquery对form表单value的操作
                $('input[type=text]').val('666');   //val()里面没有参数是获取当前对象的值; val(666)有参数时是设置值
                                                        //用val()的时候是标签有value()属性的时候
            })
        })
    </script>
</body>
</html>
 
 
6.对DOM的操作
        
7.动画效果
 
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            
        }
    </style>
</head>
<body>
    <button id="btn">动画</button>
    <div class="box"></div>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $('#btn').click(function () {
                // $('.box').hide();       //动画操作前, 先关掉计时器
                $('.box').stop().toggle(1000);     //显示隐藏, 当有参数时,是动画的效果: 左上切入切出
            })
        })
    </script>
</body>
</html>
 
    自定义动画
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            position: absolute;
            left: 20px;
            top: 30px;
            width: 100px;
            height: 100px;
            
        }
    </style>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $("button").click(function () {
                var json = {"width": 500, "height": 500, "left": 300, "top": 300, "border-radius": 100};
                var json2 = {
                    "width": 100,
                    "height": 100,
                    "left": 100,
                    "top": 100,
                    "border-radius": 100,
                    "background-color": "red"
                };
                //自定义动画
                $("div").animate(json, 1000, function () {
                    $("div").animate(json2, 1000, function () {
                        alert("动画执行完毕!");
                    });
                });
            })
        })
    </script>
</head>
<body>
    <button>自定义动画</button>
    <div></div>
</body>
</html>
 
8.选项卡的嵌套
 
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        ul{
            list-style-type: none;
        }
        a{
            text-decoration: none;
            color: white;
        }
        .box{
            width: 600px;
            height: 300px;
        }
        .box ul{
            width: 100%;
            overflow: hidden;
        }
        .box ul li{
            float: left;
            width: 100px;
            height: 50px;
            margin: 0 10px;
            
            text-align: center;
            line-height: 50px;
        }
        .active{
            width: 100%;
            height: 200px;
            
            display: none;
        }
        .show{
            display: block;
        }
    </style>
</head>
<body>
    <div class="box">
        <ul>
            <li>
                <a href="javascript:void(0)">bajie</a>
            </li>
            <li>
                <a href="javascript:void(0)">wukong</a>
            </li>
            <li>
                <a href="javascript:void(0)">datang</a>
            </li>
            <li>
                <a href="javascript:void(0)">xiha</a>
            </li>
            <li>
                <a href="javascript:void(0)">xiaoliu</a>
            </li>
        </ul>
        <div class="active">
        </div>
        <div class="active">
        </div>
        <div class="active">
        </div>
        <div class="active">
        </div>
        <div class="active">
        </div>
    </div>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            $('.box ul li a').click(function () {
                $(this).css('color', 'green').parent().siblings().children().css('color','white');
                var textVal = $(this).text();
                var newVal = `<h1>${textVal}</h1>`;
                //取标签a对应的索引
                console.log($(this).parent().index());  //返回列表中第一个元素相对于其同辈元素的位置
                var index  = $(this).parent().index();
                $('div.active').eq(index).addClass('show').html(newVal).siblings('div.active').removeClass('show').html('');
            })
        })
    </script>
</body>
</html>
 
9.用索引控制轮播图
 
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        ul{
            list-style-type: none;
        }
        a{
            text-decoration: none;
            color: white;
        }
        .box{
            width: 600px;
            height: 300px;
        }
        .box ul{
            width: 100%;
            overflow: hidden;
        }
        .box ul li{
            float: left;
            width: 100px;
            height: 50px;
            margin: 0 10px;
            
            text-align: center;
            line-height: 50px;
        }
        .active{
            width: 100%;
            height: 200px;
            
            display: none;
        }
        .show{
            display: block;
        }
    </style>
</head>
<body>
    <div class="box">
        <button class="next">下一张</button>
        <ul>
            <li>
                <a href="javascript:void(0)">bajie</a>
            </li>
            <li>
                <a href="javascript:void(0)">wukong</a>
            </li>
            <li>
                <a href="javascript:void(0)">datang</a>
            </li>
            <li>
                <a href="javascript:void(0)">xiha</a>
            </li>
            <li>
                <a href="javascript:void(0)">xiaoliu</a>
            </li>
        </ul>
        <div class="active">
        </div>
        <div class="active">
        </div>
        <div class="active">
        </div>
        <div class="active">
        </div>
        <div class="active">
        </div>
    </div>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            var count = 0;
            $('.next').click(function () {
                count++;
                if(count == 5){ count = 0; };
                console.log(count);
                $('ul li').eq(count).css('backgroundColor','green').siblings().css('backgroundColor','red');
                $('div.active').eq(count).addClass('show').html('八戒').siblings('div.active').removeClass('show').html('');
            });
            $('.box ul li a').click(function () {
                $(this).css('color', 'green').parent().siblings().children().css('color','white');
                var textVal = $(this).text();
                var newVal = `<h1>${textVal}</h1>`;
                //取标签a对应的索引
                console.log($(this).parent().index());  //返回列表中第一个元素相对于其同辈元素的位置
                var index  = $(this).parent().index();
                $('div.active').eq(index).addClass('show').html(newVal).siblings('div.active').removeClass('show').html('');
            })
        })
    </script>
</body>
</html>
 
 
10.百度导航
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin: 0;      /*清除默认样式*/
            padding: 0;
        }
        ul{
            list-style: none;
        }
        a{
            text-decoration: none;
        }
        .header{
            height: 46px;   /*宽度没给, 让子标签撑起来*/
            /*overflow: hidden;   !*因为子盒子浮动了, 这里要清除浮动, 但是上面有了固定高度, 所以不用清浮动了*!*/
        }
        .header ul{
            float: left;    /*浮动的盒子都有一种收缩的效果*/
            height: 46px;
        }
        .header ul li{
            float: left;
            height: 46px;
            padding: 0 10px;
            background: none;
            transition: background 500ms;   /*c3里面的动画效果, 500毫秒颜色的渐变*/
            cursor: pointer;    /*li下面的a上悬浮的时候有小手, li的其他区域没有, 那么就给li加一个小手*/
        }
        .header ul li:first-child{
            
        }
        .header ul li:first-child a {
            color: #fff;
        }
        .header ul li a{
            color: #666;
            display: inline-block;  /*加上这句, 就形成了BFC区域, 下面的margin-left才会生效*/
            margin-top: 19px;
        }
        .header ul li:hover{
               /*用户点击其中一个li后, hover就不起作用了, 用!important优先级可以无限大*/
            transition: prop 1s;
        }
        .header ul li:hover a{
            color: #fff;
        }
    </style>
</head>
<body>
    <div class="header">
        <ul>
            <li>
                <a href="javascript: void(0)">热门</a>
            </li>
            <li>
                <a href="javascript: void(0)">游戏</a>
            </li>
            <li>
                <a href="javascript: void(0)">卡通</a>
            </li>
            <li>
                <a href="javascript: void(0)">女神降临</a>
            </li>
            <li>
                <a href="javascript: void(0)">明星</a>
            </li>
            <li>
                <a href="javascript: void(0)">风景</a>
            </li>
            <li>
                <a href="javascript: void(0)">简约</a>
            </li>
        </ul>
    </div>
    <script src="jquery.js"></script>
    <script>
        $(function () {
            //取到li, 对li进行点击操作
            $('div ul li').click(function () {
                //点击的li, 背景色和文字颜色变化, 没点的复原
                $(this).css('background','#389cff').siblings().css('background','#fff');
                $(this).find('a').css('color', '#fff').parent().siblings().find('a').css('color', '#666');
            })
        });
    </script>
</body>
</html>
 
 
 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!