JavaScript——jQuery

时间:2024-10-07 07:08:38

目录

一、jQuery概述

1. JavaScript库

2. jQuery概述

3. jQuery优点

4. jQuery的入口函数

5. jQuery的*对象 $

6. jQuery对象和DOM对象

二、jQuery常用API

1. jQuery选择器

1.1 隐式迭代

1.2 jQuery筛选选择器  

1.3 jQuery筛选方法(重点)

1.4 jQuery排他思想

1.5 链式编程

2. jQuery样式操作

2.1 操作css方法

2.2 设置类样式方法

案例——tab栏切换

2.3 类操作与className区别

三、jQuery效果

1. 显示隐藏效果

1.1 显示语法规范

1.2 隐藏语法规范

1.3 切换语法规范

1.4 显示参数

2. 滑动效果

2.1 下滑效果语法

2.2 上滑效果语法

2.3 滑动切换

2.4 显示参数

3. 事件切换

4. 动画队列及停止方法

4.1 动画或效果队列

4.2 停止排队

5. 淡入淡出效果

6. 自定义动画

6.1 语法

6.2 参数

7. jQuery属性操作

7.1 设置或获取元素固有属性prop

7.2 自定义属性attr

7.3 数据缓存data

案例——购物车-全选

8. jQuery文本属性值

8.1 普通元素内容html()(相当于原生innerHTML)

8.2 普通元素文本内容text()(相当于原生innerText)

8.3 表单的值val()(相当于原生value)

案例——购物车-增减商品数量

案例——购物车-修改商品小计

9. jQuery元素操作

9.1 遍历元素

案例——购物车-总计总额

9.2 创建元素

9.3 添加元素

9.4 删除元素


一、jQuery概述

1. JavaScript

library,是一个封装好的特定的集合(方法和函数)。从封装一大堆函数的角度理解库,就是在库中,封装了很多预先定义好的函数在里面,比如animate,hide,show,获取元素等。

常见JavaScript库:jQuery,prototype,YUI,Dojo,Ext JS,移动端zepto

这些库都是对原生JavaScript的封装,内部都是JavaScript实现的,我们主要学习的是jQuery

2. jQuery概述

jQuery是一个快速,简洁的JavaScript库,其宗旨是“write less,do more”,即提倡写更少的代码,做更多的事情。

j就是JavaScript,query是查询。就是把JS中DOM操作做了封装,我们可以快速查询使用里面的功能。

jQuery封装了JavaScript常用的功能代码,优化了DOM操作、事件处理、动画设计和Ajax交互。

学习jQuery的本质:就是学习调用这些函数

3. jQuery优点

  • 轻量级。核心文件才即几十kb
  • 跨浏览器兼容。基本兼容主流浏览器
  • 链式编程、隐式迭代
  • 对事件、样式、动画支持,大大简化了DOM操作
  • 支持插件扩展开发。有着丰富的第三方插件,例如:树形菜单、日期控件、轮播图等
  • 免费、开源

4. jQuery的入口函数

  1. //(方法1)等dom加载完再去执行js
  2. $(document).ready(function(){
  3. ……
  4. })
  5. // (方法2)等dom加载完再去执行js
  6. $(function(){
  7. ……
  8. })
  1. 等着DOM结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完毕,jQuery帮我们实行 了封装
  2. 相当于原生js中的DOMContentLoad
  3. 不同于原生load事件,load事件是等页面文档、外部js文件、css文件、图片加载完毕才执行内部代码
  4. 更推荐第二种方式

5. jQuery的*对象 $

  1. $是jQuery的别称,在代码中jQuery可以代替$,为了方便通常使用$
  2. $是jQuery的*对象,相当于原生JavaScript中的window。把元素利用$包装成jQuery对象,就是可调用jQuery方法了。

6. jQuery对象和DOM对象

  1. 用原生JS获取来的对象就是DOM对象
  2. jquery方法获取的元素就是jquery对象
  3. jQuery对象本质是:利用$对DOM对象包装后产生的对象(伪数组形式存储)
  1. //对象:用原生js获取过来的对象就是DOM对象
  2. var myDiv=document.querySelector('div'); //myDiv 是 DOM 对象
  3. //对象:用jquery方式获取的对象就是jquery对象。
  4. $('div'); //$('div')是一个jquery对象
  5. //对象只能使用jQuery方法,DOM对象只能使用JavaScript属性和方法
  6. myDiv.style.display="none";
  7. //$('div').="none"; $('div')是jQuery对象不能使用元素js方法

DOM对象和jQuery对象之间是可以相互转换的。

因为原生js比jquery更大,原生的一些属性和方法jQuery没有给我们封装,要想使用这些属性和方法需要把jQuery对象转换为DOM对象才能使用。

  1. DOM对象转换为jQuery对象:$(DOM对象)不加引号
    $('div')
  2. jQuery转换为DOM对象:
    1. $('div')[index] //index是索引号
    2. $('div').get(index) //index是索引号
    1. <body>
    2. <video src="video/onetap.mp4" muted></video>
    3. <script type="text/javascript">
    4. //jQuery对象
    5. $('video');
    6. //dom对象
    7. var myVideo=document.querySelector('video');
    8. // ();
    9. //jQuery无法使用play方法
    10. // $('video').play(); //用法错误
    11. //要将jQuery对象转换为DOM对象,再使用play方法
    12. $('video')[0].play();
    13. $('video').get(0).play();
    14. </script>
    15. </body>

二、jQuery常用API

1. jQuery选择器

原生js有很多方式,兼容性不同,因此jQuery给我们做了封装,使用获取元素统一标准

$("选择器")    //里面选择器直接写css选择器即可,但是要加引导

1.1 隐式迭代

遍历内部DOM元素(伪数组幸形式存储)的过程就叫做隐式迭代

简单理解:给匹配道德所有元素进行循环遍历,执行相应的方法,而不用我们在进行循环,简化我们的操作方便我们调用。

  1. <body>
  2. <div>1111</div>
  3. <div>1111</div>
  4. <div>1111</div>
  5. <div>1111</div>
  6. <ul>
  7. <li>2222</li>
  8. <li>2222</li>
  9. <li>2222</li>
  10. <li>2222</li>
  11. </ul>
  12. </body>
  13. <script type="text/javascript">
  14. console.log($("div"));
  15. //给四个div设置背景颜色,jquery对象不能使用style
  16. $("div").css("background", "pink");
  17. //隐式迭代把所有元素进行内部循环,
  18. $("li").css("color", "red");
  19. </script>

1.2 jQuery筛选选择器  

  1. <body>
  2. <ul>
  3. <li>筛选li</li>
  4. <li>筛选li</li>
  5. <li>筛选li</li>
  6. <li>筛选li</li>
  7. <li>筛选li</li>
  8. </ul>
  9. <ol>
  10. <li>筛选li</li>
  11. <li>筛选li</li>
  12. <li>筛选li</li>
  13. <li>筛选li</li>
  14. <li>筛选li</li>
  15. </ol>
  16. </body>
  17. <script type="text/javascript">
  18. $(function() {
  19. $("ul li:first").css("color", "red");
  20. $("ul li:eq(2)").css("color", "blue");
  21. $("ol li:odd").css("color", "yellow");
  22. })
  23. </script>

1.3 jQuery筛选方法(重点)

  1. <body>
  2. <div class="grandfather">
  3. <div class="father">
  4. <div class="son"> 儿子</div>
  5. </div>
  6. </div>
  7. <div class="nav">
  8. <p>我是P</p>
  9. <div>
  10. <p>ppp</p>
  11. </div>
  12. </div>
  13. <ol>
  14. <li>我是ol的li</li>
  15. <li>我是ol的li</li>
  16. <li class="item">我是ol的li</li>
  17. <li>我是ol的li</li>
  18. </ol>
  19. </body>
  20. <script type="text/javascript">
  21. $(function() {
  22. //1.父
  23. console.log($(".son").parent());
  24. //2.子
  25. // (1)亲儿子
  26. console.log($(".nav").children("p").css("color","red"));
  27. //(2)所有后代
  28. console.log($(".nav").find("p").css("color","red"));
  29. //3.兄
  30. $("ol .item").siblings("li").css("color","red");
  31. //4.第n个元素
  32. // (1)选择器方法
  33. var index=2;
  34. $("ol li:eq(2)").css("color","blue");
  35. $("ol li:eq("+index+")").css("color","blue");
  36. //(2)选择方法的方式(推荐)
  37. $("ol li").eq(2).css("color","blue");
  38. $("ol li").eq(index).css("color","blue");
  39. //5.判断是否有类名
  40. console.log( $("ol li").eq(index).hasClass("item"));
  41. })
  42. </script>

1.4 jQuery排他思想

  1. <body>
  2. <button>11</button>
  3. <button>11</button>
  4. <button>11</button>
  5. <button>11</button>
  6. <button>11</button>
  7. <button>11</button>
  8. </body>
  9. <script type="text/javascript">
  10. $(function(){
  11. $("button").click(function(){
  12. $(this).css("background","pink");
  13. $(this).siblings("button").css("background","");
  14. })
  15. })
  16. </script>

1.5 链式编程

目的节约代码量

使用链式编程一定注意是哪个对象执行样式。

  1. $(function() {
  2. $("button").click(function() {
  3. // $(this).css("color","pink");
  4. // $(this).siblings().css("color","");
  5. //链式编程
  6. $(this).css("color","pink").siblings().css("color","");
  7. })
  8. })

2. jQuery样式操作

2.1 操作css方法

  1. 参数只写属性名,则返回属性值
    $(this).css('width'))
  2. 参数是属性名,属性值,逗号分隔,是设置一组样式,属性必加引号,只如果是数字可以不加单位和引号

    $('div').css('width',400);
  3. 参数可以是对象形式,方便设置多种样式。属性名和属性值用冒号隔开,属性可以不用加引号。复合属性名用驼峰命名法。

    1. $("div").css({
    2. width:500,
    3. height:500,
    4. backgroundColor:"red"
    5. })

  1. <style type="text/css">
  2. div{
  3. width: 200px;
  4. height: 200px;
  5. background-color: pink;
  6. }
  7. </style>
  8. <body>
  9. <div></div>
  10. <script type="text/javascript">
  11. $(function(){
  12. console.log($('div').css('width')) ;
  13. $('div').css('width',400);
  14. $("div").css({
  15. width:500,
  16. height:500,
  17. backgroundColor:"red"
  18. })
  19. })
  20. </script>
  21. </body>

2.2 设置类样式方法

作用同以前的classList,可以操作类样式,主要操作类里面的参数不要加点。

  1. <style type="text/css">
  2. div {
  3. width: 150px;
  4. height: 150px;
  5. background-color: pink;
  6. margin: 100px auto;
  7. transition: all 0.5s;
  8. }
  9. .current {
  10. background-color: red;
  11. transform: rotate(360deg);
  12. }
  13. </style>
  14. <body>
  15. <div></div>
  16. <script type="text/javascript">
  17. $(function() {
  18. //1.添加类addClass()
  19. $('div').click(function() {
  20. $(this).addClass("current");
  21. })
  22. //2.删除类removeClass()
  23. $('div').click(function() {
  24. $(this).removeClass("current");
  25. })
  26. // 3.切换类toggleClass()
  27. $("div").click(function() {
  28. $(this).toggleClass("current");
  29. })
  30. })
  31. </script>

案例——tab栏切换

  1. <style>
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. }
  6. li {
  7. list-style-type: none;
  8. }
  9. .tab {
  10. width: 978px;
  11. margin: 100px auto;
  12. }
  13. .tab_list {
  14. height: 39px;
  15. border: 1px solid #ccc;
  16. background-color: #f1f1f1;
  17. }
  18. .tab_list li {
  19. float: left;
  20. height: 39px;
  21. line-height: 39px;
  22. padding: 0 20px;
  23. text-align: center;
  24. cursor: pointer;
  25. }
  26. .tab_list .current {
  27. background-color: #c81623;
  28. color: #fff;
  29. }
  30. .item_info {
  31. padding: 20px 0 0 20px;
  32. }
  33. .item {
  34. display: none;
  35. }
  36. </style>
  37. <script src=""></script>
  38. </head>
  39. <body>
  40. <div class="tab">
  41. <div class="tab_list">
  42. <ul>
  43. <li class="current">商品介绍</li>
  44. <li>规格与包装</li>
  45. <li>售后保障</li>
  46. <li>商品评价(50000)</li>
  47. <li>手机社区</li>
  48. </ul>
  49. </div>
  50. <div class="tab_con">
  51. <div class="item" style="display: block;">
  52. 商品介绍模块内容
  53. </div>
  54. <div class="item">
  55. 规格与包装模块内容
  56. </div>
  57. <div class="item">
  58. 售后保障模块内容
  59. </div>
  60. <div class="item">
  61. 商品评价(50000)模块内容
  62. </div>
  63. <div class="item">
  64. 手机社区模块内容
  65. </div>
  66. </div>
  67. </div>
  68. </body>
  69. <script type="text/javascript">
  70. $(function(){
  71. // 1.点击上部li,当前li添加current类,其余兄弟移除
  72. $(".tab_list li").click(function(){
  73. $(this).addClass("current").siblings().removeClass("current");
  74. //2.点击同时,得到当前li的索引号
  75. var index=$(this).index();
  76. //3.让下部里面相应的索引号item显示,其余隐藏
  77. $(".tab_con .item").eq(index).show().siblings().hide();
  78. })
  79. })
  80. </script>

2.3 类操作与className区别

原生JS中className会覆盖元素原先里面的类名。

jQuery里面类操作只是对指定类进行操作,不影响原先类名

三、jQuery效果

jQuery给我们封装了很多动画效果,常见如下:

1. 显示隐藏效果

1.1 显示语法规范

show([speed],[easing],[fn]);

1.2 隐藏语法规范

hide([speed],[easing],[fn]);

1.3 切换语法规范

toggle([speed],[easing],[fn]);

1.4 显示参数

2. 滑动效果

2.1 下滑效果语法

slideDown([speed],[easing],[fn]);

2.2 上滑效果语法

slideUp([speed],[easing],[fn]);

2.3 滑动切换

slideToggle([speed],[easing],[fn]);

2.4 显示参数

3. 事件切换

hover([over],out);

鼠标经过的鼠标离开的复合写法 

  1. //1.事件切换
  2. $(".nav>li").hover(function(){
  3. $(this).children("ul").slideDown(200);
  4. },function(){
  5. $(this).children("ul").slideUp(200);
  6. })
  1. //2.简写
  2. $(".nav>li").hover(function() {
  3. $(this).children("ul").slideToggle(200);
  4. })

4. 动画队列及停止方法

4.1 动画或效果队列

动画或者效果一旦触发就会执行,如果多次触发,就造成多个动画或效果排队执行。

4.2 停止排队

stop()
  1. stop()方法用于停止动画或效果
  2. 注意:stop()写到动画或者效果的前面,相当于停止结束上一次动画。
  1. $(".nav>li").hover(function() {
  2. $(this).children("ul").stop().slideToggle(200);
  3. })

5. 淡入淡出效果

6. 自定义动画

6.1 语法

animate(params,[speed],[easing],[fn])

6.2 参数

7. jQuery属性操作

7.1 设置或获取元素固有属性prop

所谓元素固有属性是元素本身自带的属性,比如<a>里面的href

获取属性值

prop('属性')

设置属性值

prop('属性','属性值')

7.2 自定义属性attr

获取属性值

attr('属性')    //类似原生getAttribute

设置属性值

attr('属性','属性值')    //类似原生setAttribute

7.3 数据缓存data

data()方法可以在指定的元素上存取数据,并不会修改DOM元素结构,一旦页面刷新,之前存放的数据将被删除。

附加数据语法

data("name","value");    

获取数据语法

data("name")

同时还可以读取HTML5自定义属性data-index,得到的是数字型

案例——购物车-全选

  1. $(function(){
  2. // 1.全选 ,把全选按钮状态赋值给三个小的按钮
  3. $(".checkall").change(function(){
  4. // ( $(this).prop("checked"));
  5. $(".j-checkbox").prop("checked",$(this).prop("checked"));1
  6. })
  7. // 通过小复选框控制全选按钮
  8. $(".j-checkbox").change(function(){
  9. // if(被选中小复选框个数 === 3){
  10. // 就选中全选按钮
  11. // }else{
  12. // 不选中全选按钮
  13. // }
  14. // $(".j-checkbox").length所有小复选框个数
  15. if($(".j-checkbox:checked").length === $(".j-checkbox").length){
  16. $(".checkall").prop("checked",true);
  17. }else{
  18. $(".checkall").prop("checked",false);
  19. }
  20. })
  21. })

8. jQuery文本属性值

主要针对元素的内容还有表单的值操作

8.1 普通元素内容html()(相当于原生innerHTML)

  1. html() //获取
  2. html("内容") //设置

8.2 普通元素文本内容text()(相当于原生innerText)

  1. text(); //获取
  2. text("内容") //设置

8.3 表单的值val()(相当于原生value)

  1. value() //获取
  2. value("内容") //设置

案例——购物车-增减商品数量

  1. $(".increment").click(function() {
  2. //得到当前兄弟文本框的值
  3. var n = $(this).siblings(".itxt").val();
  4. n++;
  5. $(this).siblings(".itxt").val(n);
  6. });
  7. // 减
  8. $(".decrement").click(function() {
  9. //得到当前兄弟文本框的值
  10. var n = $(this).siblings(".itxt").val();
  11. if (n == 1) {
  12. return false;
  13. }
  14. n--;
  15. $(this).siblings(".itxt").val(n);
  16. });

案例——购物车-修改商品小计

  1. // 3.增减商品数量
  2. // 增
  3. $(".increment").click(function() {
  4. //得到当前兄弟文本框的值
  5. var n = $(this).siblings(".itxt").val();
  6. n++;
  7. $(this).siblings(".itxt").val(n);
  8. // 4.修改当前商品小计
  9. // 当前商品价格
  10. // var price = $(this).parent().parent().siblings(".p-price").html();
  11. var price = $(this).parents(".p-num").siblings(".p-price").html();
  12. price = price.substr(1);
  13. // 保留两位小数
  14. $(this).parents(".p-num").siblings(".p-sum").html("¥" + (price * n).toFixed(2));
  15. });
  16. // 减
  17. $(".decrement").click(function() {
  18. //得到当前兄弟文本框的值
  19. var n = $(this).siblings(".itxt").val();
  20. if (n == 1) {
  21. return false;
  22. }
  23. n--;
  24. $(this).siblings(".itxt").val(n);
  25. // 4.修改当前商品小计
  26. // 当前商品价格
  27. var price = $(this).parents(".p-num").siblings(".p-price").html();
  28. price = price.substr(1);
  29. $(this).parents(".p-num").siblings(".p-sum").html("¥" + (price * n).toFixed(2));
  30. })
  31. // 5.用文本框修改小计值
  32. $(".itxt").change(function(){
  33. // 先得到文本框里面的值 乘以 当前商品数量
  34. // 文本框修改后的值
  35. var n=$(this).val();
  36. // 商品单价
  37. var price = $(this).parents(".p-num").siblings(".p-price").html();
  38. price = price.substr(1);
  39. $(this).parents(".p-num").siblings(".p-sum").html("¥" + (price * n).toFixed(2));
  40. })

9. jQuery元素操作

主要遍历、创建、添加、删除操作

9.1 遍历元素

jQuery隐式迭代是对同一类元素做了同样的操作。如果想要给同一类元素做不同操作,需要遍历。

语法1: 

$("div").each(function(index,demEle){……});

  1. <body>
  2. <div>1</div>
  3. <div>2</div>
  4. <div>3</div>
  5. <script type="text/javascript">
  6. $(function() {
  7. // 第一个参数索引号,可以自定义
  8. // 第二个元素是dom元素对象
  9. var sum=0;
  10. var arr = ["red", "green", "blue"];
  11. $("div").each(function(i, domEle) {
  12. $(domEle).css("color", arr[i]);
  13. sum+=parseInt($(domEle).text()) ;
  14. console.log(sum);
  15. })
  16. })
  17. </script>
  18. </body>

语法2:

$.each(object,function(index,demEle){……});

  1. <body>
  2. <div>1</div>
  3. <div>2</div>
  4. <div>3</div>
  5. <script type="text/javascript">
  6. $(function() {
  7. var sum = 0;
  8. var arr = ["red", "green", "blue"];
  9. // 方法2
  10. $.each($('div'),function(i,domEle){
  11. $(domEle).css("color", arr[i]);
  12. sum += parseInt($(domEle).text());
  13. console.log(sum);
  14. })
  15. $.each(arr,function(i,ele){
  16. console.log(i);
  17. console.log(ele);
  18. })
  19. $.each({name:"andy",
  20. age:18
  21. },function(i,ele){
  22. console.log(i);
  23. console.log(ele);
  24. })
  25. })
  26. </script>
  27. </body>

 

案例——购物车-总计总额

  1. //6.总计总额模块
  2. getSum(); //先调用一遍
  3. function getSum(){
  4. var count=0; //总件数
  5. var money=0; //总额
  6. $(".itxt").each(function(i,ele){
  7. count+=parseInt($(ele).val());
  8. })
  9. $(".amount-sum em").text(count);
  10. $(".p-sum").each(function(i,ele){
  11. money+=parseFloat($(ele).text().substr(1));
  12. });
  13. $(".price-sum em").text("¥"+money.toFixed(2));
  14. }

9.2 创建元素

$("<li></li>");

9.3 添加元素

9.4 删除元素

 

案例——购物车-删除商品

 

 

jQuery尺寸、位置操作