Jquery高级

Jquery 高级

什么是事件:

事件是可以被 JavaScript 侦测到的行为
比如:
JavaScript 创建动态页面。网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。
比如说,当用户单击按钮或者提交表单数据时,就发生一个鼠标单击(onclick)事件,需要浏览器做出处理,返回给用户一个结果。

jquery事件

focus事件 获取焦点事件 一般不在这个事件上绑定函数 一般作为让输入框自动
或焦点的方式使用 写法 $input.focus()
mouseover 和 mouseout 鼠标移入移出事件 移入子元素会触发
mouseenter和mouseleave 鼠标移入移出事件 移入子元素不会触发
hover事件用法
hover() 同时为mouseenter和mouseleave事件指定处理函数
$input.hover(function(){mouseenter的操作}, function(){mouseleave的操作})

focus 焦点事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./js/jquery-1.12.4.min.js"></script>
    <script>
        $(function () { 
            var $input = $("#input01");

            // 一般不再focus绑定函数
            // $input.focus(function(){
            //     alert("获得焦点");
            // })

            // focus 一般用在让input输入框默认获取焦点
            $input.focus();

            // 让输入框默认获得焦点
            $input.blur(function () { 
                alert("来啊 输入啊 憋走")
             });
         })
    </script>
</head>
<body>
    <input type="text" id="input01">
</body>
</html>

jquery 事件冒泡

原理:元素发生事件后 会将这个事件传递给父级 父级还会网上传递 一直传递到最顶级标签
一般最顶级标签写成$document

允许多个操作被集中处理 (把事件处理器添加到一个父级元素中) 避免把事件处理器添加到多个子级元素上
它还可以让你在对象层的不同级别捕获事件

发生事件和绑定函数是两码事
例如标签 .grandfather>.father>.son
son标签发生事件(绑定函数 发生事件) -- 传递到father标签(没有发生函数) -- .grandfather(绑定函数 发生事件) 
结果 son发生 father发生(但是没有表现) grandfather发生

阻止事件冒泡:
    return false;
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .grandfather{
            width: 300px;
            height: 300px;
            background: orange;
            position: relative;
        }
        .father{
            width: 100px;
            height: 100px;
            background: red;

        }
        .son{
            width: 50px;
            height: 50px;
            background: green;
            position: absolute;
            left: 0px;
            top: 400px;
        }
    </style>
    <script src="./js/jquery-1.12.4.min.js"></script>
    <script>
        $(function () { 
            var $son = $(".son");

            $(".son").click(function(){
                alert("1");
                // 阻止事件冒泡的简略写法
                return false;
            });

            $(".father").click(function(event){
                alert("2");
                // 阻止事件冒泡的完整写法
                event.stopPropagation();
            });

            $(".grandfather").click(function(){
                alert("3");
            });


            // 事件冒泡 不断的传递给父级
            $(document).click(function () { 
                alert("4");
             });

         })
    </script>
</head>
<body>
    <div class="grandfather">
        <div class="father">
            <div class="son"></div>
        </div>
    </div>
</body>
</html>

练习 使用事件冒泡 写弹框

了解事件冒泡的传递机制
了解事件阻止的方法
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="css/main.css">
    <title>Document</title>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function(){
           // 标签绑定点击事件 点击 -- 展示
            $("#btn01").click(function () { 
                $(".pop_main").show();
                return false;
             });
            // 标签绑定点击事件 点击 -- 隐藏
            $("#shutoff").click(function () { 
                $(".pop_main").hide();
             });
        // 标签绑定点击事件 点击 -- 隐藏
            $(document).click(function () { 
                setTimeout(function () { 
                    $(".pop_main").hide();
                 }, 0)
             });
             // 标签绑定点击事件 点击 -- 中断冒泡
            $(".pop_con").click(function () { 
                return false;
             })


        })
    </script>
</head>
<body>
    <input type="button" value="弹出弹框" id="btn01">
    <div class="pop_main" id="pop">
        <div class="pop_con">
            <div class="pop_title">
                <h3>系统提示</h3>
                <a href="#" id="shutoff">×</a>
            </div>
            <div class="pop_detail">
                <p class="pop_text">亲!请关注近期的优惠活动!</p>
            </div>
            <div class="pop_footer">

            </div>
        </div>
        <div class="mask"></div>
    </div>
</body>
</html>

jquery事件委托

原理:利用事件冒泡的特性 将事件绑定在父级上 子级发生的事件都会冒泡到父级 
父级通过判断子级的特征 给与特定的操作
机制: 父级绑定事件 子级一旦发生事件 首先找到父级 父级执行事件 并且返回到子级
$(this) 指的是当前冒泡的子级 
写法:$ul.delegate("li", "click", function(){  $(this)  })
利用冒泡的原理 将事件加到父级 通过判断事件来源的子集 执行相应得操作
事件委托可以极大的减少事件绑定次数 提高性能
让新加入的子元素也可以拥有相同的操作

delegate
和原生方法相比 性能高
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./js/jquery-1.12.4.min.js"></script>
    <script>
        $(function () { 
            var $li = $(".list li")
            var $ul = $(".list")
            alert($li.length)

            /*
            $li.click(function () { 
                $(this).css({'background':'red'})

             });
             */

            //  上面的写法性能不高
            $ul.delegate("li", "click", function () { 
                // $(this) 指的是发生事件冒泡的子级
                $(this).css({"background":"red"})
             })




         })
    </script>
</head>
<body>
    <ul class="list">
        <li>fuck</li>
        <li>fuck</li>
        <li>fuck</li>
        <li>fuck</li>
        <li>fuck</li>
        <li>fuck</li>
        <li>fuck</li>
        <li>fuck</li>
    </ul>
</body>
</html>

DOM操作

html方法的性能高
也叫节点操作 改变html的标签结构
    -移动现有标签的位置
    -将新创建的标签插入到现有的标签中

移动或者插入标签的方法
    append appendTo    主语和宾语要搞清楚
    prepend prependTo
    after insertAfter
    before insertBefore
删除标签
    remove
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./js/jquery-1.12.4.min.js"></script>
    <script>
        $(function () { 
            var $h01 = $("#h01");
            var $div = $(".div1");
            var $h02 = $("#h02");
            var $div2 = $("#div2");

            // append 当前元素里面的后面要放另外一个元素
            $div.append($h01);

            // appendTo 当前元素要放到另外一个元素里面的后面
            $h01.appendTo($div);

            // prepend 当前元素的里面的前面要放另外一个元素
            $div.prepend($h02);

            // prependTo 当前元素要放到另外一个元素的里面的前面
            $h02.prependTo($div);

            // after 当前元素的外面的后面要放另外一个元素
            $div.after($div2);

            // insertAfter 当前元素要放到另外一个元素的外面的后面
            $div2.insertAfter($div);


            // 创建新标签 
            var $div3 = $("<div>");  // 创建一个新的div
            var $div4 = $("<div>新创建的div</div>");
            // before 当前元素的外面的前面要放另一个元素
            $div.before($div3);

            // insertBefore 当前元素要放到另外一个元素的外面的前面
            $div3.insertBefore($div);
            $div4.insertBefore($div);


            // remove 删除标签
            $("#div1").remove();

            // 删除标签
            $div3.remove()

         })
    </script>
</head>
<body>
    <h3 id="h01">这是div外面的h3标签</h3>
    <h1 id="h02">这是div外面的h1标签</h1>
    <div id="div2">这是div上面的div</div>
    <div class="div1">
        <h2>这是div里面的h2
        </h2>
        <p>这是div里面的p</p>
    </div>
</body>
</html>

用事件委托 编写可以增删改的list

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>todolist</title>
    <style type="text/css">
        .list_con{
            width:600px;
            margin:50px auto 0;
        }
        .inputtxt{
            width:550px;
            height:30px;
            border:1px solid #ccc;
            padding:0px;
            text-indent:10px;           
        }
        .inputbtn{
            width:40px;
            height:32px;
            padding:0px;
            border:1px solid #ccc;
        }
        .list{
            margin:0;
            padding:0;
            list-style:none;
            margin-top:20px;
        }
        .list li{
            height:40px;
            line-height:40px;
            border-bottom:1px solid #ccc;
        }

        .list li span{
            float:left;
        }

        .list li a{
            float:right;
            text-decoration:none;
            margin:0 10px;
        }
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function () { 
            var $txt = $("#txt1");
            var $btn = $("#btn1");
            var $ul = $("#list");


            $btn.click(function () { 
                var sVal = $txt.val();
                $txt.val("");


                if(sVal==''){
                    alert("请输入计划内容");
                    return;
                }

                var $li = $('<li><span>'+ sVal + '</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li>')

                $ul.append($li)

                 })

                // 通过事件委托方式来处理每个a标签的事件
                $ul.delegate("a", "click", function(){
                    var sHandler = $(this).prop("class");

                    // alert(sHandler);
                    if(sHandler=='del'){
                        $(this).parent().remove();
                    }
                    if(sHandler=='up'){
                        // alert($(this).parent().prev().length())
                        if($(this).parent().prev().length()==0){
                            alert('到顶了');
                            return;
                        }
                        $(this).parent().insertBefore($(this).parent().prev())
                    }
                    if(sHandler=='down'){
                        if($(this).parent().next().length==0){
                            alert("到底了");
                            return;
                        }
                        $(this).parent().insertAfter($(this).parent().next());
                    }
                })


         })

    </script>   
</head>
<body>

    <div class="list_con">
    <h2>To do list</h2>
        <input type="text" name="" id="txt1" class="inputtxt">
        <input type="button" name="" value="增加" id="btn1" class="inputbtn">

        <ul id="list" class="list">

            <li><span>学习html</span><a href="javascript:;" class="up"></a><a href="javascript:;" class="down"></a><a href="javascript:;" class="del">删除</a></li>
            <li><span>学习css</span><a href="javascript:;" class="up"></a><a href="javascript:;" class="down"></a><a href="javascript:;" class="del">删除</a></li>
            <li><span>学习javascript</span><a href="javascript:;" class="up"></a><a href="javascript:;" class="down"></a><a href="javascript:;" class="del">删除</a></li>

        </ul>

    </div>
</body>
</html>

Javascript对象

javascript中的基本数据类型 是一种复合值,它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值。即属性的无序集合。

可以理解为键值对 
创建对象的两种方法

第一种
    var person1 = new Object();
    顶级object对象 创建对象

第二种
    直接量的方式创建对象
    ver person2 = {
        name:'rose',
        age:18;
        sayName:function(){
            alert("my name is" + this.name);
            }
        }
    调用属性和方法
    alert(person2.age);
    person2.sayName();
\\ 创建对象的两种方法
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        // 通过对象直接量来创建对象
        var person = {
            name:"tom",
            age:18,
            showname:function(){
                alert('我的名字是:'+this.name);
                return;

            },
            showage: function(){
                alert('我的年龄是:'+this.age);
                return ;
            }
        }

        // 调用对象的属性和方法 
        alert(person.name);
        alert(person.showname());
        alert(person.showage())
    </script>
</head>
<body>

</body>
</html>

json对象

JSON 语法是 JavaScript 对象表示法语法的子集。
同样是一种数据类型

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        var data01 = {
            "name":"tom",
            "age":18,

        }
        /*
        alert(data01.age);
        alert(data01.name);
        */
        var data02 = [
            {"name": "jack", "age":19},
            {"name": "rose", "age":23}
        ]
        alert(data02[0].name)
    </script>
</head>
<body>

</body>
</html>

ajax

解决什么问题
--JavaScript 安全性考虑不能直接读写数据库
ajax 
    通过前后台配合的技术
    jquery封装为一个函数$.ajax()
    可以直接用这个函数来执行ajax请求
    需要在服务器环境下运行

--相当于中间件 
ajax需要在服务器环境下运行。
$.ajax使用方法

常用参数:
1、url 请求地址
2、type 请求方式,默认是'GET',常用的还有'POST'
3、dataType 设置返回的数据格式,常用的是'json'格式,也可以设置为'html'
4、data 设置发送给服务器的数据
5、success 设置请求成功后的回调函数
6、error 设置请求失败后的回调函数
7、async 设置是否异步,默认值是'true',表示异步 

与ajax相关的概念:
同步和异步

现实生活中,同步指的是同时做几件事情,异步指的是做完一件事后再做另外一件事,程序中的同步和异步是把现实生活中的概念对调,也就是程序中的异步指的是现实生活中的同步,程序中的同步指的是现实生活中的异步。
局部刷新和无刷新

ajax可以实现局部刷新,也叫做无刷新,无刷新指的是整个页面不刷新,只是局部刷新,ajax可以自己发送http请求,不用通过浏览器的地址栏,所以页面整体不会刷新,ajax获取到后台数据,更新页面显示数据的部分,就做到了页面局部刷新。
数据接口

数据接口是后台程序提供的,它是一个url地址,访问这个地址,会对数据进行增、删、改、查的操作,最终会返回json格式的数据或者操作信息,格式也可以是text、xml等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值