zoukankan      html  css  js  c++  java
  • 前端- jquery- 总结

    1、jquery与js的区别

      (1)javascript的缺点

      书写繁琐,代码量大
    
      代码复杂
    
      动画效果,很难实现。使用定时器 各种操作和处理

      (2) JavaScript和jquery的定义

    1. Javascript是一门编程语言,我们用它来编写客户端浏览器脚本。
    2. jQuery是javascript的一个库,包含多个可重用的函数,用来辅助我们简化javascript开发
    3. jQuery能做的javascipt都能做到,而javascript能做的事情,jQuery不一定能做到

        

      注意:一般情况下,是库的文件,该库中都会抛出来构造函数或者对象,如果是构造函数,那么使用new关键字创建对象,如果是对象直接调用属性和方法

      (3)区别

     # 1 DOM文档加载的步骤
            1.解析HTML结构。
            2.加载外部脚本和样式表文件。
            3.解析并执行脚本代码。
            4.DOM树构建完成。
                $(document).ready(function(){}) / $(function(){})
            5.加载图片等外部文件。
            6.页面加载完毕。
                window.onload()
    #2 执行时间不同
    
    window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。
    
    $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。
    
    
    #3 编写个数不同
    
    window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个
    
    $(document).ready()可以同时编写多个,并且都可以得到执行
    
    
    #4 简化写法不同
    
    window.onload没有简化写法
    
    $(document).ready(function(){})可以简写成$(function(){});

      (4)juqery的引入与使用

        <script src="jquery-3.2.1.js"></script>
        <script type="text/javascript">
            $(document).ready(function () {
    
            });
            $(function () {
    
            })
        </script>

    2、jquery选择器

       1.基本选择器

            //1.标签选择器
            $($('h1')[0]).click(function () {
                $(this).css('background-color','red');
                $(this).css('font-size','22px');
                $(this).css('line-height','22px');
            });
    
            //2.id选择器
            $('#old').click(function () {
                $(this).css('color','green');
            });
    
            //3.class选择器
            $('.box1').click(function () {
                $(this).css('font-size','30px');
            });
    
            //4.通配符选择器 * 使用不是很频繁
            //$('*').html('');  清空整个页面的dom元素

       2.层级选择器

          //1.后代选择器
            $('ul p').click(function () {
                $(this).css('color','red')
            });
    
            //2.子代选择器
            $('ul>li').click(function () {
                $(this).css('font-size','22px')
            });
    
            //3.毗邻选择器 匹配该元素紧邻的下一个兄弟元素
            $('ul+h2').click(function () {
                $(this).css('background-color','red')
            });
    
            //4.兄弟选择器,  匹配的元素后面的所有兄弟元素
            $('ul~h3').click(function () {
                $(this).css('color','blue');
            });

      

      3.基本过滤选择器

            //1.获取first last元素
            $('li:first').css('font-size','43px');
            $('li:last').css('font-size','43px');
    
            //2.eq gt lt   选中索引值为1的元素 *  ,大于,小于
            $('li:eq(1)').css('font-size','43px');
            $('li:gt(1)').css('font-size','13px');
            $('li:lt(1)').css('font-size','23px');
    
            //3.奇数偶数
            $('li:odd').css('background-color','pink');
            $('li:even').css('background-color','orange');

        

      4.属性选择器

            //1. 标签名[属性名]  查找所有含有id属性的该标签签名的元素
            $('li[id]').css('color','red');
    
            //2. 匹配给定的属性值是active的元素
            $('li[class=active]').css('color','red');
    
            //3.
            $('li[class^=a]').css('color','red');
    
            //4.
            $('li[class$=e]').css();
    
            //5. 匹配给定的属性是以包含某些值的元素
            $('li[class*=btn]').css()
        解释:
    标签名[属性名],查找所有含有id属性的该标签名的元素
    匹配给定的属性 是what值 [attr=value] 匹配给定的属性是某个特定值的元素
    没有class 也会发生变化,[attr!=value] 匹配所有不含有指定的属性,或者属性不等于特定值的元素
    匹配给定的属性是以某些值开始的元素 ^
    匹配给定的属性是以某些值结尾的元素 $
    匹配给定的属性是以包含某些值的元素 *

      

         5.筛选选择器/筛选方法

      (1)each遍历方法

    1.each 遍历
        $('ul').children().each(function (index,ele) {
            // console.log(index,ele);
            var isDanger = $(this).hasClass('danger');
            if(isDanger){
                $(this).css('color','red');
            }else{
                $(this).css('font-size','28px');
            }
        });

      (2)父兄子

        $($('h1')[2]).click(function () {
    
            //1.获取父级节点
            $(this).parent();   //一个父亲节点
            $(this).parents();  //所有父辈节点
    
            //2.获取兄弟节点
            $(this).siblings();  //所有的兄弟节点
    
            $(this).prev();      //前一个兄弟节点
            $(this).prevAll();   //all 前一个兄弟节点
    
            $(this).next();      //下一个兄弟节点
            $(this).nextAll();   //all 下一个兄弟节点
    
    
            //3.获取儿子,后代节点
            $(this).parent().children('h1').css('font-size','22px');   //所有的儿子节点
            $(this).parent().find('h1').css('color','red');           //后代节点
    
            //4.指定eq  last  first
            $(this).parent().children().eq(2);
            $(this).parent().children().first();
            $(this).parent().children().last();
    
    
            //5.指定标签 h1
            $(this).parent().children('h1');
            $(this).parents('body').children('h1');
    
        })
       解释:
    获取第n个元素 数值从0开始 .eq()
    获取第一个元素 .first()
    获取最后一个元素 .last()
    获取父亲元素 .parent()
    选择所有的兄弟元素 .siblings()
    查找所有的后代元素 .find()

    3、jquery对象和Dom对象转换

    #Dom对象--> jquery对象
        var box = document.getElementById('box');
        console.log($(box));
    
    #jquery对象--> DOM对象
        $('button')[0]
        $('button').get(0)
    
    #注:
        Dom对象     box.onclick = function(){}
        jquery对象  $(box).click(function(){})

    4、效果

     1. 隐藏显示 hide show toggle 

        show: 显示隐藏的匹配元素 语法:show(speed,callback) 参数:
    1.speed:三种预定速度之一的字符串('slow','normal','fast')或表示动画时长的毫秒值(如:1000毫秒==1秒)
    2.callback:在动画完成时执行的函数,每个元素执行一次
    hide: hide(speed,callback)跟show使用方法类似,表示隐藏显示的元素。
    可以通过show()和hide()方法,来动态控制元素的显示隐藏
    toggle: 如果元素是可见的,切换为隐藏的;如果元素是隐藏的,切换为可见的。

    $('#box').css('display','block');
    $('#box').show('slow',function(){}) // slow normal fast
    $('#box').hide(2000,function(){})
    $('#box').toggle(3000,function(){})
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            #box1 {
                border: 1px solid red;
                width: 70px;
                height: 70px;
            }
    
        </style>
    </head>
    
    <body>
    <div id="box1"></div>
    <input type="button" id="btn" value="隐藏">
    <script src="jquery-3.2.1.min.js"></script>
    </body>
    
    <script type="text/javascript">
    
        //隐藏显示 hide   show  toggle
        $(function () {
        $('#btn').click(function () {
    //        $(this).prev().toggle();
        });
    
            var flag = 1
            $('#btn').click(function () {
                if (flag) {
    
                    $(this).prev().hide(3000)
                    $(this).val('显示');
                    flag = 0
                }else{
    
                    $(this).prev().show(2000)
                    $(this).val('隐藏')
                    flag = 1
                }
    
            })
        })
    </script>
    </html>

      2. 盒子变高变低 slideUp slideDown slideToggle

        slideDown: 通过高度变化(向下增大)来到动态地显示所有匹配的元素,在显示完成后触发一个回调函数.
    用法和参数跟上面类似.
    slideUp: 通过高度变化(向上减小)来动态地隐藏所有匹配的元素,在隐藏完成后可选地触发一个回调函数。
    用法和参数跟上面类似.
    slideToggle: 通过高度变化来切换所有匹配元素的可见性,并在切换完成后可选地触发一个回调函数.
    跟toggle用法类似.

    $('#box').slideDown(2000);
    $('#box').slideUp(3000);
    $('#box').slideToggle('slow');

      

      3.淡入淡出 fadeIn fadeOut fadeTo fadeToggle

        fadeIn: 通过不透明度的变化来实现所有匹配元素的淡入效果,并在动画完成后可选地触发一个回调函数。
    这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。
    fadeOut: 通过不透明度的变化来实现所有匹配元素的淡出效果,并在动画完成后可选地触发一个回调函数。
    这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。
    fadeTo: 把所有匹配元素的不透明度以渐进方式调整到指定的不透明度,并在动画完成后可选地触发一个回调函数。
    这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。
    fadeToggle:通过不透明度的变化来开关所有匹配元素的淡入和淡出效果,并在动画完成后可选地触发一个回调函数。
    这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。
    实现淡入淡出的效果就是使用此方法。
      $("p").fadeIn("900");        //用900毫秒时间将段落淡入
      $("p").fadeOut("900");       //用900毫秒时间将段落淡出
      $("p").fadeToggle("900");     //用900毫秒时间将段落淡入,淡出
      $("p").fadeTo("slow", 0.6);    //用900毫秒时间将段落的透明度调整到0.6

      4、动画 animate  delay stop

        animate:用于创建自定义动画的函数。
    animate(params,[speed],[fn])。
    params:一组包含作为动画属性和终值的样式属性和及其值的集合。
    speed:三种预定速度之一的字符串("slow","normal", or "fast")或表示动画时长的毫秒数值(如:1000)
    fn:在动画完成时执行的函数,每个元素执行一次。
    stop: 停止所有在指定元素上正在运行的动画。
    stop([clearQueue],[jumpToEnd])
    clearQueue:如果设置成true,则清空队列。可以立即结束动画。默认是false
    设置成false,让当前正在执行的动画立即完成,并且重设show和hide的原始样式,调用回调函数等。
    delay: 用来做延迟的操作。
    delay(1000),一秒之后做后面的操作。
     // jquery 链式调用
    
    <script type="text/javascript">
        $(function () {
            //动画 animate  delay stop
    
            $('#btn').click(function () {
                $(this).prev().animate({'width':'200px','height':'200px'},3000)
                $(this).prev().animate({'margin-left':'20px'}).delay(200).animate({'margin-top':'30px'})
            });
            $('#btn1').click(function () {
                $(this).prevAll('div').stop()
            })
        })
    </script>

    5、jquery的属性操作

    jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作。
    html属性操作:是对html文档中的属性进行读取,设置和移除操作。比如attr()、removeAttr()
    DOM属性操作:对DOM元素的属性进行读取,设置和移除操作。比如prop()、removeProp()
    类样式操作:是指对DOM属性className进行添加,移除操作。比如addClass()、removeClass()、toggleClass()
    值操作:是对DOM属性value进行读取和设置操作。比如html()、text()、val():用于表单控件中获取值,比如input textarea select等等
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>单个标签 修改css属性</title>
        <style type="text/css">
            .active {
                background-color: pink;
            }
    
            .box1 {
                color: orange;
            }
    
            .font1 {
                font-size: 22px;
            }
    
        </style>
    </head>
    <body>
    <h1 id="Luffycity" class="box1">路飞学城</h1>
    <input type="button" id="btn" value="点击">
    <h2 id="oldBoy">老男孩</h2>
    
    <script src="jquery-3.2.1.min.js"></script>
    </body>
    
    <script type="text/javascript">
    
        $(function () {
            $("#Luffycity").click(function () {
    
    //1. html属性操作  attr()
    
                //1.1 获取标签的 各种属性值 :           attr() 如果有1个参数,表示获取值
                $(this).attr('id');
                $(this).attr('class');
                $(this).attr('title');
    
                //1.2  设置标签的属性值class id name:   attr() 如果有2个参数,表示设置值
                $(this).attr('class', 'active');
                $(this).attr({'id': 'box2', 'name': 'name11'});  //如果设置多个类名,不能使用attr
    
                //1.3  删除1个或多个属性
                $(this).removeAttr('id');
                $(this).removeAttr('name title');
    
    
    
    // 2、DOM属性操作     prop  可以设置没有的属性
                     //attr 只能操作标签自带的属性,
    
                //2.1 获取该元素的class值
                $(this).prop('class');
    
                //2.2 设置值
                $(this).prop({'title': 'img1', 'title22': 'active'});
    
                //2.3 删除dom对象的title属性
                $(this).removeProp('title', 'title2');
    
    
    
    // 3、类样式操作  addClass() removeClass()  toggleClass()添加类,删除类
    
                //3.1 添加一个或多个 class
                $(this).addClass('box1');
                $(this).addClass('box1 font1');  //添加多个
    
                //3.2 删除一个或多个class
                $(this).removeClass('font1');
                $(this).removeClass();  //移除所有的
    
                //3.3.反复添加删除class属性值
                $(this).toggleClass('active');
    
    
    
    ///4、值操作
    
                // 4.1 获取值
                $(this).text();  //获取标签的text  路飞学城
                $(this).html();  //获取标签的里面的html 路飞学城
                $("#btn").val();  //获取input标签的 val 点击
    
                //4.2 设置值
                $(this).html('路飞学城2');
                $(this).text('路飞学城22');
                $(this).html("<span>我是一个span</span>");
                $("#btn").val('设置了value');   //表单控件使用的一个方法
            });
        })  
    </script>
    </html>

    6、from表单中的操作

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
    
            div {
                margin: 20px;
            }
        </style>
    </head>
    <body>
    <div>
        <input type="radio" value="1" name="sex"><input type="radio" value="2" name="sex" checked><input type="radio" value="3" name="sex">other
    </div>
    
    <div>
        <input type="checkbox" name="hobby" value="11" checked>game
        <input type="checkbox" name="hobby" value="12" checked>sing
        <input type="checkbox" name="hobby" value="13">book
    </div>
    
    <div>
        username:<input type="text" name="username" placeholder="请输入用户名"><br>
        password:<input type="password" name="password" placeholder="请输入密码">
    </div>
    
    <div>
        <button type="reset">重置</button>
        <button type="submit">提交</button>
        <button type="button">登录</button>
    </div>
    
    <div>
        <select name="city" id="city" multiple>
            <option value="21">shanghai</option>
            <option value="22" selected>guangzhou</option>
            <option value="23" selected>beijing</option>
            <option value="24">xian</option>
        </select>
    </div>
    <div>
        <textarea name="desc" id="desc" cols="30" rows="10"></textarea>
        <textarea name="desc" id="desc1" cols="30" rows="10"></textarea>
        <textarea name="desc" id="desc2" cols="30" rows="10"></textarea>
    </div>
    
    <script src="./jquery-3.2.1.min.js"></script>
    </body>
    <script type="text/javascript">
        $(function () {
    
            //1.单选框 type=radio     设置,获取   value
            $("input[type=radio]").val(['0']);
            console.log($('input[type=radio]:checked').val());
            $('input[type=radio]').get(1).checked = true    //radio第二个框设定为checked
    
    
            //2.复选框 type=checkbox   仅仅获取第一个checked
            $('input[type=checkbox]').val(['12', '13']);
            console.log($("input[type=checkbox]:checked").val());
            $.each($('input[type="checkbox"]:checked'), function () {   // $.each循环下
                console.log($(this).val())
            })
            $('input[type=checkbox]').get(1).checked = true
    
    
            //3.下拉列表select option
            $('select').val(['23']);                       //设置  必须用select
            $('select').val(['21', '22', '23', '24'])
            $('select[name=city]').val(['21'])
    
            console.log($('#city option:selected').val());  //获取值
            console.log($('select[id=city]:selected').text())
            console.log($(':selected').text())
            console.log($('select>option:selected').eq(1).text())
    
            //4. 文本type=text
            $('input[type=text]').val('试试就是说')
            console.log($('input[type=text]').val())
    
            //5.button按钮
            $('button[type=reset]').html('我要重置了')
    
            //6.文本框,禁用输入字段
            $("textarea[id='desc']").attr('disabled', true)
            $("textarea[id='desc1']").attr('readonly', true)
    
        })
    </script>
    </html>

    7、jquery的文档操作

      插入操作

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>节点的增删改查</title>
    </head>
    <body>
    <h1>路飞学城0</h1>
    <script src="jquery-3.2.1.min.js"></script>
    </body>
    
    <script type="text/javascript">
    $(function () {
        $($('h1')[0]).click(function () {
    
            //1.创建新的标签
            var oH2 = document.createElement('h2');
            var btn = document.createElement('input');
    
            //2.给新标签inner 新的html text值
            $(oH2).html('路飞学城2');
            $(oH2).text('路飞学城22');
            $(oH2).html("<span>我是一个span</span>");
            $(btn).val('设置了value');
    
            //3.给新标签添加属性值 id title class name
            $(oH2).attr('id','Luffycity2');
            $(oH2).attr({'title':'luff','class':'active','name':'luff'});
            $(oH2).addClass('active2');
            
    //插入操作
            //4.父子add的各种方式 append prepend
            $(this).parent().append(oH2);  //追加到子元素的后面
            $(oH2).appendTo($(this).parent());
    
            $(this).parent().prepend(oH2);  //添加到子元素的最前面
            $(oH2).prependTo($(this).parent());
    
    
            //5.同级兄弟 add元素 before after
            $(this).after(oH2);
            $(oH2).insertAfter($(this));
    
            $(this).before(oH2);
            $(oH2).insertBefore($(this));
    
        })
    })
    
    </script>
    </html>

      复制clone(true),替换,删除

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1 id="Luffycity1">路飞学城1</h1>
    <input type="button" id="btn" value="复制"><br>
    <input type="button" id="btn2" value="替换">
    <input type="text" id="username" value="文本框"><br>
    <input type="button" id="btn3" value="empty">
    <input type="button" id="btn4" value="remove">
    <input type="button" id="btn5" value="detach">
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
    <script src="jquery-3.2.1.min.js"></script>
    </body>
    <script type="text/javascript">
        $(function () {
    
    // 复制操作:
            $('#btn').click(function () {
                $('#Luffycity1').after($('#Luffycity1').clone(true));  // 2.clone(true):元素以及其所有的事件处理并且选中这些克隆的副本(简言之,副本具有与真身一样的事件处理能力)
                $('#Luffycity1').after($('#Luffycity1').clone());   // 1.clone():克隆匹配的DOM元素并且选中这些克隆的副本。
            });
    
    // 替换操作
            $('#btn2').click(function () {   
                $('#username').replaceWith('<span>我是新的文本</span>')  // 替换成指定的HTML或DOM元素。
                $('<br/><hr/><button>按钮</button>').replaceAll('h4')  // 替换掉所有 selector匹配到的元素
            });
    
    
    //删除操作
            //1. empty() 只是清空了被选的内容
            $('#btn3').click(function () {
                $('ul').empty();
            });
    
            //2.remove()  被选元素也被删掉了,事件就没有了,什么都没有了
            $('#btn4').click(function () {
                $('ul').remove();
            });
    
            //3.detach() 移除匹配的节点元素  删除节点后,事件会保留
            $('#btn5').click(function () {
                var btn5 = $(this).detach();
                console.log($(btn5));
                $('ul').append($(btn5));
            });     
        })
    
    </script>
    </html>

    8、jquery的位置属性

    1.position 获取匹配元素,相对父元素得偏移
    console.log($('p').position());
    console.log($('p').position().top);
    console.log($('p').position().left);

    2.scrollTop scrollLeft 获取匹配元素,相对滚动条卷起得位置信息
    console.log($(document).scrollTop());
    console.log($(document).scrollLeft());

    //监听文档滚动
    $(document).scroll(function () {
    console.log($(document).scrollTop());
    console.log($(document).scrollLeft());
    });

    3.offset 获取匹配元素,在当前位置相对于浏览器的偏移
    console.log($('#btn').offset());
    console.log($('#btn').offset().top);
    console.log($('#btn').offset().left);

    4.width height 获取元素得宽高
    console.log($('#box').width());
    console.log($('#box').height());

    // 设置宽高
    $('#box').width(400);
    $('#box').height(400);

    5.innerWidth innerHeight
    innerWidth = width + 2*padding 不包括边框,获取匹配元素得内部宽度
    innerHeight = height + 2*padding 不包括边框,获取匹配元素得内部高度
    console.log($('#box').innerWidth());
    console.log($('#box').innerHeight());

    6.outerWidth outerHeight
    outerWidth = width + 2*padding + 2*border 获取匹配元素得外部宽度
    outerHeight = height + 2*padding + 2*border 获取匹配元素得外部高度
    console.log($('#box').outerWidth());
    console.log($('#box').outerHeight());

    //监听文档滚动条滚动
            $(document).scroll(function () {
                $(document).scrollTop() > 100 ? $('#gotop').show() : $('#gotop').hide()
            })
    
            $('#gotop').click(function () {
                $('html,body').animate({scrollTop: '0'}, 2000)
            })

    9、jquery案例

    24-[jQuery]-案例

    10、事件概念

    1.事件的概念:
        HTML中与javascript交互是通过事件驱动来实现的,
        例如鼠标点击事件、页面的滚动事件onscroll等等。
    
    2.什么是事件流?
        事件流描述的是从页面中接收事件的顺序
    
    3.DOM事件流
        ① 事件捕获阶段;
        ② 处于目标阶段;
        ③ 事件冒泡阶段;
    <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <title>事件流</title>
                <script>
    
                window.onload = function(){
    
                    var oBtn = document.getElementById('btn');
    
                    oBtn.addEventListener('click',function(){
                        console.log('btn处于事件捕获阶段');
                    }, true);
                    oBtn.addEventListener('click',function(){
                        console.log('btn处于事件冒泡阶段');
                    }, false);
    
                    document.addEventListener('click',function(){
                        console.log('document处于事件捕获阶段');
                    }, true);
                    document.addEventListener('click',function(){
                        console.log('document处于事件冒泡阶段');
                    }, false);
    
                    document.documentElement.addEventListener('click',function(){
                        console.log('html处于事件捕获阶段');
                    }, true);
                    document.documentElement.addEventListener('click',function(){
                        console.log('html处于事件冒泡阶段');
                    }, false);
    
                    document.body.addEventListener('click',function(){
                        console.log('body处于事件捕获阶段');
                    }, true);
                    document.body.addEventListener('click',function(){
                        console.log('body处于事件冒泡阶段');
                    }, false);
    
                };
    
                </script>
            </head>
            <body>
                <a href="javascript:;" id="btn">按钮</a>
            </body>
            </html>
    
    事件流
    事件流

    1、addEventListener
    addEventListener 是DOM2 级事件新增的指定事件处理程序的操作,这个方法接收3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。
    最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。
    
    
    2、document、documentElement和document.body三者之间的关系:
    
    document代表的是整个html页面;
    document.documentElement代表的是<html>标签;
    document.body代表的是<body>标签;

      在标准的“DOM2级事件”中规定,事件流首先是经过事件捕获阶段,接着是处于目标阶段,最后是事件冒泡阶段。这里可以画个图示意一下:

    
    

     

    11.jquery的常用事件

      (1)载入dom

      当页面载入成功后再运行的函数事件

    $(document).ready(function(){
      do something...
    });
    
    //简写
    $(function($) {
      do something...
    });

      

      (2)查看事件

            $('.p1').click(function (ev) {
                console.log(ev.type);     // 获取事件的类型
                console.log(ev.target);   // 获取事件发生的DOM对象
                console.log(ev.pageX);    // 获取到光标相对于页面的x的坐标和y的坐标
                console.log(ev.pageY);
                console.log(ev.which)     // 该方法的作用是在鼠标单击事件中获取到鼠标的左、中、右键;在键盘事件中获取键盘的按键.
            })

      (3)事件阻止

        //常用的事件方法:1.阻止事件冒泡  2.阻止默认事件  3.return false
        $(function () {
    
            //1.阻止事件冒泡
            $('div').click(function (ev) {
                alert('当前按钮的事件被触发了')
            });
    
            $('div button').click(function (ev) {
                ev.stopPropagation()
            });
    
    
            $('div #a1').click(function (ev) {
                ev.stopPropagation()
            });
            
    
            //2.阻止默认事件     a标签跳转
            $('div #a1').click(function (ev) {
                ev.preventDefault()
            })
    
    
            //3.全部阻止  return false
            $('div #a2').click(function () {
                return false
            })
    
        })

      (4)事件绑定 bind  

            // 1.事件bind
            //方式a
            $('button').bind('click mouseenter',function () {
                alert('事件被绑定了')
            });
    
    
            //方式b:
            $('a').bind({
                'click':add1,
                'mouseenter':add2
            });
    
            function add1() {
                alert('点击事件被绑定了')
            }
            function add2() {
                alert('事件被绑定了')
            }
    
    
            //2.事件移除unbind
            $('button').unbind()
    
            $('a').unbind('mouseenter')
    
    
            setTimeout(function () {
                $('button').unbind('click',function () {
                    alert(1111)
                })
            },3000)
    
    
            //3.绑定自定义事件
            $('button').bind('myClick',function (ev,a,b) {
                alert("两个数之和是" + a+b)
            });
    
            $('button').trigger('myClick',[1,2])  //触发
    
          })
        $(
    "p").one( "click", fun...) //one 绑定一个一次性的事件处理函数 注: 添加的事件不能发生在未来 --》 动态生成的元素不能直接添加对象 里面的事件也不能发生了-->想让发生,事件代理!!

      

      bind()方法还有一种简写方式,上面的代码还可以换成:

      代码如下:
    $("div p").click(function () {
        alert($(this).text());
    })

      

      bind的两个问题

    第一个问题,这里用了隐式迭代的方法,如果匹配到的元素特别多的时候,比如如果我在div里放了50个p元素,就得执行绑定50次。对于大量元素来说,影响到了性能。
    
    但是如果是id选择器,因为id唯一,用bind()方法就很快捷了。
    
    第二个问题,对于尚未存在的元素,无法绑定。点击页面上的按钮,将动态添加一个p元素,点击这个p元素,会发现没有动作响应。

      (6)事件委派 delegate

    // 与bind 不同的是当时间发生时才去临时绑定。
    $("p").delegate("click",function(){
      do something...
    });
    
    $("p").undelegate();       //p元素删除由 delegate() 方法添加的所有事件
    $("p").undelegate("click")   //从p元素删除由 delegate() 方法添加的所有click事件

      (5)事件代理on

      on()其实是将以前的绑定事件方法作了统一,可以发现无论bind()还是delegate()其实都是通过on()方法实现的,只是参数不同罢了。

        事件代理: 自己完成不了当前的点击事件,交给父级元素做这件事件
    父级.on('事件名字','点击当前的标签元素选择器',fn)

    //bind 只能绑定已经存在的标签,对于后面添加的标签不起作用
            //on事件代理 动态监听 可以对后添加的标签起作用
    
    $('ul').on('click', function (ev) {
        alert($(ev.target).html())
        var newLi = document.createElement('li')
        $(newLi).html('10')
        $(this).append(newLi)
        $(ev.target).css('color', 'red')
    })
    
    // on 事件委托,以后统一用on
    $(document).on('click', 'ul', function (ev) {
        alert($(ev.target).html())
        var newLi = document.createElement('li')
        $(newLi).html('10')
        $(this).append(newLi)
        $(ev.target).css('color', 'red')
    })
    
    //on 实现bind的效果
    $(document).on('click mouseenter', 'ol', function (ev) {
        alert($(ev.target).html())
        var newLi = document.createElement('li')
        $(newLi).html('10')
        $(this).append(newLi)
        $(ev.target).css('color', 'red')
    })

      (6)jQuery事件绑定on()、bind()与delegate() 方法详解

        https://www.cnblogs.com/czaiz/p/5519421.html

    总结
    
    1.选择器匹配到的元素比较多时,不要用bind()迭代绑定
    
    2.用id选择器时,可以用bind()
    
    3.需要给动态添加的元素绑定时,用delegate()或者on()
    
    4.用delegate()和on()方法,dom树不要太深
    
    5.尽量使用on()

      (7)事件移除

    //对应于bind()、delegate()和on()绑定方法,其移除事件的方法分别为:
    
    $( "div p" ).unbind( "click", handler );
    $( "div" ).undelegate( "p", "click", handler );
    $( "div" ).off( "click", "p", handler );

    12、鼠标事件

        1. .click        单击
        2. .dblclick     双击
        3. .mousedown    鼠标按下不松开
        4. .mouseup      鼠标松开
        5. .mouseover    移入,被选元素和子元素被选中时会触发
        6. .mouseout     移出,被选元素和子元素被选中时会触发
        7. .mouseenter   移入,只有被选中元素移入时
        8. .mouseleave   移出,只有被选中元素移入时
        9. .mousemove    移动
        10. .hover === mouseenter  mouseleave
            $('#box').hover(function(){},function(){})
        11. .focus       获取焦点
        12. .blur        失去焦点
        13. .change      input发生变化时
        14. .keydown     键盘按下
        15. .keyup       键盘弹起

    13、表单事件

        1. .change   // 此事件仅限于 input元素 textarea select, 表单元素发生改变时触发事件.
    2. .select // 仅限于用在 input中 type=text textarea, 文本元素发生改变时触发事件.
    3. .submit // 适应于表单提交, 表单元素发生改变时触发事件.
        //表单事件
        $(function () {
            //1.change()  仅限用于  input元素  textarea select
            $('select').change(function () {
                alert($('select option:selected').text())
            })
    
            //2.select()  仅限用于 input type=text textarea
    
            $('#other2').select(function () {
                alert($(this).val())
            })
    
            //3.form表单提交时 submit()
            $('form').submit(function (ev) {
    
                alert('1111')
                ev.preventDefault()
    
            })
    
        })

    14、jquery的Ajax

    AJAX = 异步的javascript和XML(Asynchronous Javascript and XML)
    简言之,在不重载整个网页的情况下,AJAX通过后台加载数据,并在网页上进行显示。
        通过 jQuery AJAX 方法,您能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本、HTML、XML 或 JSON -
        同时您能够把这些外部数据直接载入网页的被选元素中。

      5种方法

    1.jQuery的load()方法
    
    2. jquery的getJSON方法
    
    3.jquery的$.get()方法
    
    4.jquery的post()方法
    
    5. jquery的$.ajax()方法
    #1.jQuery的load()方法
            jQuery load()方法是简单但强大的AJAX方法。
            load()方法从服务器加载数据,并把返回的数据放入被选元素中。
            语法:
                $("selector").load(url,data,callback);
                必须的url参数规定记载的url地址
                可选的data参数规定与请求一同发送的查询字符串键/值对的集合
                可选的callback参数是load()方法完成后所执行的函数名称
            1.
                $('#btn').click(function(){
                    //只传一个url,表示在id为#new-projects的元素里加载index.html
                    $('#new-projects').load('./index.html');
                })
            2.
                $('#btn').click(function(){
                    //只传一个url,导入的index.html文件含有多个传递参数,类似于:index/html?name='张三'
                    $('#new-projects').load('./index.html',{"name":'张三',"age":12});
                })
            3.
                $('#btn').click(function(){
                    //加载文件之后,会有个回调函数,表示加载成功的函数
                    $('#new-projects').load('./index.html',{"name":'张三',"age":12},function(){});
                })
            注意:load函数最好在服务器网页中应用,也就是说要在服务器上运行,本地调试需要搭建后端本地环境。
    
    
    #2. jquery的getJSON方法
            jQuery的AJAX中使用getJSON()方法异步加载JSON格式数据。获取服务器中的数据,并对数据进行解析,显示到页面中
            语法: $.getJSON(url,[data],[callback])
            url参数为请求加载json格式文件的服务器地址,可选项data参数为请求时发送的数据,callback参数为数据请求成功后执行的函数
    
                $.getJSON("./data/getJSON.json", function (data) {
                   var str = "";//初始化保存内容变量
                   $.each(data, function(index,ele) {
                      $('ul').append("<li>"+ele.name+"</li>")
    
                      });
                   })
    
    #3.jquery的$.get()方法
            $.get() 方法通过 HTTP GET 请求从服务器上请求数据
            语法:$.get(URL,callback);
            url参数规定你请求的路径,是必需参数,callback参数为数据请求成功后执行的函数
    
                $.get('./data/getJSON.json',function(data,status){
                    console.log(status);   //success    200状态码 ok的意思
                })
    
    
    #4.jquery的post()方法
            与get()方法相比,post()方法多用于以POST方式向服务器发送数据,服务器接收到数据之后,进行处理,并将处理结果返回页面
            语法:$.post(URL,data,callback);
            url参数规定你请求的路径,是必需参数,可选的data参数是连同请求发送的数据。可选的callback参数为数据请求成功后执行的函数
    
                $.post('/index',{name:'张三'},function(data,status){
                    console.log(status);
                })

     

    15. 重点:$.ajax()方法

    jquery的$.ajax()方法 是做ajax技术经常使用的一个方法。
    参数如下:
     1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。
    
    2.type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。
    
    3.timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。
    
    4.async: 要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。
    
    5.cache: 要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。
    
    6.data: 要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看  processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。
    
    7.dataType: 要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下: xml:返回XML文档,可用JQuery处理。 html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。 script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。 json:返回JSON数据。 jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。 text:返回纯文本字符串。
    
    8.beforeSend: 要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。XMLHttpRequest对象是惟一的参数。 function(XMLHttpRequest){ this; //调用本次ajax请求时传递的options参数 } 9.complete:
    
    要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。 function(XMLHttpRequest, textStatus){ this; //调用本次ajax请求时传递的options参数 }
    
    10.success:
    
    要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。 (1)由服务器返回,并根据dataType参数进行处理后的数据。 (2)描述状态的字符串。 function(data, textStatus){ //data可能是xmlDoc、jsonObj、html、text等等 this; //调用本次ajax请求时传递的options参数 }
    
    11.error: 要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下: function(XMLHttpRequest, textStatus, errorThrown){ //通常情况下textStatus和errorThrown只有其中一个包含信息 this; //调用本次ajax请求时传递的options参数 }
    
    12.contentType: 要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。
    
    13.dataFilter: 要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type){ //返回处理后的数据 return data; }
    
    14.dataFilter: 要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type){ //返回处理后的数据 return data; }
    
    15.global: 要求为Boolean类型的参数,默认为true。表示是否触发全局ajax事件。设置为false将不会触发全局ajax事件,ajaxStart或ajaxStop可用于控制各种ajax事件。
    
    16.ifModified: 要求为Boolean类型的参数,默认为false。仅在服务器数据改变时获取新数据。服务器数据改变判断的依据是Last-Modified头信息。默认值是false,即忽略头信息。
    
    17.jsonp: 要求为String类型的参数,在一个jsonp请求中重写回调函数的名字。该值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,例如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。
    
    18.username: 要求为String类型的参数,用于响应HTTP访问认证请求的用户名。
    
    19.password: 要求为String类型的参数,用于响应HTTP访问认证请求的密码。
    
    20.processData: 要求为Boolean类型的参数,默认为true。默认情况下,发送的数据将被转换为对象(从技术角度来讲并非字符串)以配合默认内容类型"application/x-www-form-urlencoded"。如果要发送DOM树信息或者其他不希望转换的信息,请设置为false。
    
    21.scriptCharset: 要求为String类型的参数,只有当请求时dataType为"jsonp"或者"script",并且type是GET时才会用于强制修改字符集(charset)。通常在本地和远程的内容编码不同时使用
    $.ajax()方法的参数
     

       (1)$.ajax() 的get请求方法

        $.ajax({
            url:'./data.json',
            type:'get',       // 默认是 get
            dataType:'json',  // 如果不指定 默认自动识别文件类型
            success:function (data) {
                console.log(data);
            },
            error:function () {
    
            }
        });

      

      (2)$.ajax() 的post请求方法

    $.ajax({
            url:"/course",
            type:'post',
            data:{
                username:'zhangsan',
                password:'123'
            },
            sunccess:function (data) {
                if(data.state === 'ok' && data.status === '200'){
                    //登录成功
                }
            },
            error:function (err) {
                console.log(err);
            }
        });
  • 相关阅读:
    内容生成器.计数器及多列
    STT-MTJ(自旋转移矩磁隧道结)模型的Verilog-A语言描述(仅参考)
    将进酒-唐·李白
    三十六计、孙子兵法
    Keil新建工程步骤
    No.6 Verilog 其他论题
    2-4 Numpy+Matplotlib可视化(二)
    2-3 Numpy+Matplotlib可视化(一)
    0-0 列表,元组,字典,集合
    2-2 Numpy-矩阵
  • 原文地址:https://www.cnblogs.com/venicid/p/9220067.html
Copyright © 2011-2022 走看看