前端- 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);
        }
    });

 

转载于:https://www.cnblogs.com/venicid/p/9220067.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值