『jQuery 使用手册』

一、jQuery 入门

(1)介绍

jQuery 是一个轻量级的 “写的少,做的多” 的 JavaScript 库。

简化了 javascript 的操作,例如 AJAX调用 和 DOM操作 等……

jQuery 官网:https://jquery.com
jQuery 插件库:http://www.jq22.com
jQuery 之家:http://www.htmleaf.com

(2)使用模板

<script src="https://code.jquery.com/jquery-3.7.0.min.js">script>
<script>
  $(function () {
    
  });
script>

其中,$ 是 jQuery 的别称,同时也是 jQuery 的顶级对象。

(3)DOM 和 jQuery 对象转换

<video src="mov.mp4" muted>video>

<script src="https://code.jquery.com/jquery-3.7.0.min.js">script>
<script>
  // 原生JS方法
  let videoDOM = document.querySelector("video");
  videoDOM.play(); 

  // $('video').play() // ❌ jQuery 里面没有 play 这个方法
  // 解决:将 jQuery对象 转换为 DOM对象
  // ✅方法一
  $("video")[0].play();
  // ✅方法二
  $("video").get(0).play();
script>

二、jQuery 常用API

1、选择器

选择器:

$(".nav")
$("ul li")
$("[href='#']")
$("[href!='#']")
$("[href$='.jpg']")

筛选选择器:

$("ul li:first").css("color", "red"); // 首个子元素
$("ul li:eq(2)").css("color", "blue"); // 指定索引值
$("ol li:odd").css("color", "skyblue"); // 基数
$("ol li:even").css("color", "pink"); // 偶数

筛选方法:

$(".son").parent() // 返回的是 最近一级的父级元素
$(".nav").children("p").css("color", "red"); // 类似 ul>li
$(".nav").find("p").css("color", "red"); // 类似 ul li
$("ol .item").siblings("li").css("color", "red"); // 除了自身元素之外的所有亲兄弟
$("ul li").eq(2).css("color", "blue"); // 指定索引值
$("div:first").hasClass("current") // 判断是否有某个类名

2、样式操作

css 方法:

$("div").css("width", "300px"); // 写法一
$("div").css("width", 300); // 写法二
// 复合属性:驼峰命名,对象方式
$("div").css({
    width: 400,
    height: 400,
    backgroundColor: "red"
})

类操作:

// 1. 添加类 addClass()
$('div').addClass("current");
// 2. 删除类 removeClass()
$('div').removeClass("current");
// 3. 切换类 toggleClass()
$('div').toggleClass("current");

案例:tab栏切换

$(".tab_list li").click(function () {
  // tab标题切换
  $(this).addClass("current").siblings().removeClass("current");
  // tab内容切换
  var index = $(this).index();
  $(".tab_con .item").eq(index).show().siblings().hide();
});

3、效果

【括号传参共通点: 第一个参数是持续时间,第二个参数是回调函数(皆为可选)】

显示/隐藏:

$("div").show()
$("div").hide()
$("div").toggle()

滑动:

$("div").slideDown();
$("div").slideUp();
$("div").slideToggle();

淡入淡出:

$("div").fadeIn(1000);
$("div").fadeOut(1000);
$("div").fadeToggle(1000);
// fadeTo() : 修改透明度,速度和透明度必写!
$("div").fadeTo(1000, 0.5); 

停止动画排队:

// stop 方法必须写到动画的前面
$('div').children("ul").stop().slideToggle(3000);

自定义动画:

$("div").animate({ width: 500 }, 500);

4、属性操作

// 获取元素固有的属性值
console.log($("a").prop("href")); 
console.log($('input').prop("checked")); // 获取 input 复选框的 状态
console.log($("div").data("index")); // 获取 div 自定义属性 data-index 的值
// 设置元素固有的属性值
$("a").prop("title", "我们都挺好"); 

5、文本属性值

// 1. 获取设置元素内容 html()
console.log($("div").html());
$("div").html("123"); // 设置

// 2. 获取设置元素文本内容 text()
console.log($("div").text());
$("div").text("123"); // 设置

// 3. 获取设置表单值 val()
console.log($("input").val());
$("input").val("123"); // 设置

6、元素操作

返回指定祖先元素:

console.log($(".four").parent().parent().parent());
console.log($(".four").parents()); // 也包括了 body 和 html
console.log($(".four").parents(".one"));

遍历元素:

let colorArr = ["red", "green", "blue"];
let sum = 0;
  
// $.each("jQuery对象/dom对象/数组", function (index, domEle) {})
// $("jQuery对象/dom对象/数组").each(function(){})
$.each($("div"), function (index, domEle) {
  $(domEle).css("color", colorArr[index]);
  sum += parseInt($(domEle).text());
});

console.log(sum);

创建添加删除元素:

/* 1、创建元素 */
let newLi = $("
  • 创建的li
  • "
    ); let newDiv = $("
    我是后妈生的
    "
    ); /* 2、添加元素 */ // 内部添加 $("ul").append(newLi); // 塞最后面 $("ul").prepend(newLi); // 塞最前面 // 外部添加 $(".test").before(newDiv); /* 3、删除元素 */ $("ul").remove(); // 自我删除 $('ul').empty() // 删除自己的所有子节点 $("ul").html(""); // 等同于 empty()

    7、尺寸、位置操作

    元素大小:

    // 1. width():获取设置元素 width和height大小
    console.log($("div").width()); 
    // 2. innerWidth():获取设置元素 width和height + padding 大小
    console.log($("div").innerWidth());
    // 3. outerWidth():获取设置元素 width和height + padding + border 大小
    console.log($("div").outerWidth());
    // 4. outerWidth(true):获取设置 width和height + padding + border + margin
    console.log($("div").outerWidth(true));
    // height 的获取也类似上面的方法
    

    元素位置:

    .father {
      position: relative;
      margin: 100px;
      /* 此处省略 宽高 */
    }
    
    .son {
      position: absolute;
      left: 10px;
      top: 10px;
      /* 此处省略 宽高 */
    }
    
    // 1、offset():获取设置距离文档的位置(偏移)
    console.log($(".son").offset()); // {"top": 110,"left": 110}
    // 2、position():获取距离带有定位父级位置(偏移),如果没有带有定位的父级,则以文档为准
    // 这个方法只能获取不能设置偏移
    console.log($(".son").position()); // {"top": 10,"left": 10}
    

    被卷去的头部:

    // scrollTop():被卷去的头部
    // scrollLeft():被卷去的左侧
    $(document).scrollTop(100);
    
    // 页面滚动事件
    let boxTop = $(".container").offset().top; // 距离文档的距离
    $(window).scroll(function () {
      console.log($(document).scrollTop());
      if ($(document).scrollTop() >= boxTop) {
        $(".back").fadeIn();
      } else {
        $(".back").fadeOut();
      }
    });
    
    // 返回顶部
    $(".back").click(function () {
      // 太生硬了,加点动画会更合适点
      // $(document).scrollTop(0);
      // 动画优化:❗不能是文档而是html和body做动画
      $("body,html").stop().animate({ scrollTop: 0 });
    });
    

    8、事件

    事件注册:

    /* 1. 单个事件注册 */
    $("div").click(function() {
        $(this).css("background", "purple");
    });
    
    /* 2. 事件处理on */
    // (1) on可以绑定1个或者多个事件处理程序
    $("div").on({
        mouseenter: function() {
            $(this).css("background", "skyblue");
        },
        click: function() {
            $(this).css("background", "purple");
        },
        mouseleave: function() {
            $(this).css("background", "blue");
        }
    });
    $("div").on("mouseenter mouseleave", function() {
        $(this).toggleClass("current");
    });
    // (2) on可以实现事件委托(委派)
    // click 是绑定在ul 身上的,但是 触发的对象是 ul 里面的小li
    $("ul").on("click", "li", function() {
        alert(11);
    });
    // (3) on可以给未来动态创建的元素绑定事件
    $("ol").on("click", "li", function() {
        alert(11);
    })
    var li = $("
  • 我是后来创建的
  • "
    ); $("ol").append(li);

    事件解绑:

    // 1. 事件解绑 off 
    $("div").off();  // 这个是解除了div身上的所有事件
    $("div").off("click"); // 这个是解除了div身上的点击事件
    $("ul").off("click", "li");
    // 2. one() 但是它只能触发事件一次
    $("p").one("click", function() {
        alert(11);
    })
    

    自动触发事件:

    // 1.元素.事件()
    $("div").click(); // 会触发元素的默认行为
    // 2.元素.trigger("事件")
    $("div").trigger("click"); // 会触发元素的默认行为
    $("input").trigger("focus");
    // 3.元素.triggerHandler("事件") 就是不会触发元素的默认行为
    $("div").triggerHandler("click");
    $("input").on("focus", function() {
        $(this).val("你好吗");
    });
    $("input").triggerHandler("focus");
    

    事件对象:

    $("div").on("click", function(event) {
        event.stopPropagation();
    })
    

    拷贝对象:$.extend([deep], targetObj, obj);

    var targetObj = {};
    var obj = { id: 1 };
    $.extend(targetObj, obj); // 默认为 false 浅拷贝
    $.extend(true, targetObj, obj); // 深拷贝
    

    9、Ajax

    $.ajax({
      type: "get", // 请求方式
      url: "url", // 请求路径
      dataType: "json", // 预期返回一个 json 类型数据
      success: function (data) {
        console.log(data); // data是形参名,代表返回的数据
      },
    });
    

    10、插件推荐

    (1)瀑布流 (waterfall.js)

    网址:http://www.htmleaf.com/jQuery/pubuliuchajian/201601093003.html

    具体使用:

    <link rel="stylesheet" href="css/normalize.css" />
    <link rel="stylesheet" type="text/css" href="css/default.css" />
    <style>
      #gallery-wrapper {
        position: relative;
        max-width: 75%;
        width: 75%;
        margin: 50px auto;
      }
      img.thumb {
        width: 100%;
        max-width: 100%;
        height: auto;
      }
      .white-panel {
        position: absolute;
        background: white;
        border-radius: 5px;
        box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3);
        padding: 10px;
      }
      .white-panel:hover {
        box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.5);
        margin-top: -5px;
        -webkit-transition: all 0.3s ease-in-out;
        -moz-transition: all 0.3s ease-in-out;
        -o-transition: all 0.3s ease-in-out;
        transition: all 0.3s ease-in-out;
        cursor: pointer;
      }
    style>
    
    <section id="gallery-wrapper">
      <article class="white-panel">
        <img src="images/P_000.jpg" class="thumb" />
      article>
      ....
    section>
    
    <script src="js/jquery-1.11.0.min.js">script>
    <script src="js/pinterest_grid.js">script>
    <script>
      $(function () {
        $("#gallery-wrapper").pinterest_grid({
          no_columns: 4,
          padding_x: 10,
          padding_y: 10,
          margin_bottom: 50,
          single_column_breakpoint: 700,
        });
      });
    script>
    

    (2)图片懒加载 (EasyLazyload.js)

    网址:https://www.jq22.com/jquery-info11629

    具体使用:

    <style>
      img {
        display: block;
        margin: 0 auto;
        margin-top: 100px;
      }
    style>
    
    <img data-lazy-src="images/P_000.jpg" />
    ....
    
    <script src="js/jquery.min.js">script>
    <script src="js/EasyLazyload.min.js">script>
    <script>
      lazyLoadInit({
        showTime: 1100,
        onLoadBackEnd: function (i, e) {
          console.log("onLoadBackEnd:" + i);
        },
        onLoadBackStart: function (i, e) {
          console.log("onLoadBackStart:" + i);
        },
      });
    script>
    

    (3)全屏滚动 (fullpage.js)

    gitHub:https://github.com/alvarotrigo/fullPage.js
    中文翻译网站:http://www.dowebok.com/demo/2014/77/(推荐)

    具体使用:

    <link rel="stylesheet" href="css/fullpage.min.css" />
    <style>
      #fp-nav ul li a.active span,
      #fp-nav ul li a span {
        background-color: red !important;
      }
    
      .section1 {
        background: url(http://idowebok.u.qiniudn.com/77/1.jpg) 50%;
      }
    
      .section2 {
        background: url(http://idowebok.u.qiniudn.com/77/2.jpg) 50%;
      }
    
      .section3 {
        background: url(http://idowebok.u.qiniudn.com/77/3.jpg) 50%;
      }
    
      .section4 {
        background: url(http://idowebok.u.qiniudn.com/77/4.jpg) 50%;
      }
    style>
    
    <div id="dowebok">
      <div class="section section1">
        <h3>第一屏h3>
      div>
      <div class="section section2">
        <h3>第二屏h3>
      div>
      <div class="section section3">
        <h3>第三屏h3>
      div>
      <div class="section section4">
        <h3>第四屏h3>
      div>
    div>
    
    <script src="js/jquery.min.js">script>
    <script src="js/fullpage.min.js">script>
    <script>
      $(function () {
        $("#dowebok").fullpage({
          sectionsColor: ["pink", "#4BBFC3", "#7BAABE", "#f90"],
          navigation: true,
        });
      });
    script>
    

    (4)bootstrap 框架

    bootstrap 框架也是依赖于 jQuery 开发的,因此里面的 js插件使用 ,也必须引入jQuery 文件。


    三、相关案例

    (1)高亮显示

    『jQuery 使用手册』_第1张图片

    $(function () {
      $(".wrap li").hover(
        // 鼠标悬停:其它li透明度变为0.5
        function () {
          $(this).siblings().stop().fadeTo(400, 0.5);
        },
        // 鼠标离开:其它li透明度恢复原样
        function () {
          $(this).siblings().stop().fadeTo(400, 1);
        }
      );
    });
    

    (2)手风琴

    手风琴

    $(function () {
      $(".king li").mouseenter(function () {
        // 自己
        $(this)
          .stop().animate({ width: 224 })
          .find(".small").stop().fadeOut()
          .siblings(".big").stop().fadeIn();
        // 兄弟
        $(this)
          .siblings("li").stop().animate({ width: 69 })
          .find(".small").stop().fadeIn()
          .siblings(".big").stop().fadeOut();
      });
    });
    

    (3)购物车

    $(function () {
      // 全选
      $(".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").change(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");
        }
      });
    
      // +
      $(".increment").click(function () {
        // 获取现有的数量
        let num = $(this).siblings(".itxt").val();
        // +1
        num++
        // 赋值回填
        $(this).siblings(".itxt").val(num)
        // 单价
        let singleP = $(this).parents('.p-num').siblings('.p-price').html().substr(1)
        // 计算新的小计总金额
        let total = (singleP * num).toFixed(2)
    
        // 赋值回填
        $(this).parents('.p-num').siblings('.p-sum').html('¥'+ total)
    
        getSum(); // 重新计算
      });
    
      // -
      $(".decrement").click(function () {
        // 获取现有的数量
        let num = $(this).siblings(".itxt").val();
        // -1
        if(num === 1) return false
        num--
        // 赋值回填
        $(this).siblings(".itxt").val(num)
        // 单价
        let singleP = $(this).parents('.p-num').siblings('.p-price').html().substr(1)
        // 计算新的小计总金额
        let total = (singleP * num).toFixed(2)
    
        // 赋值回填
        $(this).parents('.p-num').siblings('.p-sum').html('¥'+ total)
    
        getSum(); // 重新计算
      });
    
      // 手动改变数量框
      $('.itxt').change(function(){
        let num = $(this).val()
        let p = $(this).parents('.p-num').siblings('.p-price').html().substr(1)
        $(this).parents('.p-num').siblings('.p-sum').html('¥'+ (p * num).toFixed(2))
        getSum(); // 重新计算
      })
      
      getSum(); // 一进入页面就计算
    
      // 计算总数
      function getSum() {
        let count = 0;
        let money = 0;
        // 计算总数量
        $(".itxt").each(function (i, ele) {
          count += parseInt($(ele).val());
        });
        $(".amount-sum em").text(count);
        // 计算总价格
        $(".p-sum").each(function (i, ele) {
          money += parseFloat($(ele).text().substr(1));
        });
        $(".price-sum em").text("¥" + money.toFixed(2));
      }
    
      // 单机删除
      $('.p-action a').click(function(){
        $(this).parents('.cart-item').remove()
        getSum(); // 重新计算
      })
      // 删除选中
      $('.remove-batch').click(function(){
        $('.j-checkbox:checked').parents('.cart-item').remove()
        getSum(); // 重新计算
      })
      // 清空购物车
      $('.clear-all').click(function(){
        $('.cart-item').remove()
        getSum() // 重新计算
      })
    });
    

    (4)电梯导航

    $(function(){
        // 节流阀
        let flag = true;
    
        // 获取需要显示 电梯导航 的盒子位置
        let toolTop = $(".recommend").offset().top;
    
        // 首次加载页面,隐藏 电梯导航
        toggleTool();
    
        // 显示/隐藏 电梯导航
        function toggleTool() {
        if ($(document).scrollTop() >= toolTop) {
            $(".fixedtool").fadeIn();
        } else {
            $(".fixedtool").fadeOut();
        }
        }
    
        $(window).scroll(function () {
        // 监测 电梯导航 的 显示/隐藏
        toggleTool();
    
        // 页面滚动的过程,给对应的电梯导航li 添加高亮
        // 思路:遍历每个楼层的距离文档高度,做出判断添加
        if (flag) {
            $(".floor .w").each(function (i, ele) {
            if ($(document).scrollTop() >= $(ele).offset().top) {
                $(".fixedtool li").eq(i).addClass("current").siblings().removeClass();
            }
            });
        }
        });
    
        $(".fixedtool li").click(function () {
        flag = false;
        // 获取点击了具体项的索引值
        let index = $(this).index();
        // 获取点击项的距离文档位置的大小
        let distance = $(".floor .w").eq(index).offset().top;
        // 最后,实现位置跳转(❗这里同时也触发了上面的滚动事件,造成Bug,用到节流阀的知识)
        $("body,html")
            .stop()
            .animate({ scrollTop: distance }, function () {
            flag = true;
            });
        // 同时,自身的高亮也要切换显示
        $(this).addClass("current").siblings().removeClass();
        });
    })
    

    (5)微博发布

    // 1.点击发布按钮
    $(".btn").on("click", function() {
        // 新增标签
        var li = $("
  • "
    ); li.html($(".txt").val() + " 删除"); $("ul").prepend(li); // 添加动作 li.slideDown(); // 下拉添加效果 $(".txt").val(""); // 清空输入框内容 }) // 2.点击的删除按钮 // $("ul a").click(function() { // ❌此时的click不能给动态创建的a添加事件 // alert(11); // }) // on可以给动态创建的元素绑定事件 $("ul").on("click", "a", function() { $(this).parent().slideUp(function() { $(this).remove(); }); })

    (6)toDoList

    『jQuery 使用手册』_第2张图片

    body {
      margin: 0;
      padding: 0;
      font-size: 16px;
      background: #cdcdcd;
    }
    
    header {
      height: 50px;
      background: #333;
      background: rgba(47, 47, 47, 0.98);
    }
    
    section {
      margin: 0 auto;
    }
    
    label {
      float: left;
      width: 100px;
      line-height: 50px;
      color: #ddd;
      font-size: 24px;
      cursor: pointer;
      font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    }
    
    header input {
      float: right;
      width: 60%;
      height: 24px;
      margin-top: 12px;
      text-indent: 10px;
      border-radius: 5px;
      box-shadow: 0 1px 0 rgba(255, 255, 255, 0.24),
        0 1px 6px rgba(0, 0, 0, 0.45) inset;
      border: none;
    }
    
    input:focus {
      outline-width: 0;
    }
    
    h2 {
      position: relative;
    }
    
    span {
      position: absolute;
      top: 2px;
      right: 5px;
      display: inline-block;
      padding: 0 5px;
      height: 20px;
      border-radius: 20px;
      background: #e6e6fa;
      line-height: 22px;
      text-align: center;
      color: #666;
      font-size: 14px;
    }
    
    ol,
    ul {
      padding: 0;
      list-style: none;
    }
    
    li input {
      position: absolute;
      top: 2px;
      left: 10px;
      width: 22px;
      height: 22px;
      cursor: pointer;
    }
    
    p {
      margin: 0;
    }
    
    li p input {
      top: 3px;
      left: 40px;
      width: 70%;
      height: 20px;
      line-height: 14px;
      text-indent: 5px;
      font-size: 14px;
    }
    
    li {
      height: 32px;
      line-height: 32px;
      background: #fff;
      position: relative;
      margin-bottom: 10px;
      padding: 0 45px;
      border-radius: 3px;
      border-left: 5px solid #629a9c;
      box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07);
    }
    
    ol li {
      cursor: move;
    }
    
    ul li {
      border-left: 5px solid #999;
      opacity: 0.5;
    }
    
    li a {
      position: absolute;
      top: 2px;
      right: 5px;
      display: inline-block;
      width: 14px;
      height: 12px;
      border-radius: 14px;
      border: 6px double #fff;
      background: #ccc;
      line-height: 14px;
      text-align: center;
      color: #fff;
      font-weight: bold;
      font-size: 14px;
      cursor: pointer;
    }
    
    footer {
      color: #666;
      font-size: 14px;
      text-align: center;
    }
    
    footer a {
      color: #666;
      text-decoration: none;
      color: #999;
    }
    
    @media screen and (max-device-width: 620px) {
      section {
        width: 96%;
        padding: 0 2%;
      }
    }
    
    @media screen and (min-width: 620px) {
      section {
        width: 600px;
        padding: 0 10px;
      }
    }
    
    <header>
      <section>
        <label for="title">ToDoListlabel>
        <input type="text" id="title" name="title" placeholder="添加ToDo" required="required" autocomplete="off"
        />
      section>
    header>
    <section>
      <h2>正在进行 <span id="todocount">span>h2>
      <ol id="todolist" class="demo-box">
        
      ol>
      <h2>已经完成 <span id="donecount">span>h2>
      <ul id="donelist">
        
      ul>
    section>
    <footer>Copyright © 2023 todolist.cnfooter>
    
    $(function () {
      // 一开始就渲染数据结构
      load() 
    
      // 1. 按下回车 把完整数据 存储到本地存储里面
      $("#title").on("keydown", function (event) {
        if (event.keyCode === 13) {
          if (!$(this).val()) {
            alert("请输入您要的操作");
          } else {
            let originalData = getData();
            originalData.push({
              title: $(this).val(),
              done: false,
            });
            saveData(originalData);
            load()
            $(this).val('')
          }
        }
      });
    
      // 3. toDoList 删除操作
      $('ol,ul').on('click', 'a', function(){
        let data = getData()
        let index = $(this).attr('id')
        data.splice(index, 1)
        saveData(data)
        load()
      })
    
      // 4. toDoList 正在进行和已完成选项操作
      $('ol,ul').on('change', 'input', function(){
        let data = getData()
        let index = $(this).siblings('a').attr('id')
        // 同步数据到本地
        data[index].done = $(this).prop('checked')
        saveData(data)
        load()
      })
    
      // 获取本地数据
      function getData() {
        let data = localStorage.getItem("todolist");
        if (data !== null) {
          return JSON.parse(data);
        } else {
          return [];
        }
      }
      // 保存数据到本地
      function saveData(data) {
        localStorage.setItem("todolist", JSON.stringify(data));
      }
    
      // 渲染加载数据
      function load(){
        let data = getData()
        let todoCount = 0
        let doneCount = 0
        $('ol,ul').empty()
        $.each(data, function(i, n){
          if(!n.done){
            $('ol').prepend('
  • ' + n.title + '

    + i + '">
  • '
    ) todoCount++ } else{ $('ul').prepend('
  • ' + n.title + '

    + i + '">
  • '
    ) doneCount++ } }) $('#todocount').text(todoCount) $('#doneCount').text(doneCount) } });

    你可能感兴趣的:(jQuery,jquery,前端)