天天看点

jQery基础参考pink老师ppt概述jQuery 效果

jQery基础

  • 概述
    • 优点
    • jQuery 的入口函数
    • jQuery 的顶级对象$
    • jQuery 对象和 DOM 对象
    • jQuery 基础选择器
    • jQuery 层级选择器
    • jQuery 设置样式
    • 隐式迭代
    • jQuery 筛选选择器
    • 排他思想
    • 案例:淘宝服饰精品案例
    • 操作 css 方法
    • 设置类样式方法
    • 案例:tab 栏切换
    • 类操作与className区别
  • jQuery 效果
    • 显示语法规范
    • 隐藏语法规范
    • 切换语法规范
    • 下滑效果语法规范
    • 上滑效果语法规范
    • 滑动切换效果语法规范
    • 事件切换
    • 动画队列及其停止排队方法
      • 淡入效果语法规范
        • 淡入效果参数
      • 淡出效果语法规范
        • 淡出效果参数
      • 淡入淡出切换效果语法规范
        • 淡入淡出切换效果参数
      • 渐进方式调整到指定的不透明度
        • 效果参数
    • 高亮显示案例
    • 自定义动画 animate
      • 1. 语法
      • 参数
    • 案例:王者荣耀手风琴效果
    • 设置或获取元素固有属性值 prop()
    • 设置或获取元素自定义属性值 attr()
    • 数据缓存 data()
    • 附加数据语法
    • 案例:购物车案例模块-全选
    • jQuery 内容文本值
    • 案例:购物车案例模块-增减商品数量
    • 案例:购物车案例模块-修改商品小计
    • 遍历元素
    • ajax

概述

jQuery 是一个快速、简洁的 JavaScript 库,其设计的宗旨是“write Less,Do More”,即倡导写更少的代码, 做更多的事情。
 
jQuery 封装了 JavaScript 常用的功能代码,优化了 DOM 操作、事件处理、动画设计和 Ajax 交互。
 
学习jQuery本质: 就是学习调用这些函数(方法)

jQuery 出现的目的是加快前端人员的开发速度,我们可以非常方便的调用和使用它,从而提高开发效率。
           

优点

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

jQuery 的入口函数

$(function () {       
 ...  // 此处是页面 DOM 加载完成的入口 
  }) ; 

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


  $(document).ready(function(){    
  ...  //  此处是页面DOM加载完成的入口 
  });    
           
  1. 等着 DOM 结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完成,jQuery 帮我们完成了封装。
  2. 相当于原生 js 中的 DOMContentLoaded。
  3. 不同于原生 js 中的 load 事件是等页面文档、外部的 js 文件、css文件、图片加载完毕才执行内部代码。
  4. 更推荐使用第一种方式。

jQuery 的顶级对象$

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

jQuery 对象和 DOM 对象

注意:

只有 jQuery 对象才能使用 jQuery 方法,DOM 对象则使用原生的 JavaScirpt 方法

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

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

  1. DOM 对象转换为 jQuery 对象: $(DOM对象)
  1. jQuery 对象转换为 DOM 对象(两种方式)
$('div') [index]       index 是索引号       

$('div') .get(index)    index 是索引号 
           
<script>

        var div = document.querySelector('div');
         div.style.display='none';
         
         
        $(div).hide();
        
         $('div')[0].style.display='none';
         
         $('div').get(0).style.display='none';
       </script>

           

总结:实际开发比较常用的是把DOM对象转换为jQuery对象,这样能够调用功能更加强大的jQuery中的方法。

jQuery 基础选择器

原生 JS 获取元素方式很多,很杂,而且兼容性情况不一致,因此 jQuery 给我们做了封装,使获取元素统一标准。

jQery基础参考pink老师ppt概述jQuery 效果

jQuery 层级选择器

jQery基础参考pink老师ppt概述jQuery 效果

jQuery 设置样式

隐式迭代

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

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

jQuery 筛选选择器

jQery基础参考pink老师ppt概述jQuery 效果
jQery基础参考pink老师ppt概述jQuery 效果

排他思想

想要多选一的效果,排他思想:当前元素设置样式,其余的兄弟元素清除样式。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>排他思想</title>
    <script src="js/jquery.min.js"></script>
  </head>
  <body>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <button>4</button>
    <script>
      $(function () {
        // 1. 隐式迭代 给所有的按钮都绑定了点击事件
        $("button").click(function () {
            // 2. 当前的元素变化背景颜色
          $(this).css("background", "pink").siblings().css("background", ""); //链式编程
           // 3. 其余的兄弟去掉背景颜色 隐式迭代
          // $(this).siblings().css('background','');
        });
      });
    </script>
  </body>
</html>

           

案例:淘宝服饰精品案例

① 核心原理:鼠标经过左侧盒子某个小li,就让内容区盒子相对应图片显示,其余的图片隐藏。

② 需要得到当前小li 的索引号,就可以显示对应索引号的图片

③ jQuery 得到当前元素索引号 $(this).index()

④ 中间对应的图片,可以通过 eq(index) 方法去选择

⑤ 显示元素 show() 隐藏元素 hide()

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
            font-size: 12px;
        }
        
        ul {
            list-style: none;
        }
        
        a {
            text-decoration: none;
        }
        
        .wrapper {
            width: 250px;
            height: 248px;
            margin: 100px auto 0;
            border: 1px solid pink;
            border-right: 0;
            overflow: hidden;
        }
        
        #left,
        #content {
            float: left;
        }
        
        #left li {
            background: url(images/lili.jpg) repeat-x;
        }
        
        #left li a {
            display: block;
            width: 48px;
            height: 27px;
            border-bottom: 1px solid pink;
            line-height: 27px;
            text-align: center;
            color: black;
        }
        
        #left li a:hover {
            background-image: url(images/abg.gif);
        }
        
        #content {
            border-left: 1px solid pink;
            border-right: 1px solid pink;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>
        $(function() {
            // 1. 鼠标经过左侧的小li 
            $("#left li").mouseover(function() {
                // 2. 得到当前小li 的索引号
                var index = $(this).index();
                console.log(index);
                // 3. 让我们右侧的盒子相应索引号的图片显示出来就好了
                // $("#content div").eq(index).show();
                // 4. 让其余的图片(就是其他的兄弟)隐藏起来
                // $("#content div").eq(index).siblings().hide();
                // 链式编程
                $("#content div").eq(index).show().siblings().hide();

            })
        })
    </script>
</head>

<body>
    <div class="wrapper">
        <ul id="left">
            <li><a href="#">女靴</a></li>
            <li><a href="#">雪地靴</a></li>
            <li><a href="#">冬裙</a></li>
            <li><a href="#">呢大衣</a></li>
            <li><a href="#">毛衣</a></li>
            <li><a href="#">棉服</a></li>
            <li><a href="#">女裤</a></li>
            <li><a href="#">羽绒服</a></li>
            <li><a href="#">牛仔裤</a></li>
        </ul>
        <div id="content">
            <div>
                <a href="#"><img src="images/女靴.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/雪地靴.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/冬裙.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/呢大衣.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/毛衣.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/棉服.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/女裤.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/羽绒服.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/牛仔裤.jpg" width="200" height="250" /></a>
            </div>

        </div>


    </div>
</body>

</html>
           

操作 css 方法

jQuery 可以使用 css 方法来修改简单元素样式; 也可以操作类,修改多个样式。

  1. 参数只写属性名,则是返回属性值
  1. 参数是属性名,属性值,逗号分隔,是设置一组样式,属性名必须加引号,值如果是数字可以不用跟单位和引号
$(this).css(''color'', ''red''); 
$(this).css(''height'', ''100px''); 
也可以是
$(this).css(''height'', 100); 
           
  1. 参数可以是对象形式,方便设置多组样式。属性名和属性值用冒号隔开, 属性可以不用加引号,
$(this).css({ "color":"white","font-size":"20px"}); 
也可以是

$(this).css({ 
color:"white",
font-size:20
}); 
           

设置类样式方法

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

  1. 添加类
  1. 移除类
  1. 切换类

案例:tab 栏切换

① 点击上部的li,当前li 添加current类,其余兄弟移除类。

② 点击的同时,得到当前li 的索引号

③ 让下部里面相应索引号的item显示,其余的item隐藏

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      li {
        list-style-type: none;
      }

      .tab {
        width: 978px;
        margin: 100px auto;
      }

      .tab_list {
        height: 39px;
        border: 1px solid #ccc;
        background-color: #f1f1f1;
      }

      .tab_list li {
        float: left;
        height: 39px;
        line-height: 39px;
        padding: 0 20px;
        text-align: center;
        cursor: pointer;
      }

      .tab_list .current {
        background-color: #c81623;
        color: #fff;
      }

      .item_info {
        padding: 20px 0 0 20px;
      }

      .item {
        display: none;
      }
    </style>
    <script src="js/jquery.min.js"></script>
  </head>

  <body>
    <div class="tab">
      <div class="tab_list">
        <ul>
          <li class="current">商品介绍</li>
          <li>规格与包装</li>
          <li>售后保障</li>
          <li>商品评价(50000)</li>
          <li>手机社区</li>
        </ul>
      </div>
      <div class="tab_con">
        <div class="item" style="display: block;">
          商品介绍模块内容
        </div>
        <div class="item">
          规格与包装模块内容
        </div>
        <div class="item">
          售后保障模块内容
        </div>
        <div class="item">
          商品评价(50000)模块内容
        </div>
        <div class="item">
          手机社区模块内容
        </div>
      </div>
    </div>
    <script>
      $(function () {
        $(".tab_list ul li").click(function () {
          // 1.点击上部的li,当前li 添加current类,其余兄弟移除类

          // 链式编程操作
          $(this).addClass("current").siblings().removeClass("current");
          // 2.点击的同时,得到当前li 的索引号
          var index = $(this).index();
          console.log(index);
          // 3.让下部里面相应索引号的item显示,其余的item隐藏
          $(".tab_con .item").eq(index).show().siblings().hide();

        ------------------------------------------------------------  
          $(this).addClass("current").siblings().removeClass("current");
          var index = $(this).index();
          $(".item")
            .eq(index)
            .css("display", "block")
            .siblings()
            .css("display", "none");
        });
      });
    </script>
  </body>
</html>

           

类操作与className区别

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

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

这个addClass相当于追加类名 不影响以前的类名

jQuery 效果

jQery基础参考pink老师ppt概述jQuery 效果

显示语法规范

显示参数

(1)参数都可以省略, 无动画直接显示。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次

隐藏语法规范

** 隐藏参数**

(1)参数都可以省略, 无动画直接显示。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次

切换语法规范

切换参数

(1)参数都可以省略, 无动画直接显示。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

建议:平时一般不带参数,直接显示隐藏即可。

下滑效果语法规范

下滑效果参数

(1)参数都可以省略。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次

上滑效果语法规范

上滑效果参数

(1)参数都可以省略。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

滑动切换效果语法规范

滑动切换效果参数

(1)参数都可以省略。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

事件切换

(1)over:鼠标移到元素上要触发的函数(相当于mouseenter)

(2)out:鼠标移出元素要触发的函数(相当于mouseleave)

(3)如果只写一个函数,则鼠标经过和离开都会触发它

// 鼠标经过
             $(".nav>li").mouseover(function() {
                  $(this) jQuery 当前元素  this不要加引号
                  
                 $(this).children("ul").slideDown(200);
             });
             // 鼠标离开
             $(".nav>li").mouseout(function() {
                 $(this).children("ul").slideUp(200);
             });
           

可以简写成

// 1. 事件切换 hover 就是鼠标经过和离开的复合写法
             $(".nav>li").hover(function() {
                 $(this).children("ul").slideDown(200);
             }, function() {
                 $(this).children("ul").slideUp(200);
             });
           

在进一步简写成

// 2. 事件切换 hover  如果只写一个函数,那么鼠标经过和鼠标离开都会触发这个函数
            $(".nav>li").hover(function() {
                $(this).children("ul").slideToggle();
            });
           

动画队列及其停止排队方法

  1. 动画或效果队列
  2. 动画或者效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队执行。
  3. 停止排队

(1)stop() 方法用于停止动画或效果。

(2) 注意: stop() 写到动画或者效果的前面, 相当于停止结束上一次的动画。

淡入效果语法规范

淡入效果参数

(1)参数都可以省略。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

淡出效果语法规范

淡出效果参数

(1)参数都可以省略。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次

淡入淡出切换效果语法规范

淡入淡出切换效果参数

(1)参数都可以省略。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

渐进方式调整到指定的不透明度

效果参数

(1)opacity 透明度必须写,取值 0~1 之间。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。必须写

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

高亮显示案例

当鼠标经过某个li时让他的兄弟的亮度变低,这样就显得当前的亮度变亮,鼠标离开时在恢复亮度

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }
        
        ul {
            list-style: none;
        }
        
        body {
            background: #000;
        }
        
        .wrap {
            margin: 100px auto 0;
            width: 630px;
            height: 394px;
            padding: 10px 0 0 10px;
            background: #000;
            overflow: hidden;
            border: 1px solid #fff;
        }
        
        .wrap li {
            float: left;
            margin: 0 10px 10px 0;
        }
        
        .wrap img {
            display: block;
            border: 0;
        }
    </style>
    <script src="jquery.min.js"></script>
  <script>
        
        $(function() {
            //鼠标进入的时候,其他的li标签透明度:0.5
            $(".wrap li").hover(function() {
                $(this).siblings().stop().fadeTo(400, 0.5);
            }, function() {
                // 鼠标离开,其他li 透明度改为 1
                $(this).siblings().stop().fadeTo(400, 1);
            })

        });
    </script>
  
</head>

<body>
    <div class="wrap">
        <ul>
            <li>
                <a href="#"><img src="images/01.jpg" alt="" /></a>
            </li>
            <li>
                <a href="#"><img src="images/02.jpg" alt="" /></a>
            </li>
            <li>
                <a href="#"><img src="images/03.jpg" alt="" /></a>
            </li>
            <li>
                <a href="#"><img src="images/04.jpg" alt="" /></a>
            </li>
            <li>
                <a href="#"><img src="images/05.jpg" alt="" /></a>
            </li>
            <li>
                <a href="#"><img src="images/06.jpg" alt="" /></a>
            </li>
        </ul>
    </div>
</body>

</html>
           

自定义动画 animate

1. 语法

参数

(1)params: 想要更改的样式属性,以对象形式传递,必须写。 属性名可以不用带引号, 如果是复合属性则需要采 取驼峰命名法 borderLeft。其余参数都可以省略。

(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。

(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。

(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        li {
            list-style-type: none;
        }
        
        a {
            text-decoration: none;
            font-size: 14px;
        }
        
        .nav {
            margin: 100px;
        }
        
        .nav>li {
            position: relative;
            float: left;
            width: 80px;
            height: 41px;
            text-align: center;
        }
        
        .nav li a {
            display: block;
            width: 100%;
            height: 100%;
            line-height: 41px;
            color: #333;
        }
        
        .nav>li>a:hover {
            background-color: #eee;
        }
        
        .nav ul {
            display: none;
            position: absolute;
            top: 41px;
            left: 0;
            width: 100%;
            border-left: 1px solid #FECC5B;
            border-right: 1px solid #FECC5B;
        }
        
        .nav ul li {
            border-bottom: 1px solid #FECC5B;
        }
        
        .nav ul li a:hover {
            background-color: #FFF5DA;
        }
    </style>
    <script src="js/jquery.min.js"></script>
</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').mouseover(function () {
            //      $(this).children('ul').stop().slideDown();
            // })
            // $('.nav li').mouseout(function () {
            //     $(this).children('ul').stop().slideUp();
            // })
            //1. 事件切换 hover 就是鼠标经过和离开的复合写法
            // $('.nav li').hover(function(){
            //   $(this).children('ul').stop().slideDown();
            // },function(){
            //     $(this).children('ul').stop().slideUp();
            // })
            //2. 事件切换 hover  如果只写一个函数,那么鼠标经过和鼠标离开都会触发这个函数
            $('.nav li').hover(function(){
                $(this).children('ul').stop().slideToggle();
            })
        })
    </script>
</body>

</html>
           

案例:王者荣耀手风琴效果

① 鼠标经过某个小li 有两步操作:

② 当前小li 宽度变为 224px, 同时里面的小图片淡出,大图片淡入

③ 其余兄弟小li宽度变为69px, 小图片淡入, 大图片淡出

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>手风琴案例</title>

    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }
        
        img {
            display: block;
        }
        
        ul {
            list-style: none;
        }
        
        .king {
            width: 852px;
            margin: 100px auto;
            background: url(images/bg.png) no-repeat;
            overflow: hidden;
            padding: 10px;
        }
        
        .king ul {
            overflow: hidden;
        }
        
        .king li {
            position: relative;
            float: left;
            width: 69px;
            height: 69px;
            margin-right: 10px;
        }
        
        .king li.current {
            width: 224px;
        }
        
        .king li.current .big {
            display: block;
        }
        
        .king li.current .small {
            display: none;
        }
        
        .big {
            width: 224px;
            display: none;
        }
        
        .small {
            position: absolute;
            top: 0;
            left: 0;
            width: 69px;
            height: 69px;
            border-radius: 5px;
        }
    </style>
     <script src="js/jquery.min.js"></script>
</head>

<body>
    <script src="js/jquery.min.js"></script>
    <script type="text/javascript">
        $(function() {
            // 鼠标经过某个小li 有两步操作:
            $(".king li").mouseenter(function() {
                // 1.当前小li 宽度变为 224px, 同时里面的小图片淡出,大图片淡入
                $(this).stop().animate({
                    width: 224
                }).find(".small").stop().fadeOut().siblings(".big").stop().fadeIn();
                // 2.其余兄弟小li宽度变为69px, 小图片淡入, 大图片淡出
                $(this).siblings("li").stop().animate({
                    width: 69
                }).find(".small").stop().fadeIn().siblings(".big").stop().fadeOut();
            })



        });
    </script>
    <div class="king">
        <ul>
            <li class="current">
                <a href="#">
                    <img src="images/m1.jpg" alt="" class="small">
                    <img src="images/m.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/l1.jpg" alt="" class="small">
                    <img src="images/l.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/c1.jpg" alt="" class="small">
                    <img src="images/c.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/w1.jpg" alt="" class="small">
                    <img src="images/w.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/z1.jpg" alt="" class="small">
                    <img src="images/z.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/h1.jpg" alt="" class="small">
                    <img src="images/h.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/t1.jpg" alt="" class="small">
                    <img src="images/t.png" alt="" class="big">
                </a>
            </li>
        </ul>

    </div>




</body>

</html>
           

设置或获取元素固有属性值 prop()

所谓元素固有属性就是元素本身自带的属性,比如 元素里面的 href ,比如 元素里面的 type。

  1. 获取属性语法
  1. 设置属性语法

设置或获取元素自定义属性值 attr()

用户自己给元素添加的属性,我们称为自定义属性。 比如给 div 添加 index =“1”。

  1. 获取属性语法
  1. 设置属性语法

数据缓存 data()

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

附加数据语法

  1. 获取数据语法

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

注意如果是h5的自定义属性来取attr和data有区别,例如 data-index

attr("data-index")
data("index")
用data取不需要前面的data-
           

案例:购物车案例模块-全选

① 全选思路:里面3个小的复选框按钮(j-checkbox)选中状态(checked)跟着全选按钮(checkall)走。

② 因为checked 是复选框的固有属性,此时我们需要利用prop()方法获取和设置该属性。

③ 把全选按钮状态赋值给3小复选框就可以了。

④ 当我们每次点击小的复选框按钮,就来判断:

⑤ 如果小复选框被选中的个数等于3 就应该把全选按钮选上,否则全选按钮不选。

⑥ :checked 选择器 :checked 查找被选中的表单元素。

//如果全选按钮选中,则每一个按钮都被选中
    $('.checkall').change(function () {
         $('.j-checkbox,.checkall').prop('checked',$(this).prop('checked'));
    })
    $('.j-checkbox').click(function(){
        // 如果按钮选中的个数等于所有按钮的个数
        if($('.j-checkbox:checked').length==$('.j-checkbox').length){
            $('.checkall').prop('checked',true);
        }
        else{
            $('.checkall').prop('checked',false);
        }
    })
           

jQuery 内容文本值

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

  1. 普通元素内容 html()( 相当于原生inner HTML)
html()             // 获取元素的内容 

html(''内容'')   // 设置元素的内容 
           
  1. 普通元素文本内容 text() (相当与原生 innerText)
text()                     // 获取元素的文本内容 

text(''文本内容'')   // 设置元素的文本内容 
           
  1. 表单的值 val()( 相当于原生value)
val()              // 获取表单的值 

val(''内容'')   // 设置表单的值 
           

案例:购物车案例模块-增减商品数量

① 核心思路:首先声明一个变量,当我们点击+号(increment),就让这个值++,然后赋值给文本框。

② 注意1: 只能增加本商品的数量, 就是当前+号的兄弟文本框(itxt)的值。

③ 修改表单的值是val() 方法

④ 注意2: 这个变量初始值应该是这个文本框的值,在这个值的基础上++。要获取表单的值

⑤ 减号(decrement)思路同理,但是如果文本框的值是1,就不能再减了

$('.increment').click(function(){
        //每次的初始值是当前页面的值而不是0
        var num=$(this).siblings('.itxt').val();
        num++;
        //更改表单的值
        $(this).siblings('.itxt').val(num);
        
        
    })
    $('.decrement').click(function(){
        var num=$(this).siblings('.itxt').val();
        num--;
        //减到0后就return结束
        if(num==0){
            return false;
        }
        $(this).siblings('.itxt').val(num);
    })
           

案例:购物车案例模块-修改商品小计

① 核心思路:每次点击+号或者-号,根据文本框的值 乘以 当前商品的价格 就是 商品的小计

② 注意1: 只能增加本商品的小计, 就是当前商品的小计模块(p-sum) ③ 修改普通元素的内容是text() 方法

④ 注意2: 当前商品的价格,要把¥符号去掉再相乘 截取字符串 substr(1) ⑤ parents(‘选择器’) 可以返回指定祖先元素

⑥ 最后计算的结果如果想要保留2位小数 通过 toFixed(2) 方法

⑦ 用户也可以直接修改表单里面的值,同样要计算小计。 用表单change事件

⑧ 用最新的表单内的值 乘以 单价即可 但是还是当前商品小计

$('.increment').click(function(){
        //每次的初始值是当前页面的值而不是0
        var num=$(this).siblings('.itxt').val();
        num++;
        //更改表单的值
        $(this).siblings('.itxt').val(num);
        var price=$(this).parents('.p-num').siblings('.p-price').html();
        //去掉前面的¥符号
      
         price=price.substr(1);
        //  字符串和数值相乘隐式转换
        // toFixed(2)保留两位小数
         $(this).parents('.p-num').siblings('.p-sum').html("¥"+(price*num).toFixed(2));
        
    })
    $('.decrement').click(function(){
        var num=$(this).siblings('.itxt').val();
        num--;
        //减到0后就return结束
        if(num==0){
            return false;
        }
        $(this).siblings('.itxt').val(num);
        var price=$(this).parents('.p-num').siblings('.p-price').html();
        //去掉前面的¥符号
         price=price.substr(1);
        //  字符串和数值相乘隐式转换
        // toFixed(2)保留两位小数
         $(this).parents('.p-num').siblings('.p-sum').html("¥"+(price*num).toFixed(2));
    })
    $('.itxt').change(function(){
        var num=$('.itxt').val();
        var price=$(this).parents('.p-num').siblings('.p-price').html();
        //去掉前面的¥符号
         price=price.substr(1);
        //  字符串和数值相乘隐式转换
        // toFixed(2)保留两位小数
         $(this).parents('.p-num').siblings('.p-sum').html("¥"+(price*num).toFixed(2));
    })
           

遍历元素

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

语法1:

$("div").each(function (index, domEle) { xxx; })   
           
  1. each() 方法遍历匹配的每一个元素。主要用DOM处理。 each 每一个
  2. 里面的回调函数有2个参数: index 是每个元素的索引号; demEle 是每个DOM元素对象,不是jquery对象
  3. 所以要想使用jquery方法,需要给这个dom元素转换为jquery对象 $(domEle)

语法2:

$.each(object,function (index, element) { xxx; }) 
           
  1. $.each()方法可用于遍历任何对象。主要用于数据处理,比如数组,对象
  2. 里面的函数有2个参数: index 是每个元素的索引号; element 遍历内容

案例:购物车案例模块-计算总计和总额

① 核心思路:把所有文本框里面的值相加就是总计数量。总额同理

② 文本框里面的值不相同,如果想要相加需要用到each遍历。声明一个变量,相加即可

③ 点击+号-号,会改变总计和总额,如果用户修改了文本框里面的值同样会改变总计和总额

④ 因此可以封装一个函数求总计和总额的, 以上2个操作调用这个函数即可。

⑤ 注意1: 总计是文本框里面的值相加用 val() 总额是普通元素的内容用text()

⑥ 要注意普通元素里面的内容要去掉¥并且转换为数字型才能相加

function getsum(){
        var snum=0;
        var smoney=0;
        $('.itxt').each(function(i,ele){
            //ele是一个dom对象需要转化为jQuery对象
            var ele=$(ele);
            //如果选中才把数量加到总和里面
            if(ele.parents('.p-num').siblings('.p-checkbox').children('.j-checkbox').prop('checked')){
                snum+=parseInt(ele.val());
            }
         
        })
        console.log(snum);
        $('.amount-sum em').text(snum);
        console.log($('.p-sum').text());
        $('.p-sum').each(function(i,ele){
            var ele=$(ele);
            //如果选中才把价钱加到总和里面
            if(ele.siblings('.p-checkbox').children('.j-checkbox').prop('checked')){
                
                smoney+=parseFloat(ele.text().substr(1));
            }
        })
        $('.price-sum em').text(smoney.toFixed(2));
    }
           

创建元素

语法:

内部添加

把内容放入匹配元素内部最后面,类似原生 appendChild

把内容放入匹配元素内部最前面。

外部添加

element.after(''内容'')        //  把内容放入目标元素后面 

element.before(''内容'')    //  把内容放入目标元素前面  
           

① 内部添加元素,生成之后,它们是父子关系。

② 外部添加元素,生成之后,他们是兄弟关系。

删除元素

① remove 删除元素本身。

② empt() 和 html(’’’’) 作用等价,都可以删除元素里面的内容,只不过 html 还可以设置内容。

案例:购物车案例模块-删除商品模块

① 核心思路:把商品remove() 删除元素即可

② 有三个地方需要删除:

  1. 商品后面的删除按钮
  2. 删除选中的商品
  3. 清理购物车

    ③ 商品后面的删除按钮: 一定是删除当前的商品,所以从 $(this) 出发

    ④ 删除选中的商品: 先判断小的复选框按钮是否选中状态,如果是选中,则删除对应的商品

    ⑤ 清理购物车: 则是把所有的商品全部删掉

// 6. 删除商品模块
    // (1) 商品后面的删除按钮
    $(".p-action a").click(function() {
        // 删除的是当前的商品 
        $(this).parents(".cart-item").remove();
        getSum();
    });
    // (2) 删除选中的商品
    $(".remove-batch").click(function() {
        // 删除的是小的复选框选中的商品
        $(".j-checkbox:checked").parents(".cart-item").remove();
        getSum();
    });
    // (3) 清空购物车 删除全部商品
    $(".clear-all").click(function() {
        $(".cart-item").remove();
        getSum();
    })
           

案例:购物车案例模块-选中商品添加背景

① 核心思路:选中的商品添加背景,不选中移除背景即可

② 全选按钮点击:如果全选是选中的,则所有的商品添加背景,否则移除背景

③ 小的复选框点击: 如果是选中状态,则当前商品添加背景,否则移除背景

④ 这个背景,可以通过类名修改,添加类和删除类

//如果全选按钮选中,则每一个按钮都被选中
    $('.checkall').change(function () {
         $('.j-checkbox,.checkall').prop('checked',$(this).prop('checked'));
         if($(this).prop('checked')){
             $('.cart-item').addClass('check-cart-item');

         }
         else{
            $('.cart-item').removeClass('check-cart-item');
         }
    })
    $('.j-checkbox').click(function(){
        // 如果按钮选中的个数等于所有按钮的个数
        if($('.j-checkbox:checked').length==$('.j-checkbox').length){
            $('.checkall').prop('checked',true);
        }
        else{
            $('.checkall').prop('checked',false);
        }
        if($(this).prop('checked')){
            $(this).parents('.cart-item').addClass('check-cart-item');
        }
        else{
            $(this).parents('.cart-item').removeClass('check-cart-item');
        }
    })
           

jQuery 尺寸

jQery基础参考pink老师ppt概述jQuery 效果

位置主要有三个: offset()、position()、scrollTop()/scrollLeft()

  1. offset() 设置或获取元素偏移

    ① offset() 方法设置或返回被选元素相对于文档的偏移坐标,跟父级没有关系。

    ② 该方法有2个属性 left、top 。offset().top 用于获取距离文档顶部的距离,offset().left 用于获取距离文档左侧的距离。

    ③ 可以设置元素的偏移:offset({ top: 10, left: 30 });

  2. position() 获取元素偏移

    ① position() 方法用于返回被选元素相对于带有定位的父级偏移坐标,如果父级都没有定位,则以文档为准。

    ② 该方法有2个属性 left、top。position().top 用于获取距离定位父级顶部的距离,position().left 用于获取距离定 位父级左侧的距离。

    ③ 该方法只能获取不能修改

  3. scrollTop()/scrollLeft() 设置或获取元素被卷去的头部和左侧

    ① scrollTop() 方法设置或返回被选元素被卷去的头部。

    ② 不跟参数是获取,参数为不带单位的数字则是设置被卷去的头部

案例:带有动画的返回顶部

① 核心原理: 使用animate动画返回顶部。

② animate动画函数里面有个scrollTop 属性,可以设置位置

③ 但是是元素做动画,因此 $(“body,html”).animate({scrollTop: 0})

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body {
            height: 2000px;
        }
        
        .back {
            position: fixed;
            width: 50px;
            height: 50px;
            background-color: pink;
            right: 30px;
            bottom: 100px;
            display: none;
        }
        
        .container {
            width: 900px;
            height: 500px;
            background-color: skyblue;
            margin: 400px auto;
        }
    </style>
    <script src="js/jquery.min.js"></script>
</head>

<body>
    <div class="back">返回顶部</div>
    <div class="container">
    </div>
    <script>
        $(function (){
            $(window).scroll(function() {
                if($(this).scrollTop()>=($('.container').offset().top)){
                     $('.back').show();
                }
                else{
                    $('.back').hide();
                }
            })
            //不能是文档而是 html和body元素做动画
            $('.back').click(function(){
                 $('html, body').animate({
                     scrollTop : 0,
                
                })
            })
        })
    </script>
        
</body>

</html>
           

jQuery 事件注册

element.事件(function(){})

$(“div”).click(function(){  事件处理程序 })  
           

其他事件和原生基本一致。

比如mouseover、mouseout、blur、focus、change、keydown、keyup、resize、scroll 等

事件处理 on() 绑定事件

on() 方法在匹配元素上绑定一个或多个事件的事件处理函数

语法:

  1. events:一个或多个用空格分隔的事件类型,如"click"或"keydown" 。
  2. selector: 元素的子元素选择器 。
  3. fn:回调函数 即绑定在元素身上的侦听函数。

on() 方法优势1:

可以绑定多个事件,多个处理事件处理程序

$(“div”).on({   
 mouseover: function(){},    
 mouseout: function(){},   
 click: function(){}  
 }); 
           

如果事件处理程序相同

$(“div”).on(“mouseover mouseout”, function() {    $(this).toggleClass(“current”);   
 });  
           

on() 方法优势2:

可以事件委派操作 。事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素。

$('ul').on('click', 'li', function() {     
alert('hello world!'); 
});   
           

在此之前有bind(), live() delegate()等方法来处理事件绑定或者事件委派,最新版本的请用on替代他们

on() 方法优势3:

动态创建的元素,click() 没有办法绑定事件, on() 可以给动态生成的元素绑定事件

$(“div").on("click",”p”, function(){      
 alert("俺可以给动态生成的元素绑定事件") 
  });  
 $("div").append($("<p>我是动态创建的p</p>"));  
           

案例:发布微博案例

① 点击发布按钮, 动态创建一个小li,放入文本框的内容和删除按钮, 并且添加到ul 中。

② 点击的删除按钮,可以删除当前的微博留言。

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0
        }
        
        ul {
            list-style: none
        }
        
        .box {
            width: 600px;
            margin: 100px auto;
            border: 1px solid #000;
            padding: 20px;
        }
        
        textarea {
            width: 450px;
            height: 160px;
            outline: none;
            resize: none;
        }
        
        ul {
            width: 450px;
            padding-left: 80px;
        }
        
        ul li {
            line-height: 25px;
            border-bottom: 1px dashed #cccccc;
            display: none;
        }
        
        input {
            float: right;
        }
        
        ul li a {
            float: right;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>
        $(function() {
            // 1.点击发布按钮, 动态创建一个小li,放入文本框的内容和删除按钮, 并且添加到ul 中
            $(".btn").on("click", function() {
                var li = $("<li></li>");
                li.html($(".txt").val() + "<a href='javascript:;'> 删除</a>");
                $("ul").prepend(li);
                li.slideDown();
                $(".txt").val("");
            })

            // 2.点击的删除按钮,可以删除当前的微博留言li
            // $("ul a").click(function() {  // 此时的click不能给动态创建的a添加事件
            //     alert(11);
            // })
            // on可以给动态创建的元素绑定事件
            $("ul").on("click", "a", function() {
                $(this).parent().slideUp(function() {
                    $(this).remove();
                });
            })

        })
    </script>
</head>

<body>
    <div class="box" id="weibo">
        <span>微博发布</span>
        <textarea name="" class="txt" cols="30" rows="10"></textarea>
        <button class="btn">发布</button>
        <ul>
        </ul>
    </div>
</body>

</html>
           

off() 方法可以移除通过 on() 方法添加的事件处理程序。

$("p").off() // 解绑p元素所有事件处理程序 
 
$("p").off( "click")  // 解绑p元素上面的点击事件 后面的 foo 是侦听函数名 
 
$("ul").off("click", "li");   // 解绑事件委托 
           

如果有的事件只想触发一次, 可以使用 one() 来绑定事件。

自动触发事件 trigger()

有些事件希望自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件,不必鼠标 点击触发。

element.click()  // 第一种简写形式 

element.trigger("type") // 第二种自动触发模式 

$("p").on("click", function () {   alert("hi~"); });  
 
$("p").trigger("click"); // 此时自动触发点击事件,不需要鼠标点击 

element.triggerHandler(type)  // 第三种自动触发模式 
triggerHandler模式不会触发元素的默认行为,这是和前面两种的区别。 
           

事件被触发,就会有事件对象的产生。

阻止默认行为:event.preventDefault() 或者 return false

阻止冒泡: event.stopPropagation()

jQuery 对象拷贝

如果想要把某个对象拷贝(合并) 给另外一个对象使用,此时可以使用 $.extend() 方法

语法:

  1. deep: 如果设为true 为深拷贝, 默认为false 浅拷贝
  2. target: 要拷贝的目标对象
  3. object1:待拷贝到第一个对象的对象。
  4. objectN:待拷贝到第N个对象的对象。
  5. 浅拷贝目标对象引用的被拷贝的对象地址,修改目标对象会影响被拷贝对象。
  6. 深拷贝,前面加true, 完全克隆,修改目标对象不会影响被拷贝对象

jQuery 多库共存

问题概述:

jQuery使用 作 为 标 示 符 , 随 着 j Q u e r y 的 流 行 , 其 他 j s 库 也 会 用 这 作为标示符,随着jQuery的流行,其他 js 库也会用这 作为标示符,随着jQuery的流行,其他js库也会用这作为标识符, 这样一起使用会引起冲突。

客观需求:

需要一个解决方案,让jQuery 和其他的js库不存在冲突,可以同时存在,这就叫做多库共存。

jQuery 解决方案:

  1. 把里面的 $ 符号 统一改为 jQuery。 比如 jQuery(’‘div’’)
  2. jQuery 变量规定新的名称:$.noConflict() var xx = $.noConflict();

jQuery 功能比较有限,想要更复杂的特效效果,可以借助于 jQuery 插件完成。

注意: 这些插件也是依赖于jQuery来完成的,所以必须要先引入jQuery文件,因此也称为 jQuery 插件。

jQuery 插件常用的网站:

3. jQuery 插件库 http://www.jq22.com/

4. jQuery 之家 http://www.htmleaf.com/

jQuery 插件使用步骤:

5. 引入相关文件。(jQuery 文件 和 插件文件)

6. 复制相关html、css、js (调用插件)。

ajax

参数 参数类型及默认值 说明
url 类型:String 默认值: 当前页地址。发送请求的地址 请求的地址
type 类型:String默认值: “GET”) 请求方式 (“POST” 或 “GET”)
data 类型:String 发送到服务器的数据,会被jquery自动转化为查询字符串
dataType 类型:String,默认由浏览器自动判断 期待服务器返回的数据类型
error 类型:Function 请求失败时调用此函数
success 类型:Function 请求成功后的回调函数
complete(XHR, TS) 类型:Function 请求完成后回调函数 (请求成功或失败之后均调用)
contentType 类型:String 默认值: “application/x-www-form-urlencoded”。发送信息至服务器时内容编码类型 发送请求时使用的内容类型,即请求首部的content-Type

继续阅读