初识

console.log($==jQuery);//truejQuery就是$等价的

页面加载

$(document).ready(function(){});//相当于原生window.onload(DOMContentLoaded)

比o7 g N = v 7 qnload先执行

$(fun8 w d q f ?ction(){})//简写

只需要文档结构加载完毕后执行,onload是文档和资源媒体加载完成。

DOM节点对象转换

jq的DOM节点与原生DOM节点互转

//jq转原生

console.log($(this));//返回jq对象

//init数组对象通过下标获取到的就是原生的DOM

console.log($(‘#box’)[0]);

console.ld 5 W u r /og($(‘#box’).get(0));

$(‘#_ C , C # 0 ,box’).get(0).innerHTML=’哈哈’;

让出$的使用权限

jQuery.noConflict();

console.log($);//undef# v P 8 M ` qind

//闭包将jQuery传到闭K , U A e %包中的$在闭包函数中又S N j # ^ | W可以使] k G 6 A [ o # +用$来进行jq的操作

;(function($){

$(function(X N 6 U){

console.log($(‘#box’));

})

})(jQuery)

//给$起个名字

va? F ( Zrjq=jQuery.noConflict(true);

console.log(jq(‘#box’));

选择器

基本选择器

$(‘#box’)//id选择

$(‘.aa’)//类名选择

$(‘li’)//标签选择

层级选择器

$(‘ulli’)//后代li

$(‘ul>li’)//子代的li

$(‘#li1+li’)//#li1的下一个兄弟li

$(‘#li1~li’)//#li1的所有的弟弟li

基本过滤选择器

$(‘li:first’)//获取第一个元素

$(‘li:last’)//获取最后一个元素

$(‘li:not(#li1)’)//排除

$# – , : % T e(‘li:od~ f g c i 6 Ed’)//选择索引奇数—显示的偶数行

$(‘li:even’)//选择索引偶数—显示奇数行

$(‘li:eq(3)’)//等于索引

$(‘li:gt(3)’)//大于p 1 s S & r索引

$(‘li:lt(3)’)//小于索引

//选取索引为n的li

//$(‘li:eq(‘+n+’)’)

$(‘li’).eq(n)

属性过滤选择器

$(‘li[name]’)//带有name属性的li

$(‘li[name=lucy]’)^ ? M q Y e 9//name属性值为lucy的li

$(‘li[name!=joy]’)//name属性不为joy的li

$(‘li[name*=o]’)/` y l !/name属性值包含o的li

$(‘li[name^=j]’)//name属性的值以j开头的

$(‘li[name$=y]’)//name属性的值以y结尾的

表单选择器n 7 z { H ~

$(‘input’)//标签input

$(‘:inpud L w ; Gt’)//不论标签名只要% b Q j [ ] ) O是表单元素都选取

$(‘:text’)

$(‘:password’)

$(‘:radio’)

$(‘:checkbox’)

$(‘:file’)

$(‘:submit’)

$K l , Z ^ 1 Z B(‘:button’)

DOM

DOM节点遍历

遍历节点

$(‘ul’).children()//ul下的所有子节点

$(‘ul’).childX ? O Aren(‘p’)//ul下的p子节点

$(‘ul’).find(‘p’)//ul下的所P Q y有后代p

$(‘#box’).next()//box的下一个兄弟

$(‘#box’).nextAll()//box的下边的所有兄弟

$(‘#box’).prev()//box上一个

$(‘#box’).prevAll()//上边所有的兄弟

//box的所有的兄弟节点(之前的和之后的全算$ e | t p E |

$(‘#box’).siblings()

$(‘#box’).siblings(‘p’)

遍历父节点

$(‘#box’).parent()//真正的父节点

$(‘#box’).parents()//所有的祖先节点

$(‘#box’).parents(‘R 7 ] 9 | Ldiv’)//S x & Z C j # W ;所有祖先中的div

遍历节点-过滤

$(‘#box’).find(‘li’)//find获取后代元素

$(‘li’).filter(‘.aa’)//filteH O _ hr过滤找到满足条件的元素

$(‘li’W o m).not(‘.aw w B B N x \a’)//not排除满足条件的元素选择其他元素

属性操作

$(‘#box’).attr(‘title’)//获取

$(‘#box’).attr(‘tit9 P 6 r K &le’,Z 4 ] w f 6 5 K‘xixi’);//设置

//批量设置

$(‘#box’).attr({

titA ~ : a 0 z A Dle:’heihei’,

sex:’female’

})

$(‘#box’).removeAttr(‘sex’);//删除属性

属性值为true和false的属性操作

$(‘:checkbX 6 = 9 x } ? uox’).attr(‘checked’);//获取–>checked

$(‘:checkbf * Dox’).prop(‘checked’);//获取–>true

$(‘:checkbox’).prop(‘checked’,true);//设置

class操作

$(‘#box’).ap K ) t N B qddClass(‘red’);//添加类red

$(‘#^ \ f ^ , e _ x bbh d o T I m H # |ox’).removeClass(‘red’);/g R l d 8 o 2 – E/删除red

判断该元素box上是否有red

$(‘#box’).hasR f k ) L ;Cl: t 4 Z 2ass(‘red’)//Boolea# . & } : /n

$(‘#boq h f % Uxi 7 I e‘).is(‘.red’)//Boolean

切换类名toggleClass

$(‘R 0 j *#boxE L a . 6 V m‘).toggleClass(‘red’);

css操作

//获取样式

$(‘#box’).css(‘width’)

//设置

$(‘#box’).css(‘background’,’red’);

//批量设置

$(‘#diva X ? z # r ,1′).css({

width:’200px’,

fontSize:’18px’//font-size去-变驼峰

})

html文本与值的操作

innerHTML—>html()

innerText—>text(@ # c _ O ])

表单value—>val()

$(‘#s1’).html()//获取识别标签

$(‘#Q v z ? E 8 ps1′).text()//获取只识别文本

//设置

$(‘#box’).html(‘<i>过年好!</i>’);//会识别标签

$(‘#box’).text(‘<i>过年好!</i>’);//不会识别

//表单的value

$(‘:text’).val()

$(‘:text’).val(‘ddddd’);

Node操作

创建元素

$(‘<li></li>’)

添加节点

在元素尾部添加

新元素.appendTo(目标元素)

$(‘<li>国庆节</li>’).appendTo($(‘#list’));9 N C B c W ^ / j

目标.a5 \ lppend(新元素)

在元素头部添加

新元素.prependTo(目标元素)

目标.prepend(新元素s N Y H l a l #)

$(‘#list’).prepe: w X O ond($(‘<li>元旦节</li>’))

在目标元素之前插Q B V d y n

新元素.insertBrfore(目标元素)

$(‘<l8 d \ y @ &i>情人节</li>’).insertBefore($(‘#listli’).eq(2));

目标元素.befory u ae(新元素)

在目标元素之后插入

新元素.insertAfter(目标元素)

目标元素.after(新元素)

$(‘#listli’).eq(3).after($(‘<li>妇女节</li>’));

删除节点

remove():将节点删除,返回被删除的节点,不会保留节点上的事件

dR % { %etach():将节点删除,返回被删除的节点,会保留节点上的事件

empty():全部清空

克隆节点

clone()复制节点及内容,但不保留节点上的事件

clone(true)复制节点及内容,保留节点上的事件

替换节点

新节点.replaceAll(要被替换的节点)

要被替换的节点.replaceWith(新节点)

$(‘#listli’).eq(2).replaceWith($(‘<li>女神节</li>’));

数据串联

serialize()

<inputtype=”text”name=’a’vaH c f A g u g Blue=’1’/>

<inputtype=”text”name=’b’valo j % y Mue=’2’/>

<inputtype=9 i _ V \ T U“t. P m [ ; B 1 ? sext”name=’c’value=’3’/>

$(“input”).serialize()//a=1&L – [amp;b=2&c=3

$(“input”).serializeArray()//[{{name:”a”,value:”1″}},{…},{…}]

add和slice

$(“div”).add(? R ` ]“span”).add(/ n $ v“ulli”).css(“backgroundColor”,’red’)

//等同@ p 8 ` [ U =

$(“div,span,ulli”).css(# s K z u #“bac| R nkgroundColor”,’r5 / Med’)//与add一样

$(“ulli”).slice(1,4).css(“backgroundColor”,’red’);//获取从1到4的li元素

BOM

元素的宽高

原生的元素的宽高分别那几e 2 F ` U种如何获取

内容宽高—-widthheight

可视宽高—clientWidth/clientHeight

占位宽高—C 6 Vof9 S _fsetWidth/offsetHeight

$(“#div1: $ 3 ]“).css(“width”)//”100px”字符串

jq的M 5 U元素宽高操作

内容宽高width()height()方法

可视宽高innerWid5 $ [ # I Nth()innerHeight()

占位宽高outerWidth()outerHeight()

整个宽高outerWidth(true)outerHeight(true)

jq获取可视区及F K 4 V 1 Y K V 4文档的宽高

可视区宽高$(S 4 Y F ^ 5 fwindow).width()/.height()

文档的宽高$(document).width()/heQ i z / 3 S J Wightf T ; & u ( R j()

元素的位置

$(‘#sub’= _ = g 0 f ; c ]).offset()返回一个对象到文档的left和top值

$(‘#sub’).position()返回一个对象到有定位属性的父级元素的left和top值

滚动条卷走的宽高操作

$(document).scrollTop()//不传参获取,Y = W ? o ~ #传参设置

事件

event对象

jq中的事件对象不需要N _ & U R 2 0 [兼容了直接传参ev就: $ L可以了

ev.clientX/ev.clientY, Z d事件触发的位置到浏览器可视区的上左边的距离Y ; h G p 6 %

ev.currentTary E jget:当前事件触发T 6 c ; 4 &的元素

ev.delgateTarget:当前事件绑定的元素

ev.offsetX/ev.offsetY:事件触发的位置到元素的上左边的距离

ev.originalEvent:元素事件对象

ev.pageX/ev.pageYz g ! *:事件触发的位置到文档的上左边的距离

ev.scrU X P r leenX/ev.screenY:事件触; [ Q ] [ _* G f的位置到屏幕的上左边的距离

ev.which类似于keyCode可以获取鼠标的键值左键是1右键是3滚轮是2

阻止默认事件ev.preventDefault(Z v q m W { 0 8)

阻止冒泡ev.stopPropagation()

阻止默认事件+冒泡returnfalse

事件绑定on()

//基本事件

$3 s 6 Q(‘#box’).on(‘click’,function(){})

//一次绑% $ V ) C v定多个事件对应一个处理函数

$(‘#box’).on(‘clickmouseentermouseleave’,function(){})

//绑定多个事件对应多个处理函数对象形式

$(‘#box’).on({

‘cli4 b } f e t h s 6ck’:function(){},

‘dS 3 o S 2 hblclick’D { m # | q 5 n 3:function(D F J){}

})

//自定义事件

$(‘#box’).on(‘hahaha’,function(){}o L _ M S B \ q)

//trigger触发事件

$(‘#box’).trigger(‘hahaha’);

//事件委托

$(‘#list’).on(‘click’,’li’,f+ u Cunction(ev){

console.log($(ev.target).html());

})

//事件的取消绑定

$(‘button:eq(0)’).on(‘click’,function(){

console.lor t 3 S ! ~ G * 1g(1111);

})

$(‘buttp V 3oL H ] R h g ; un:eq(1)’).o u Ron(‘click’,function(){

$(‘button:eq(0)’).offm F S ? r D();

//$(‘button:eq(0)’).off(‘mouseenter’);

//传参取消事件类型

})

//一个事件上绑定多个函数执行—事件的命名空间

$(‘button:eq(0)’).on({

‘click.a’:function(){

cg 1 Q + – D ? ~onsole.log(111);

},

‘click.b’:function(){

console.log(222);

}

})

$(‘buN ` : X Otton:eq(1)’).on(‘click’,function(){

$(‘button:eq(0)’).off(‘click.a’);

})

//只执行一次的y U 3 k ~ [ j o事件

$(‘buttoQ \ ` Pn’).eq(0).one(‘click’,function(){

console.log(‘一次就够了’);

})

//模拟执行一次事件

$(‘button’).eq(0).on(‘click’,function(){

console.log(‘一次就够了’);

$(this).off();

})

合成事件

mouseenter和mouseleave

$(‘#box’).hover(f3 [ / W ) h r t eunction(){

//鼠标移入执D k m I行函数

},functio[ t ? [ On(){

/q n \/鼠标移出4 6 U # 8 d @ L %执行函数

})

$ 下常用的方法

//可以遍历数组,对象,jq元素

$.each(o. M i abj,function(key,value){

console.log(key+’:’+value);

})

还可以$(‘选择器’).each()//遍历元素工具\ [ ) * v T * 0级别

varnewArr=$.map(arr,function(item){

returnitem*item*item;

})有返回值

$.type()输出当前数据类型typeof

$.trim()删除字符串前后的空格

$.inArrayk z 8 a `()indexOf()

$.proxy()功能类似于bind$.proxy()

$.noConflict()给, = o 3 A i w i ($起个别名

$.parseJSON()JSON.parse()

$.makeArray()将伪y i Q e A H ^ [ L数组转成数组。Array.from()

动画

基本动画

显示隐藏

show(

duration动画执行时间-毫秒,

easing运动效果(只有两种swinb F .g慢快慢,linear匀速,

complate运动执行完成S f L P ; ,后的回调)

隐藏hide()

显示隐藏的切换toggle()

$(‘) \ U ^ 0 8 ]#box’).sho/ $ d F 4 !w(1000,function(){

alert(‘执行完毕’);

})

淡入淡出

淡入fadeIn()淡出fadeOut()透明度变化到fadeTo()淡入淡出切换fadeToggle: V # N { X()

$(‘butto` & $ 4 Z ; un’).eq(0).on(‘click’,function(){

$6 E | a(* v g h Q‘#box’).fadeIn(1000);

})

$(‘button’).eq(@ : V K v J x A C2).on(‘click’,function(){

$(‘#box’).fadeV Z 5 ` GTo(1000,j 1 o V 1.5);

})

下拉显示

下拉显示slideDown()上拉隐藏slideUp()切换slideToggle()

$(‘button’).eq(2).on(‘click’,function(){

$(‘#box’).slideTj T % 8 G joggle(1000);

})

animate

animate({属性1:目标值1,属` ~ d r i性2:8 , 7 } r [ (目标值2.。。},duration动画持续时间,easing动画效果,

callback回调)

//累加

$(‘by M : w q g Zutton’).click(fune d C \ oction(){

$(‘#box’).aq O `nimate({width:’{ 0 + c+=O } \ m , x / 8 Q50′},200)

})

//链式运动

$(‘button’).Z 9 2click(function(){

$(‘#] \ 3box’).animate({width:500},1000)

.an6 d Q : H U / kimate({height:300},500)

.& + v ( Fanimate({o– [ . $ D J 4 –pd 3 f q _ + K w ^acity:.5X [ L E 1 =},500)

})

动画队列

q~ Z # D w ) Rueue(function(next){})

s N ! J U r 7其他的操作加入到j t V 7 k T ) Z t动画队列中按顺序来完成

$(‘#box’).animate({wD r 6 / R . @ p Midth:500},1000)

.queue(function(next){

$Z | m B z f 4 3(this).css({background:’blue’});

next();//继续执行后续的动画队列中的操作

})

.animate({height:300},500);

判断是否处于动画状态

$(元素).is\ R s Z L + x(‘:animated’):有动画在执行返回true没有返回false

$(‘#box’).hover(function(){

if(!$(this).is(‘:J W ganimated’)){A 5 x L P 4 z Q –

$(this).animate({height:300},400);

}

}( X P w G $ l,funa O R u y L 9ction(){

$(this).animate({height:50},400);

})

延迟动画

$(‘#box’).animate({width:500},1000), 4 E . 4 ! T N

.delay(2000)

.animate({height:300},500);

停止动画

stop(clearQueue清除动画队列,gotoEnd达到动画最终状态)停止动画

finish()完成动画—所有动画队列的效果达到最终状态(2.x以上版本支持)

//stop停止动画的几种组合

$(‘button’).eq(1).* O |click(function(){

//参数皆为false不清除动画队列不达到最终状态

$(‘#box’).stop(false,false);//默认

//参数皆为true清除动画队Z Y S d +列达到最终状| | J = % ` m E

$(‘#box’).stop(true,true);

//truefalse清除动画队列不达到最终状态

$(‘#box’).stop(true,false);

//falsetrue不清除动画队列达到最终状态

$(‘#box’).stop(false,true);

})

//finish

$(‘button’).eq(2) . ? 1 ~ K I $).click(function(){

$(‘#box’).finish();

})

ajax

$.aU , 1 y e u } ?jax({

url,

cache,//在get下是否启用缓P w [ H

type,//get/post

da4 ] p P j x a d \ta,//上传数据

timeout,//相应超时时间% – 5 /

datatype,//预期返回的数据类型默认text

success,//成功回调

error,

conplate})

跨域

dataTW q – , c \ype设置为jso# ] R A + i rnp

$.ajax({

url:’https://www.baidu.com/sV c S L ~ugrec’,//?prod=pc&wd=aa&cb=fn

type:’get’,

data:{prod:’pc’,wd:’cc’9 ) F : 9},

dataType:’jsonp’,z n Z t N

success:h m * n m u b 6function(res){

console.log(res);

}

})

l\ / d 5 Y [ :oad方法

+ ; ourl传入以后,将下载到数据直接Q ~ Q \ 8 | b T填充到被选中元素的innerHTML中

$(“| ) + [ Gdiv”).load(“2.5 F , & ^ .txt#p1k . 7 w“,function(data,statuE J = a \ GsText,xhr){

da; s z T _ Jta下载到的数据

statusT# _ lext下载的状态success

xhrajax对象

})

cookie

获取

$.cookie(name)

设置

$.cookie(name,v4 – 4 b Nalue)设置name和value

$.coot ~ ] O } Ekie(name,value{

raw:true//value不9 3 : | P )进行编码

//默认falsevalue要进行编码的

})

删除

$.cookie(* z t h d j aname,null);删除cookie

实例

$.coo# v 7 Ikie(“V ( M 3变种人”,”X教授”,{

expires:7,

raw:true

})

jQuery插件

;(function($){

//类级别插L B z g Q件—>将方法拷贝到jq的原型下

$.\ w l | S | & $extend({

‘trimLg ` P ` N b 9 ? Weft’:function(str){

returnstr.repl9 y [ace(/^\s+/,”);

}

})

//对象级别插件拷贝到$.fn的原型下

$.fn.extend({

‘changeBg’:function(select,color){

this.# ? f V ( 5 H * Bchildren(select).css({background:color});

returnthis;

}

})

})(jQuery)

varstr=’aaa’;

console.log($.trimLeft(str));

$(‘ul’).changeBg(‘:odd’,’pink’);

Zepto

基本使用和jq完全一样但是用到的模块要单独引入

$(fS ) F 3 Z q % {unction(){

$(‘#box’).( | Bon(‘tap’,function(){

console.logJ Q z(‘手指点击’);

})

})

zepto和jq的区别

隐藏的元素的U 4 H 9 w . T q获取宽高

jq可以获取隐藏元素的width()l D 3 U h R Q q/height()

zep[ ` h ( K 4to中获取隐藏元素的width()/height()都为0

$(‘#box’).width();/z q c/隐藏的元素在zepto中获取宽高为0

offset()的区别

jq中返回一个对象包含元素到文档上左# d O \ C I =边的距离

zepto中返回一个对象包含元素到文档上左边的距离和元素的宽高

$G b } n D 1 M t |(‘#sub’).offset();S ` H//元素到文档的O , N K g上左边的距离

$(‘#sub’).offset();//zepto中元h W g n B 2 ; &素到文档的上左边的距离和元素的宽高

元素的宽高的获取区别

jq获取元素的宽有4种方法

zepto中只有一个width()和height()方法获取的是占位宽

$(‘#boG ~ :x’).width();//占位宽内容宽+padding+border

innerWidth();//没有

outerWidth();//没有

outerWidth(true);/M U t/没有

touch模块

tap所有的触碰

singleTap手指单击

doubleTap手指双击

swipeswipeLeftswipeDownswipeRightswipeUp手指滑动

longTap手指长按