jquery学习笔记
一、jQuery 简介
1、简介
①一个非常优秀的js库
②89千行的代码,重在封装思想,使用方法会用就可以先查先用。
③zepto从jQuery演变过来的,zepto.js,迷你jquery库,应用于移动端。
④1.8版本之前的jquery兼容ie6
⑤jQuery只是辅助工具, 不能替代js, 方法再全也总是有缺失的
⑥jQuery需要分阶段学习,jquery很庞杂,应由浅入深。
⑦jQuery 应用方法很多,学习时,应该把常用的方法运用熟练,对于一些不常用的方法,我们常常先了解其用途,现用现查API。
⑧Jquery字典:
https://www.jquery123.com/
http://www.css88.com/jqapi-1.9/
2、特殊说明
①$ = jquery
$() = jquery() 函数执行
$(‘div’) 带参数的函数执行
②sizzle.js 如果只是为了查找元素方便,而不用其他方法,就用sizzle.js库
③jquery都是函数式写法
④css写法
第一种:
$('li').css({width:'100px',height:'100px'})
第二种:
$('li').css('width','100px').css('height','100px')
⑤链式操作
$('li').css('width','100px').text('123');
二、选择元素
1、选择方法$(),括号里可以添什么
①css选择器:
eg:
$('div');
$('.demo');
②原生dom
eg:
var oDiv = document.getElementByTagName('div');
$(oDiv);
③jquery对象:
$($('#demo'))
④null/undefined
⑤函数function(){}:立即执行函数
$(function(){
// 写代码
})
⑥selector/content
$('p','#demo')
⑦jquery特有的选择规则 (选出来的是jquery对象)
$('ul>li:first');
$('ul>li:last);
$('ul>li:eq(2)'); eq:索引
$('ul>li:odd/even'); odd奇数;even偶数
⑧filter('.box/[title=hello]');筛选,not():与filter完全取反;
⑨has(); 有元素
⑩find();找到元素
⑪eq();索引值
⑫is()->true/false; 是什么元素
三、取值赋值
html(); text(); css()
当取值时,是取第一个,赋值赋一组
①取值: js ->innerHTML = 123; jq -> html(123)
$('li').text();
$('li').html();
$('li:last').text();
$('li:last').html();
②赋值:
$('li').text('123'); $('li').html('<span>1234</span>');
③取属性值
css()取值相当于 getComputed , 赋值相当于dom.style.***
css()赋值赋一组 ,取值取一个(第一个 颜色会在内部转换成rgb)
$('li').css(width);
四、设置属性
attribute的checked、selected、disabled就是表示该属性初始状态的值,property的checked、selected、disabled才表示该属性实时状态的值(值为true或false)。
取值时,是取第一个,赋值赋一组。
①prop() prop()函数主要依赖的则是JS中原生的对象属性获取和设置方式。
$('li').prop('class','aa')
②attr() attr()函数主要依赖的是Element对象的getAttribute()和setAttribute()两个方法。
$('li').attr('ds','dxb')
③取属性值
$('li').attr('ds'')——>dxb
④checked、selected、disabled
checked 此项是选中状态
<input type="checkbox" checked>
$('li').prop('checked')——>true $('li').attr('checked')——>'checked'
selected 此项是选中状态
<select> <option>1</option> <option selected>2</option> </select>
$('li').prop('selected')——>true $('li').attr('selected')——>'selected'
disabled 输入框不可用
<input type="text" disabled>
$('li').prop('disabled')——>true $('li').attr('disabled')——>'disabled'
五、元素节点
1、兄弟节点
①上一个兄弟节点
$('li:eq(2)').prev()
②下一个兄弟节点
$('li:eq(2)').next()
③此兄弟节点的索引值
$('li:eq(2)').index()
六、添加删除class类名
addClass() 和emoveClass(), 参数可以是function
1、addClass();
2、removeClass();
3、toggleClass();
七、插入删除功能
1、A.insertBefore(B) A插入到 B的前面 (有剪切的功能) 返回A
$('li:eq(4)').insertBefore('li:eq(0)').css('color','red')
'li:eq(4)'颜色变红
2、B.before(A) A在 B的前面 (有剪切的功能) 返回B
$('li:eq(0)').before('li:eq(4)').css('color','green')
3、afterBefore(B)\after(A)
4、C.appendTo(D): C添加到D的里面 (添加到最后一个子元素后) js:appendChild()
5、D.append(C): D里添加C(同上)
6、prependTo prepend (添加到第一个元素前)
7、remove detach 把元素删除后返回 (二者略有不同,detach会连同事件一起返回)
eg:下列例子,当点击item1时,item1消失,当点击item2时,item2消失,当点击button时,item1和item2都添加上,再点击item1不会消失,再点击item2会消失(remove和detach的区别)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .wrapper { height: 300px; width: 300px; background: #eee; } .wrapper div { height: 100px; width: 100px; } .wrapper .item1 { background: red; } .wrapper .item2 { background: blue; } </style> </head> <body> <div class="wrapper"> <div class="item1">item1</div> <div class="item2">item2</div> </div> <button>添加</button> <script src = 'jquery-3.3.1.min.js'></script> <script> $('.item1').click(function () { item1 = $(this).remove(); }) $('.item2').click(function () { item2 = $(this).detach(); }) $('button').click(function () { $('.wrapper').append(item1).append(item2); }) </script> </body> </html>
八 on()绑定事件,off()解除绑定事件
8.1 on绑定事件,没有参数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{padding: 0; margin: 0;} ul{ height: 50px; width: 200px; background: #eee; list-style: none; line-height: 50px; text-align: center; } ul li{ width: 50px; text-align: center; float: left; background: brown; } </style> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> <script src = 'jquery-3.3.1.min.js'></script> <script> $('li').on('click',function(){ console.log($(this).html()); }) </script> </body> </html>
8.2 on绑定事件,带有参数,并监听事件的变化,下例,监听ul的变化,当点击li时,输出li的内容,当新添加li后,点击新添加的li依然可以点击显示li内容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{padding: 0; margin: 0;} ul{ height: 50px; width: 200px; background: #eee; list-style: none; line-height: 50px; text-align: center; } ul li{ width: 50px; text-align: center; float: left; background: brown; } </style> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> <script src = 'jquery-3.3.1.min.js'></script> <script> //此时on('监听事件','事件源对象','执行函数') $('ul').on('click','li',function(){ console.log($(this).html()); }) // 添加新的li,点击时,显示4,因为上述ul绑定了监听事件,所以可以监测到li变化 $('<li>4<li>').appendTo($('ul')); </script> </body> </html>
8.3 off()解除绑定事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{padding: 0; margin: 0;} ul{ height: 50px; width: 200px; background: #eee; list-style: none; line-height: 50px; text-align: center; } ul li{ width: 50px; text-align: center; float: left; background: brown; } </style> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> <script src = 'jquery-3.3.1.min.js'></script> <script> $('li').on('click',function(){ console.log($(this).html()); }) $('li').off('click'); </script> </body> </html>
8.4 解除绑定事件,并有事件源,下例解绑第三
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{padding: 0; margin: 0;} ul{ height: 50px; width: 200px; background: #eee; list-style: none; line-height: 50px; text-align: center; } ul li{ width: 50px; text-align: center; float: left; background: brown; } </style> </head> <body> <ul> <li class="li1">1</li> <li class="li2">2</li> <li class="li3">3</li> </ul> <script src = 'jquery-3.3.1.min.js'></script> <script> $('ul').on('click','.li1',function(){ console.log('li1'); }) $('ul').on('click','.li2',function(){ console.log('li2'); }) $('ul').on('click','.li3',function(){ console.log('li3'); }) $('ul').off('click','.li3'); </script> </body> </html>
8.5 解绑绑定的函数,下列解除li1上面的a函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{padding: 0; margin: 0;} ul{ height: 50px; width: 200px; background: #eee; list-style: none; line-height: 50px; text-align: center; } ul li{ width: 50px; text-align: center; float: left; background: brown; } </style> </head> <body> <ul> <li class="li1">1</li> <li class="li2">2</li> </ul> <script src = 'jquery-3.3.1.min.js'></script> <script> function a(){ console.log('a'); } function b(){ console.log('b'); } $('ul').on('click','.li1', a); $('ul').on('click','.li1', b); $('ul').off('click','.li1',a);//解除li1上面的a函数 </script> </body> </html>
9 one() 只绑定一次事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{padding: 0; margin: 0;} ul{ height: 50px; width: 200px; background: #eee; list-style: none; line-height: 50px; text-align: center; } ul li{ width: 50px; text-align: center; float: left; background: brown; } </style> </head> <body> <ul> <li class="li1">1</li> <li class="li2">2</li> </ul> <script src = 'jquery-3.3.1.min.js'></script> <script> function a(){ console.log('a'); } function b(){ console.log('b'); } $('ul').one('click','.li1', a); </script> </body> </html>
九 滚轮滚出去的尺寸
9.1 scrollTop() 滚动出去的高度: $(window).scrollTop();
scrollLeft()滚动出去的宽度
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{padding: 0; margin: 0;} body{ height: 1000px; width: 1000px; } ul{ height: 50px; width: 200px; background: #eee; list-style: none; line-height: 50px; text-align: center; } ul li{ width: 50px; text-align: center; float: left; background: brown; } </style> </head> <body> <ul> <li class="li1">1</li> <li class="li2">2</li> </ul> <script src = 'jquery-3.3.1.min.js'></script> <script> $(window).scroll(function(){ console.log($(window).scrollTop()); console.log($(window).scrollLeft()); }) </script> </body> </html>
9.2 scrollTop用处: position:fixed 兼容性写法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{padding: 0; margin: 0;} body{ height: 1000px; width: 1000px; } ul{ /* position 改为absolute */ position: absolute; top: 100px; left: 0px; height: 50px; width: 200px; background: #eee; list-style: none; line-height: 50px; text-align: center; } ul li{ width: 50px; text-align: center; float: left; background: brown; } </style> </head> <body> <ul> <li class="li1">1</li> <li class="li2">2</li> </ul> <script src = 'jquery-3.3.1.min.js'></script> <script> $(window).scroll(function(){ $('ul').css({top: $(window).scrollTop() + 100,left:$(window).scrollLeft()}); }) </script> </body> </html>
十 尺寸
width height 包含: content
innerWidth innerHeight 包含: content padding
outerWidth outerHeight 包含: content padding border
outerWidth(true) outerHeight(true) : 参数为true的时候包含: content padding border margin
div{ height: 100px; width: 100px; padding: 1px; margin: 10px; background: red; border:10px solid black; }
结果:
注意:
创建标签:$('<div></div>')
单标签写法: $('<div>'), $('<div/>')
创建多个标签:
$("<div class = 'wrapper'><p><span></span></p></div>").appendTo($('body'));
十一 关于事件
1、事件对象 e
e.pageX e.pageY相对于文档而言
e.clientX e.clientY相对于浏览器窗口而言
e.screenX e.screenY相对于电脑屏幕而言
e.which哪个键或按钮 keydown
e.button哪个鼠标按键被按下 mousedown
2、取消默认事件和冒泡
e.preventDefault()取消默认事件;
$('input').on('mousedown contextmenu',function(e){ e.preventDefault(); console.log(e.button); })
e.stopPropagation()取消冒泡;
<body> <p><span>span </span>p</p> <script src='jquery-3.3.1.min.js'></script> <script> $('p').click(function(e){ console.log('p'); }) $('span').click(function(e){ e.stopPropagation(); console.log('span'); }) </script>
即取消默认事件,又取消冒泡:return false
<body> <p> pppp <a href="http://www.baidu.com">百度一下</a> </p> <script src='jquery-3.3.1.min.js'></script> <script> $('p').click(function(e){ console.log('p'); }) $('a').click(function(e){ console.log('百度一下'); return false; console.log('这个代码不执行'); }) </script> </body>
3.one(); 绑定事件:只绑定 一次
4.定位
offset().left/top 相对于文档
position().left/top 相对于有定位的父级
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> * { padding: 0; margin: 0; } .wrapper{ position: relative; left: 0px; top: 100px; } .box{ position: absolute; left: 100px; top: 100px; } </style> </head> <body> <div class="wrapper">wrapper <div class="box">box</div> </div> <script src='jquery-3.3.1.min.js'></script> </body> </html>
结果:
5.parent(); 返回最近的直接父元素,可以有参数,返回一个
offsetParent(); 返回最近的有定位的父级,如果都没有,找到头,返回html,里面不能传参数,返回一个
parents();返回所有父级,可以有参数parents(‘div’),返回所有符合的节点,可能返回多个
closest() 查找最近的祖先节点, 必须有参数selector ,能把自己选中,只能返回一个
6.val(); 可以返回value值
7、each(); obj.each(function (index, elem) {
console.log(index);
console.log(elem);
})循环遍历,可以是jquery对象
或者:obj.each(function (index) {
console.log(index);
console.log(this);})
8、end() 回退操作,将第一个li设置成红色,第五个li设置成蓝色
$('li').eq(0).css({color:'red'}).end().eq(4).css({color:'blue'});
9、siblings() 当前元素节点的所有兄弟节点
prevAll() 当前元素上面的所有兄弟节点
nextAll() 当前元素下面的所有兄弟节点
prevUntil() nextUntil ->掐头去尾选中元素,传jquery对象或dom
10、clone方法
clone() 克隆节点 参数为true的时候 事件也能克隆
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> </style> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> <script src='jquery-3.3.1.min.js'></script> <script> var a = $('li:eq(0)').clone(); $('ul').append(a); </script> </body> </html>
带有参数true
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> </style> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> <script src='jquery-3.3.1.min.js'></script> <script> $('li:eq(0)').click(function(){ console.log(888); }) var a = $('li:eq(0)').clone(true); $('ul').append(a); </script> </body> </html>
11、wrap包裹
wrap(在外面包裹)循环遍历包裹, 参数 function
<body> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> <script src='jquery-3.3.1.min.js'></script> <script> $('li').wrap('<div>'); </script> </body>
结果:
wrapInner(在里面包裹)循环遍历包裹 ,参数 function
<body> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> <script src='jquery-3.3.1.min.js'></script> <script> $('li').wrapInner('<span>'); </script> </body>
结果:
wrapAll 包裹选中的所有元素 会破坏结构
<body> <ul> <li>1</li> <li>2</li> <li>3</li> <span>span</span> </ul> <div> <li>4</li> </div> <script src='jquery-3.3.1.min.js'></script> <script> $('li').wrapAll('<div>'); </script> </body>
结果:
unwrap解除包裹,结构化标签不能删除
<body> <ul> <li>1</li> <li>2</li> <li>3</li> <span>span</span> </ul> <div> <li>4</li> </div> <script src='jquery-3.3.1.min.js'></script> <script> $('li').unwrap(); </script>
结果:
$('li').unwrap().unwrap();
结果,删除包裹,最远到body,body是结构化标签,不会被删除
12、add()
A.add(B) 选中元素A和B集中操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> </style> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> <span>span</span> </ul> <div> <li>4</li> </div> <script src='jquery-3.3.1.min.js'></script> <script> $('li:eq(0)').add($('li:eq(2)')).css({color:'red'}); </script> </body> </html>
结果:
13、slice();
$('li').slice(0,2)截取 算头不算尾
<body> <ul> <li>1</li> <li>2</li> <li>3</li> <span>span</span> </ul> <div> <li>4</li> </div> <script src='jquery-3.3.1.min.js'></script> <script> $('li').slice(0,2).css({color:'red'}); </script> </body>
结果:
14、empty();清空html
15、serialize 串联表单数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> </style> </head> <body> <!-- form用来提交表单数据,但是没提交一次,页面就会刷新一次,不好用,用 --> <form action=""> <input type="text" name = "username"> <input type="text" name = "age"> <input type="submit"> </form> <script src='jquery-3.3.1.min.js'></script> <script> $('input:eq(2)').click(function(e){ e.preventDefault();//取消form提交表单数据默认事件 console.log($('form').serialize()); // 用.serialize()串联表单数据,提交给后台用 }) </script> </body> </html>
结果:
serializeArray 串联数据成数组
十二、动画animation
animate( properties [, duration] [, easing] [, complete] )有四个参数:
- properties:一组包含作为动画属性和终值的样式属性和及其值的集合
- duration(可选):动画执行时间,其值可以是三种预定速度之一的字符串("slow", "normal", or "fast")或表示动画时长的毫秒数值(如:1000)
- easing(可选):要使用的过渡效果的名称,如:"linear" 或"swing"
- complete(可选):在动画完成时执行的函数
12.1 简单动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div{ width: 100px; height: 100px; background: pink; } </style> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> $('div').animate({width:200,height:200,opacity:0.4},1000); </script> </body> </html>
12.2 速度方式:linear、swing
$('div').animate({width:200,height:200,opacity:0.4},1000,'linear');
$('div').animate({width:200,height:200,opacity:0.4},1000,'swing');
速度方式的插件:jquery.easing.js
12.3 连续动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .wrapper{ position: relative; height: 500px; width: 500px; } .wrapper div{ position: absolute; width: 100px; height: 100px; } .wrapper .dg{ top: 0px; left: 0px; background: blue; z-index: 3; } .wrapper .ds{ top: 0px; left: 200px; background: red; } .wrapper .es{ top: 200px; left: 200px; background: pink; } </style> </head> <body> <div class="wrapper"> <div class="dg">div1</div> <div class="ds">div2</div> <div class="es">div3</div> </div> <script src='jquery-3.3.1.min.js'></script> <script> $('.dg').animate({left:200},2000,'swing').animate({left:200,top:200},2000,'linear'); </script> </body> </html>
12.4 停止动画 stop(参数一,参数二)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .wrapper{ position: relative; height: 500px; width: 500px; } .wrapper div{ position: absolute; width: 100px; height: 100px; } .wrapper .dg{ top: 0px; left: 0px; background: blue; z-index: 3; } .wrapper .ds{ top: 0px; left: 200px; background: red; } .wrapper .es{ top: 200px; left: 200px; background: pink; } </style> </head> <body> <div class="wrapper"> <div class="dg">div1</div> <div class="ds">div2</div> <div class="es">div3</div> </div> <script src='jquery-3.3.1.min.js'></script> <script> $('.dg').animate({left:200},2000,'swing').animate({left:200,top:200},2000,'linear'); $(document).click(function(){ $('.dg').stop(); }) </script> </body> </html>
第一个参数:是否停止后续动画,false:不停止,true:停止
第二个参数:是否立即到达当前目标点,false:不到达,true:到达
stop(),相当于stop(false,false)阻止当前运动,继续后续运动
stop(true) 阻止后续所有运动,相当于stop(true,false)
stop(true, true) 停止当前所有运动 停在当前目标点
stop(false, true) 跳过当前运动并到达目标点,执行后续运动
12.5 finish()停止当前运动 并且达到最后运动的目标点,相当于stop(),stop(false,false)
12.6 delay() 延迟 参数 延迟时间
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .wrapper{ position: relative; height: 500px; width: 500px; } .wrapper div{ position: absolute; width: 100px; height: 100px; } .wrapper .dg{ top: 0px; left: 0px; background: blue; z-index: 3; } .wrapper .ds{ top: 0px; left: 200px; background: red; } .wrapper .es{ top: 200px; left: 200px; background: pink; } </style> </head> <body> <div class="wrapper"> <div class="dg">div1</div> <div class="ds">div2</div> <div class="es">div3</div> </div> <script src='jquery-3.3.1.min.js'></script> <script> $('.dg').animate({left:200},2000,'swing').delay(3000).animate({left:200,top:200},2000,'linear'); $(document).click(function(){ $('.dg').stop(); }) </script> </body> </html>
十三、滑动
slideUp()通过使用滑动效果,隐藏被选元素,如果元素已显示出来的话。slideUp(speed,callback)
slideDown() 方法通过使用滑动效果,显示隐藏的被选元素。
slideToggle(speed, callback)
通过使用滑动效果(高度变化)来切换元素的可见状态。如果被选元素是可见的,则隐藏这些元素,如果被选元素是隐藏的,则显示这些元素
十四、淡入淡出
fadeIn()淡入
fadeOut()淡出
fadeToggle()切换淡入淡出
十五、trigger主动触发事件
trigger 主动触发事件 参数 1.事件类型 2.参数
trigger 传递参数 trigger('click', data); $('li').on('click', function (e,data) {})参数是在 事件处理函数的第二个参数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 100px; height: 100px; background: blue; } </style> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> $('div').click(function(event,a){ $(this).animate({width:$(this).width() + a}); }) $('div').trigger('click',[100]) </script> </body> </html>
trigger可以触发自定义事件 eat
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 100px; height: 100px; background: blue; } </style> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> $('div').on('eat',function(event,a){ $(this).animate({width:$(this).width() + a}); }) var timer = setInterval(function(){ if($('div').width() > 300){ $('div').remove(); clearInterval(timer); } else{ $('div').trigger('eat',100) } },500) </script> </body> </html>
十六、工具方法
工具方法:以$.*** jQuery.***这种方式调用,此类方法定义在jQuery函数上面
实例方法:$(‘div’).html()实例方法,此类方法定义在原型上
16.1 $.type() 判断参数的数据类型
原生js判断类型的三种方法
1.arr instanceof Array
2.arr.constructor == Array
3.Object.prototype.toString.call(arr)
1,2两种有局限性,不精确,3比较通用
16.2 $.trim 消除前后空格
<script> var str = ' dg '; console.log('|'+$.trim(str)+'|'); </script>
16.3 $.proxy()
$.proxy()改变this指针方向 参数1:function,参数2:函数执行期上下文
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 100px; height: 100px; background: blue; } </style> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> var obj = { init :function(){ this.bindEvent(); }, bindEvent:function(){ $('div').click($.proxy(this.cb,this,1,2)); }, cb:function(a,b){ console.log(a + " " + b); } } obj.init(); </script> </body> </html>
16.4 $.noConflict() 防止冲突
在很多JavaScript库使用$作为一个函数或变量名,正如jquery做的一样。如果我们需要同时使用jQuery和其他JavaScript库,我们可以使用$.noConfilct把$控制权交给其他库。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 100px; height: 100px; background: blue; } </style> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> var b = $.noConflict(); b('div').click(function(){ console.log(123); }) </script> </body> </html>
16.5 $.parseJSON()
$.parseJSON() 函数用于将符合标准格式的的JSON字符串转为与之对应的JavaScript对象。
$.parseJSON() 字符转换成json 要求非常严格,外部是单引号,内部属性是双引号 不需要回车符
var obj = jQuery.parseJSON('{"name": "wang","age":18}');
16.6 $.makeArray()
$.makeArray 把类数组转换成数组
<script> var array = { name:"wang", age:18, length:2 } var arr = $.makeArray(array); </script>
17、jQuery 高级
$.extend() 插件扩展1提供新的jQuery工具方法
$.fn.extend()插件扩展2提供新的jQuery实例方法
$.extend()还可以合并对象,浅拷贝,obj2改变,obj1也变
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> var obj1 = { person1:{ name:'wang', age:20 }, number1:1 } var obj2 = { person2:{ name:'tong', age:29 }, number2:2 } $.extend(obj1,obj2); </script> </body> </html>
$.extend(true),加上参数true,深拷贝,obj2和新的obj1相互独立
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> var obj1 = { person1:{ name:'wang', age:20 }, number1:1 } var obj2 = { person2:{ name:'tong', age:29 }, number2:2 } $.extend(true,obj1,obj2); obj2.person2.name = 'guo' console.log(obj2); </script> </body> </html>
结果:
18、var cb = $.Callbacks() 回调函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> function fn1(){ console.log('fn1') } function fn2(){ console.log('fn2') } function fn3(){ console.log('fn3') } //$.Callbacks()可以管理函数队列 var cb = $.Callbacks(); // 调用用add() cb.add(fn1,fn2,fn3); //执行用fire cb.fire(); </script> </body> </html>
18.1 $.Callbacks() 四个参数:
once 只执行一次fire()方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> function fn1(){ console.log('fn1') } function fn2(){ console.log('fn2') } function fn3(){ console.log('fn3') } //$.Callbacks()可以管理函数队列 var cb = $.Callbacks('once'); // 调用用add() cb.add(fn1,fn2,fn3); //执行用fire cb.fire(); cb.fire(); cb.fire(); </script> </body> </html>
memory 记忆
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> function fn1(){ console.log('fn1') } function fn2(){ console.log('fn2') } function fn3(){ console.log('fn3') } //$.Callbacks()可以管理函数队列 var cb = $.Callbacks('memory'); // 调用用add() cb.add(fn1,fn2); //执行用fire cb.fire(); cb.add(fn3); </script> </body> </html>
unique oCb.add(aa,aa,aa);只执行一次aa
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> function fn1(){ console.log('fn1') } function fn2(){ console.log('fn2') } function fn3(){ console.log('fn3') } //$.Callbacks()可以管理函数队列 var cb = $.Callbacks('unique'); // 调用用add() cb.add(fn1,fn1); //执行用fire cb.fire(); </script> </body> </html>
stopOnFalse
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> function fn1(){ console.log('fn1'); } function fn2(){ console.log('fn2'); return false; } function fn3(){ console.log('fn3'); } //$.Callbacks()可以管理函数队列 var cb = $.Callbacks('stopOnFalse'); // 调用用add() cb.add(fn1,fn2); cb.add(fn3); //执行用fire cb.fire(); </script> </body> </html>
结果:
混合使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> function fn1(){ console.log('fn1') } function fn2(){ console.log('fn2') } function fn3(){ console.log('fn3') } //$.Callbacks()可以管理函数队列 var cb = $.Callbacks('unique memory'); // 调用用add() cb.add(fn1,fn1); //执行用fire cb.fire(); cb.add(fn3); </script> </body> </html>
19、$.Defferred()
$.Deferred ()延迟对象,相当于有状态的Callbacks();
添加函数
done fail progress
触发函数:
resolve reject notify
oDf.resolve() -> done(function(){})
oDf.reject() -> fail(function(){})
oDf.reject() -> progress(function() {})
done, fail ----> once memory
progress ----> memory
nofity 进行时的意思,成功失败的结果还没出现,所以此函数,触发后 done 和 fail 还可以触发一个
done fail 触发一个之后就不能触发其他的了 ---> 最终状态已经告知
$.deferred .promise() ------> 不能触发函数(无状态)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> function aa(){ var dfd = $.Deferred(); setInterval(function(){dfd.notify()},500); setInterval(function(){dfd.reject()},1000); setInterval(function(){dfd.resolve()},2000); return dfd.promise(); } var cb = aa(); cb .done(function(){ console.log('OK'); }) .fail(function(){ console.log('ERROR'); }) .progress(function(){ console.log('doing'); }) </script> </body> </html>
$.when() ---->返回的是延迟对象 参数也是延迟对象 当参数延迟对象全部触发done的时候最后会触发when返回延迟对象的done函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> function aa(){ var dfd = $.Deferred(); dfd.reject(); return dfd.promise(); } function bb(){ var dfd = $.Deferred(); dfd.resolve(); return dfd.promise(); } var cb = aa(); var cb2 = bb(); $.when(cb,cb2) .done(function(){ console.log('OK'); }) .fail(function(){ console.log('ERROR'); }) .progress(function(){ console.log('doing'); }) </script> </body> </html>
结果:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div></div> <script src='jquery-3.3.1.min.js'></script> <script> function aa(){ var dfd = $.Deferred(); dfd.resolve(); return dfd.promise(); } function bb(){ var dfd = $.Deferred(); dfd.resolve(); return dfd.promise(); } var cb = aa(); var cb2 = bb(); $.when(cb,cb2) .done(function(){ console.log('OK'); }) .fail(function(){ console.log('ERROR'); }) .progress(function(){ console.log('doing'); }) </script> </body> </html>
结果: