认识jQuery
DOM对象和jQuery对象
获取方法
1. DOM对象:用原生js获取过来的对象就是DOM对象
2.关于jQuery对象:用jQuery方式获取
获取过来的对象是jQuery对象。本质: 通过**$**把DOM元素进行了包装
3. 关于jQuery对象只能使用jQuery 方法
DOM对象则使用原生的JavaScirpt属性和方法
相互转换
1. DOM 对象转换为 jQuery 对象
使用$包裹就会改变
2. 让jQuery 转换为 DOM 对象
- $(‘video’)[0]
- $(‘video’).get(0)
使用jQuery选择器
层级选择器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="./jQuery-min.js"></script> <style>
</style> </head>
<body> <div>我是div</div> <div class="nav">我是nav div</div> <p>我是p</p> <ol> <li>我是ol的</li> <li>我是ol的</li> <li>我是ol的</li> <li>我是ol的</li> </ol> <ul> <li>我是ul的</li> <li>我是ul的</li> <li>我是ul的</li> <li>我是ul的</li> </ul> <script> $(function() { $('.nav') console.log($('.nav')); $('ul li') console.log($('ul li')); }) </script> </body>
</html>
|
筛选选择器
$(‘ul li:first’).css(‘color’, ‘red’);
$(‘ul li:last’).css(‘color’, ‘red’);
$(‘ul li:eq(2)’).css(‘color’, ‘blue’);
$(‘ul li:odd’).css(‘background’, ‘gray’);
$(‘ul li:even’).css(‘background’, ‘pink’);
关于jQuery’父,子,兄’选择
1.父 $(‘.son’).parent();
2.子 $(‘.nav’).children(‘p’)
(1) 亲儿子 children( ) 类似于子代选择器 ul>li
$(‘.nav’).children(‘p’).css(‘color’, ‘red’);
(2) 可以选择所有后代 包括儿子孙子find( ) 类似于后代选择器
$(‘.nav’).find(‘p’).css(‘background’, ‘gray’);
3.兄
(1)siblings( ) 除了自身元素之外的所有亲兄弟
$(‘ol .item’).siblings(‘li’).css(‘color’, ‘red’);
(2)nextAll( ) 当前元素之后所有同辈元素
$(‘ol .item’).nextAll(‘li’).css(‘background’, ‘gray’);
(3)prevAll( ) 当前元素之前所有同辈元素
$(‘ol .item’).prevAll(‘li’).css(‘background’, ‘gray’);
(4)eq 第几个元素
$(‘ol li:eq(2)’).css(‘font-weight’, ‘900’)
(5)利用选择方法的方式选择 推荐此方法
$(‘ul li’).eq(2).css(‘color’, ‘red’);
关于jQuery隐式迭代
jQuery对元素集合的操作不需要再利用for循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="./jQuery-min.js"></script> <style>
</style> </head>
<body> <div>演示文本</div> <div>演示文本</div> <div>演示文本</div> <div>演示文本</div> <ul> <li>相同操作</li> <li>相同操作</li> <li>相同操作</li> </ul> <script> $('div'); console.log($('div'));
$('div').css('background', 'pink');
$('ul li').css('color', 'red'); </script> </body>
</html>
|
排他思想案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="./jQuery-min.js"></script> <style></style> </head>
<body> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <script> $(function() { $('button').click(function() { $(this).css('background', 'pink'); $(this).siblings('button').css('background', ''); }); }) </script> </body>
</html>
|
淘宝精品服饰案例 index()获取数组索引方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="./jQuery-min.js"></script> <style> * { margin: 0; padding: 0; list-style: none; } .wrapper { width: 250px; height: 250px; background-color: aqua; margin: 0px auto; } .wrapper ul { float: left; display: block; height: 100%; width: 50px; background-color: aquamarine; } .wrapper ul li { height: 33.3%; } .wrapper ul li :hover { background-color: gray; color: white; } .wrapper ul li a { width: 100%; height: 100%; display: block; text-decoration: none; font-size: 30px; line-height: 83px; text-align: center; } #content { float: right; margin-top: 30px; } #content div:not(:first-child) { display: none; } </style> </head>
<body> <div class="wrapper"> <ul id="left"> <li><a href="#">A</a></li> <li><a href="#">B</a></li> <li><a href="#">C</a></li> </ul> <div id="content"> <div> <a href="#"><img src="../../img/图片/cs (1).webp" width="200" height="200"></a> </div> <div> <a href="#"><img src="../../img/图片/cs (2).webp" width="200" height="200"></a> </div> <div> <a href="#"><img src="../../img/图片/cs (3).webp" width="200" height="200"></a> </div> </div> </div> <script> $(function() { $('#left li').mouseover(function() { var index = $(this).index(); $('#content div').eq(index).show().siblings().hide(); }) }) </script> </body>
</html>
|
链式编程
为了使代码更加简洁,推崇使用链式编程思想
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <body> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <button>快速</button> <script> $(function() { $('button').click(function() {
$(this).css('color', 'red').siblings('button').css('color', '');
}); }) </script> </body>
|
修改css样式
通过.css({})方法修改
修改样式逗号隔开,引号引入,当值为数字可以不加引号
1
| $('div').css('width', '300px');
|
以对象的形式修改可以不加引号
- 数字可以不用加引号
- 组合属性采取驼峰命名法
- 值不为数字就需要加引号
1 2 3 4 5 6 7 8
| $('div').css({ width: 400, height: 400, backgroundColor: 'red' });
|
设置类名方法
1.添加类 addClass()
1 2 3
| $('div').click(function() { $(this).addClass('current'); });
|
2.删除类 removeClass()
1 2 3
| $('div').click(function() { $(this).removeClass('current'); });
|
3.切换类 toggleClass()
1 2 3
| $('div').click(function() { $(this).toggleClass('current'); })
|
使用jQuery的动态效果
显示与隐藏
- show([时间],[function(){}]) 显示
- hide([时间],[function(){}]) 隐藏
- toggle([时间],[function(){}]) 切换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| $(function() { $('button').eq(0).click(function() { $('div').show(1000, function() { alert(1); }); })
$('button').eq(1).click(function() { $('div').hide(1000, function() { alert(1); }); })
$('button').eq(2).click(function() { $('div').toggle(1000); }) })
|
滑动
- slideDown([时间],[function(){}]);
- slideUp([时间],[function(){}]);
- slideToggle([时间],[function(){}]);
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $(function() { $('button').eq(0).click(function() { $('div').slideDown(100); }) $('button').eq(1).click(function() { $('div').slideUp(500); }) $('button').eq(2).click(function() { $('div').slideToggle(500); }) })
|
渐入渐出
- fadeIn([时间],[function(){}]);
- fadeOut([时间],[function(){}]);
- fadeToggle([时间],[function(){}]);
- fadeTo([时间],[透明度],[function(){}]);
自定义动画
- animate([{ css属性 }],[时间]);
1 2 3 4 5 6 7 8 9 10
| $(function() { $('button').click(function() { $('div').animate({ left: 200, top: 200, opacity: 0.5, width: 500, }, 200); }) })
|
停止排队
在编写动画相关的事件触发时,会遇到一个bug,当多次触发事件时,事件会发生累积堆叠。造成鬼畜。通过stop()
可以解决此bug
- mouseover 鼠标经过
- mouseout 鼠标离开
- hover 就是鼠标经过离开的复合写法
- 事件切换hover如果只写一个函数,那么鼠标经过和鼠标离开都会触发这个函数
stop()方法必须写在动画前面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="./jQuery-min.js"></script> <style> * { margin: 0; padding: 0; list-style: none; text-decoration: none; } .nav { width: 600px; height: 50px; margin: 0 auto; } .nav>li { height: 100%; width: 150px; float: left; font-size: 28px; background-color: gray; } .nav>li>a { display: block; height: 100%; width: 150px; line-height: 50px; text-align: center; color: white; font-weight: 900; } .nav>li li { height: 50px; background-color: gray; text-align: center; border: 1px solid gray; } .nav>li li a { color: white; } .nav li ul { display: none; } </style> </head>
<body> <ul class="nav"> <li> <a href="#">微博</a> <ul> <li> <a href="">私信</a> </li> <li> <a href="">评论</a> </li> <li> <a href="">@我</a> </li> </ul> </li> <li> <a href="#">微博</a> <ul> <li> <a href="">私信</a> </li> <li> <a href="">评论</a> </li> <li> <a href="">@我</a> </li> </ul> </li> <li> <a href="#">微博</a> <ul> <li> <a href="">私信</a> </li> <li> <a href="">评论</a> </li> <li> <a href="">@我</a> </li> </ul> </li> <li> <a href="#">微博</a> <ul> <li> <a href="">私信</a> </li> <li> <a href="">评论</a> </li> <li> <a href="">@我</a> </li> </ul> </li> </ul> <script> $(function() {
$('.nav>li').hover(function() { $(this).children('ul').stop().slideToggle(200); }) }) </script> </body>
</html>
|
使用jQuery的属性操作
1.element.prop(‘属性名’)获取元素固有属性值
element.prop(‘属性名’,{值})
不仅可以获取元素固有属性值,也可以设置元素固有属性值
2.元素自定义属性attr()
element.attr(‘属性名’,{值})
3.数据缓存data()
这个里面的数据是存放在元素的内存里 不会显示在标签上
element.data(‘属性名’,{值});
这个方法获取data-index h5自定义属性 第一个不用写data- 而且返回的是数字型
使用jQuery更改文本内容
1.获取设置元素内容 html()
相当于原生innerHTML
.html({值});
2.获取设置元素文本内容 text()
相当于原生 innerText
.text({值});
3.获取设置表单值 val()
.val({值});
关于jQuery遍历方法
1.each() 方法遍历元素
each( function([index,domEle]){} )
- 回调函数第一个参数一定是索引号 可以自己指定index索引号名称
- 回调函数第二个参数一定是DOM元素
1 2 3 4 5 6 7 8 9 10 11 12 13
| var sum = 0; var arr = ['red', 'green', 'blue']; $('div').each(function(index, domEle) { $(domEle).css('color', arr[index]);
})
|
2.$.each() 方法遍历元素
主要用于遍历数据,处理数据
1 2 3 4 5 6
| $.each($('div'), function(i, ele) { console.log(i); console.log(ele); });
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
$.each(arr, function(i, ele) { console.log(i); console.log(ele); })
$.each({ name: 'andy', age: 18 }, function(i, ele) { console.log(i); console.log(ele); })
|
使用jQuery创建添加删除元素
1.创建元素
var li = $('<li>我是后来li</li>');
2.添加元素
内部添加
在指定元素内部添加新元素
- $(‘ul’).prepend(li); 内部添加且放到内容最前面
- $(‘ul’).append(li); 内部添加且放到内容最后面
外部添加
在指定元素的上面或者下面添加新的元素
3.删除元素
删除指定元素或者其子元素
- $(‘ul’).remove(); 可以删除匹配的元素 自杀
- $(‘ul’).empty(); 可以删除匹配元素的子节点 孩子删除
- $(‘ul’).html(‘ ‘); 可以删除匹配元素的子节点 孩子删除 同上
关于jQuery尺寸方法
( ) 为空返回原始大小
(数值) 含有值就改变
width() / height()
innerWidth() / innerHeight()
- 获取设置元素width和height + padding 大小
outerWidth() / outerHeight()
- 获取设 置元素width和height + padding + border大小
outerwidth(true) / outerHeight(true)
- 获取设置width和height + padding + border + margin
关于jQuery位置和被卷去方法
位置属性
1.获取/设置距离文档的位置(偏移) offset
1 2 3 4 5 6 7 8 9
| console.log($('.son').offset()); console.log($('.son').offset().top);
|
2.获取(不能设置)距离带有定位父级位置(偏移) position 如果没有带有定位的父级,则以文档为准
1
| console.log($('.son').position());
|
被卷去的部分
被卷去的头部scrollTop( )
被卷去的左侧scrollLeft( )
事件处理on()/off()
on()
on绑定多个事件
对一个元素绑定事件需要点多次,非常繁琐,使用on()方法就可以对一个元素进行多个事件绑定,非常银杏化。
1 2 3 4 5 6 7 8 9 10 11
| $('div').on({ mouseenter: function() { $(this).css('background', 'skyblue'); }, click: function() { $(this).css('background', 'black'); }, mouseleave: function() { $(this).css('background', 'pink'); } });
|
on可以实现事件委托(委派)
1 2 3 4
| $('ul').on('click', 'li', function() { alert(11); });
|
on可以给未来动态创建的元素绑定事件
1 2 3 4 5
| $('ol').on('click', 'li', function() { alert(11); }) var li = $("<li>我是后来创建的</li>"); $('ol').append(li);
|
- 因为li是后来创建的,用原始方法绑定事件无法触发
- 可以通过on给父级ol绑定事件,这样后来生成的li就有了click事件
off()
1.事件绑定off
off()
1 2 3
| $('div').off('click'); $('ul').off('click', 'li');
|
2.只触发一次时间
one()
1 2 3
| $('p').one('click', function() { alert(22); })
|
自动触发
1.元素.click()
$('div').click();
2.元素.trigger(‘事件’)
$('div').trigger('click');
3.元素.triggerHandler(‘事件’)
不会触发元素默认行为
比如说,如果点击元素表单,则不会触发表单的光标
关于jQuery事件对象
1 2 3 4 5 6 7 8 9 10 11
| $(function() { $(document).on('click', function() { console.log('点击了document'); }); $('div').on('click', function(event) { console.log('点击了div'); event.stopPropagation(); }); })
|
使用jQuery对象拷贝
1. 浅拷贝
把原来对象里面的复杂数据类型地址拷贝给目标对象
$.extend([拷贝的对象],[被拷贝的对象]);
1 2 3 4 5 6 7
| var targetObj = {}; var obj = { id: 1, name: 'andy', }; $.extend(targetObj, obj); console.log(targetObj);
|
如果被拷贝的对象中有相同的属性值:
如果原先有属性 那么拷贝的属性就会
1 2 3 4 5 6 7 8 9
| var targetObj = { id: 0 }; var obj = { id: 1, name: 'andy', }; $.extend(targetObj, obj); console.log(targetObj);
|
2.深拷贝
$.extend(true,[拷贝的对象],[被拷贝的对象]);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var targetObj = { id: 0, msg: { sex: '男', } }; var obj = { id: 1, name: 'andy', msg: { age: 18, } }; $.extend(true, targetObj, obj); console.log(targetObj); targetObj.msg.age = 20; console.log(targetObj); console.log(obj);
|
多库共存
其实$()是jQuery自己封装的一个函数方法,可以通过 var suibian = jQuery.noConflict();
来改变$符号
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $(function() { function $(ele) { return document.querySelector(ele); }; console.log($('div')); jQuery.each();
var suibian = jQuery.noConflict(); suibian('span'); console.log(suibian('span')); })
|