JQuery笔记总结------事件细节JQ进阶常用方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JQuery笔记总结------事件细节JQ进阶常用方法相关的知识,希望对你有一定的参考价值。

引入jQuery:

<script src="./K1/Tool/jquery-3.1.1/jquery-3.1.1.min.js"></script>


引入CSS:

<link rel="shortcut icon" type="image/x-icon" href="./images/icon.ico">

<link rel="stylesheet" type="text/css" href="css.css">


*********************************************************************

页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页 面包含图片等文件在内的所有元素都加载完成。(可以说:ready 在onload 前加载!!!) 
一般样式控制的,比如图片大小控制放在onload 里面加载; 但是对于一些特殊应用,比如图片的放大缩小,图片的剪裁。需要网页所有的内容加载完毕后才执行的呢?我推荐使用$(window).load()方法,这个方法会等到页面所有内容加载完毕后才会触发,并且同时又没有onLoad事件的弊端. 


    $(document).ready(function(){}),或简写为$(function(){}),

    <script> 
        $(window).load(function() 
        { 
            alert("hello"); 
        }); 
        $(window).load(function() { 
            alert("hello again"); 
        }); 
    </script>  

*********************************************************************
【向上/向左滚动的距离】
原生:
    document.documentElement.scrollTop || document.body.scrollTop
jq:
    $(document).scrollTop();

--------------------------------------------------------------------

【盒子到窗口左边和上边的距离】
    $(div).offset().left

--------------------------------------------------------------------

原生(属性)      -->     jQ(方法)
.offsetWidth    -->     outerWidth()    【包括边框,包括padding】
.clientWidth    -->     innerWidth()    【不包括边框,包括padding】


outerWidth() : 获取元素的width + padding + border
               如果括号内有参数true需要加上margin
               可以获取隐藏元素的值。

【原生】offsetWidth() :获取元素的width + padding + border
                        但无法获取隐藏元素的值。

--------------------------------------------------------------------

原生(属性):
document.documentElement.clientWidth 

jQ(方法):
$(document).width();    【不包括边框和padding】


*********************************************************************

添加事件的n种方式:

    $(button).click(function(){...});

    $(button).on(mouseenter click,function(){...});

*********************************************************************

链式操作:

    $(div).addClass(color).click(function(){...}).mouseenter(function(){...}).html(abc123);


*********************************************************************

选择器:
:first : 第一个元素
:last : 最后一个
:eq(1) : 第2个元素,下标从0开始
:even: 偶数个(下标)
:odd: 奇数(下标)
:gt(1) : 大于下标为1的元素
:lt(1) : 小于下标为1的元素

eq(3): 根据下标获取元素



    $(function(){

            $(ul li).css(color,red);  // 所有的li为红色

            $(ul li).eq(1).css(color,red);  // ul下第二个li为红色
            
            $(ul li:odd).css(color,blue); // 奇数行的li
            
            $(ul li:even).css(color,yellow);  // 偶数行的li
            
            $(ul li:first).css(color,magenta);    //获取第一个
            
            $(ul li:last).css({
                            display: block,
                            width: 200px,
                            height: 200px});  //获取最后一个
                
            $(ul li[title="123"]).css(color,cyan);    // 属性选择器的封装

        })

---------------------------------------------------------------
index(): 获取元素的下标:

        <ul> 
            <li id="foo">foo</li> 
            <li id="bar">bar</li> 
            <li id="baz">baz</li> 
        </ul> 


        $(#bar).index(li); //1,传递一个选择器,返回#bar在所有li中的做引位置 

        $(#bar).index(); //1,不传递参数,返回这个元素在同辈中的索引位置。

*********************************************************************

拖拽:

    $(function(){

        var disX = 0;
        var disY = 0;

        $(div).mousedown(function(ev){
            
            disX = ev.pageX - $(this).offset().left;
            disY = ev.pageY - $(this).offset().top;
            
            $(document).mousemove(function(ev)
            {
                $(div).css(left,ev.pageX - disX);
                $(div).css(top,ev.pageY - disY);
            });

            $(document).mouseup(function()
            {
                $(document).off();
            });
            
            return false;
        });
    });


*********************************************************************

使用extend方法添加功能:

$.fn.extend({
            toBlue: function () {
                $(this).css(background,blue);
            },
            toMagenta: function () {
                $(this).css(background,magenta);
            }
        });
        $(button).click(function(){
            $(div,h1,h2,h3,h4).toBlue();
        });




*********************************************************************

hover的使用:

    $(function(){

        $(#div1).hover(
        function(){
            
            //  $(this).css(‘background‘,‘blue‘);
            
            //  $(‘#div2‘).hide(3000);
            
            //  $(‘#div2‘).fadeOut(1000);  //默认400
            
            //  $(‘#div2‘).slideUp();
            
                $(#div2).fadeTo(1000,0.5);
            
        },
        function(){
            
            //  $(this).css(‘background‘,‘red‘);
            
            //  $(‘#div2‘).show(3000);
            
            //  $(‘#div2‘).fadeIn(1000);
            
            //  $(‘#div2‘).slideDown();
            
                $(#div2).fadeTo(1000,1);
            
        });

    });


*********************************************************************

设置动画时,先关后开:

$(div).hover(
    function()
    {       
        $(this).stop().animate({width:500px,height:500px});
    },
    function()
    {
        $(this).stop().animate({width:100px,height:100px});
    }
);


*********************************************************************


遍历DOM元素:

    $(li).each(function (index,ele) {
        .......
    });


遍历arr、json对象:
    
    $.each(arr1,function (index,value) {
        .......
    })

    $.each(json1,function (key,value) {
        .......
    });


*********************************************************************

删除节点:

A.remove():移除所有的A元素
A.empty(): 移除A的所有的子元素

获取所有的子元素:
A.children()

*********************************************************************

添加节点:

A.append(B) : 往A里面添加B (B在最后面)
A.appendTo(B) : 把A添加到B里面 (A在最后面)

A.prepend(B): 往A里面添加B (B在最前面)
A.prependTo(B): 把A添加到B里面 (A在最前面)

A.insertBefore(B): 把A插入到B前面

A.insertAfter(B): 把A插入到B后面

*********************************************************************

动画:
执行动画以前最好调用stop方法
animate(params,[speed],[easing],[fn])
params: 需要改变的样式 json对象
speed: 执行的时间,slow,fast,nomal  1000ms
easing: 运动状态,linear,swing
fn: 动画完成后执行的函数

    
        
        $(#div1).stop().animate({width : 300 , height : 300} , 4000 , linear,function(){
            alert(123);
        });
        
        $(#div2).stop().animate({width : 300 , height : 300} , 4000 , swing);

        $(#div3).animate({width:300},2000).delay(1000).animate({height:300},2000);


delay(1000) : 链在animate之后,延迟多少毫秒后执行      
 

---------------------------------------------------------------


自带的动画:

slideUp: 上拉隐藏
slideDown: 下拉显示 (设置了display)

fadeIn: 淡入 (显示)
fadeOut: 淡出 (隐藏) (设置了display)


*********************************************************************


get() : 就是把JQ转成原生JS,括号内不写下标就是取全部

    document.getElementById(div1).innerHTML -->  $(#div1).get(0).innerHTML 

    for(var i=0;i<$(li).get().length;i++){
        $(li).get(i).style.background = red;
    }

--------------------------------------------------------------

remove() : 删除元素,会把元素上的所有操作都删掉。

detach() : 删除元素,但是会保留删除元素的操作行为。

            $(function(){
                $(div).click(function()
                {
                    alert(123);
                });
                var oDiv = $(div).detach();
                $(body).append( oDiv );
            });

--------------------------------------------------------------



$(div).siblings(): 获取所有的兄弟节点,括号内可以写筛选条件

$(div).prevAll() : 获取上面所有的兄弟节点,括号内可以写筛选条件
$(div).nextAll() : 获取下面所有的兄弟节点,括号内可以写筛选条件

$(div).nextUntil(h2) : 获取当前节点到 指定节点h2(不包括h2)之间的兄弟节点

--------------------------------------------------------------


clone() : 可以接收一个参数true ,作用可以复制之前的操作行为。不写参数就只复制节点,不复制之前的操作行为


    $(div).click(function(){
        alert(123);
    });
    
    $(div).clone(true).appendTo( $(span) );

--------------------------------------------------------------

wrap() : 包装

unwrap() : 删除包装 ( 删除父级 : 不包括body )

wrapAll() : 整体包装

wrapInner() : 内部包装

        $(span).wrap(div);

--------------------------------------------------------------

slice(a,b)截取选择元素从第一参数开始,到第二个参数结束(包头不包尾)。

        $(li).slice(1,4).css(background,red);

--------------------------------------------------------------
serialize、serializeArray方法:

$(function(){
    
    //对表单数据进行序列化(串联化),形成一个字符串

    $(form).serialize();  //string : a=1&b=2&c=3
    
    //对表单数据进行序列化,形成一个JSON数组

    $(form).serializeArray();
    
    [
        { name : a , value : 1 },
        { name : b , value : 2 },
        { name : c , value : 3 }
    ]
    
});

</script>

<form>
    <input type="text" name="a" value="1">
    <input type="text" name="b" value="2">
    <input type="text" name="c" value="3">
</form>


*****************************************************************

事件委托:

    //循环的方式

    $(li).on(click,function(){
        this.style.background = red;
    });
    
---------------------------------------
    //事件委托delegate的方式

    $(ul).delegate(li,click,function(){
        
        this.style.background = red;
        
        $(ul).undelegate();  //取消事件委托
        
    });
-----------------------------------------

    //事件委托on的方式

    $(#ul1).on(click,li,function () {
     
        // $(this).css(‘background‘,‘red‘);   
        $(this).addClass(active);     // this-->就是点击的元素
    });

*****************************************************************

//主动触发trigger:

    $(#div1).on(click,function(){
        alert(123);
    });
    
    $(#div1).trigger(click);  


*****************************************************************

事件细节:

ev直接使用,不需要兼容操作

ev.pageX(Y) 鼠标的坐标(相对于文档) : ev.clientX(相对于窗口)

ev.which(能监控鼠标键值) : ev.keyCode

ev.preventDefault(); //阻止默认事件

ev.stopPropagation(); //阻止冒泡

事件函数结尾return false;既能阻止冒泡又能阻止默认事件

one()
    $(div).one(click,function(){}); //事件只执行一次


*****************************************************************

get()
    $(#div).get(0).innerHTML
    //将JQ取的元素转化为原生JS识别的写法,
    get()取的是获取的一组元素
    get(i)取的是获取的一组元素第i个

    不过在JQ下也有length这个属性。
    JQ取的一组元素也能通过下标[i]变成原生JS识别的元素
    如:
        $(li)[i].style.background = red;


*****************************************************************

text()
    $(div).html();只能获取一组元素第一个元素的html内容

    而$(div).text();获取的是该组元素所有元素的文本内容(不含标签)


*****************************************************************

$().fn() 只能给JQ对象用

$.xxx() $.yyy() $.zzz() : 不仅能给JQ用还能给原生JS用,叫做工具方法
---------------------------------------------
$.type()
    判断类型,返回字符串
    和原生JS typeof方法不同的是,该方法可以返回更细的类型
    对object细分了 regexp date array json等类型

$.trim()
    $.trim(str) 去str的前后空格

$.inArray()
    $.inArray(b,arr);
    类似于字符串方法indexOf(),返回的是下标,没有找到返回-1;

$.proxy()
    改变this指向
        function show(n1,n2){
            alert($(this));
            alert(n1);
            alert(n2);
        }
        $.proxy(show,documnet,3,4)();
        $.proxy(show,documnet)(3,4);

        /*一参是方法,二参是指向的对象
        而该函数的形参可以写在三参及以后或者后面的执行括号内
        方便在非立即执行的时候传入参数。*/

        例如:
        function show(n1,n2){  .......  }

        $(document).click( $.proxy(show, $(#div1),3,4) );



$.noConflict()
    防止命名冲突
    var _$ = $.noConflict();
    可以用_$代替$了


$.parseJSON()
    将字符串解析成JSON


$.makeArray()
    把类数组转化为数组,使其可以使用数组方法
    例如
    类数组 var aLis = $(li);
        $.makeArray(aLis).push($(#li1));


*****************************************************************

ajax for JQ :

    //参数为json形式
    $.ajax({
        url : xxx.php,
        data : name=loe&age=20,
        type : POST,
        comtentType : ‘‘,
        success : function(data){//请求成功以后的回调函数
            $.parseJSON(data)
        },
        error : function(){
            //...
        }
    });

    //抽象出来的方法
    $.get(xxx.php,{数据},function(){
        //成功的回调函数
    }); 
    $.post(xxx.php,{数据},function(){
        //成功的回调函数
    });

    $.getJSON(xxx.php?callback=show|?,function(){.....});//?代表随机返回函数名字
    functuin show(data){
        //处理JSONP返回数据
    }

*****************************************************************

JQ插件操作:

$.extend
    扩展工具方法下的插件形式 $.xxx() $.yyy()

    写法如下
        $.extend({
            leftTrim : function(){},
            rightTrim : function(){}
        })
$.fn
    $.fn.extend
    扩展到jq对象上的插件形式$().xxx() $().yyy()

    写法:
    $.fn.extend({
            name : function(){
                $(this)//代表调用这个方法的JQ对象。
            }

        })

    $.fn.extend({
            toBlue:function(){$(this).css(background,blue)},
            toYllow:function(){$(this).css(background,yellow)}
        })
        
*********************************************************************

 

以上是关于JQuery笔记总结------事件细节JQ进阶常用方法的主要内容,如果未能解决你的问题,请参考以下文章

jquery鼠标移入移出

6.7日所学总结jquery进阶,query的BOM,DOM,事件

jq 方法总结

用jQuery实现图片切换(JQ进阶篇)

复习 | 重温jQuery和Zepto的API

第78天:jQuery事件总结