第二阶段:Html基础 day53 前端--Html基础之jQuery

目录

  • 1. jQuery简介
  • 2. jQuery优势
  • 3. jQuery内容
  • 4. jQuery版本
  • 5. jQuery对象
    • 5.1 定义
    • 5.2 jQuery对象转成DOM对象
    • 5.3 jQuery对象和DOM对象的使用
  • 6. jQuery基础语法
    • 6.1 语法
    • 6.2 查找标签
      • 6.2.1 基本选择器
      • 6.2.2 基本筛选器
      • 6.2.3 筛选器方法
    • 6.3 操作标签
      • 6.3.1 样式操作
      • 6.3.2 位置操作
      • 6.3.3 尺寸
      • 6.3.4 文本操作
      • 6.3.5 属性操作
      • 6.3.6 文档处理
    • 6.4 事件
      • 6.4.1 常用事件
      • 6.4.2 事件绑定
      • 6.4.3 移除事件
      • 6.4.4 阻止后续事件执行
      • 6.4.5 阻止事件冒泡
      • 6.4.6 页面载入
      • 6.4.7 事件委托
    • 6.5 动画效果
      • 6.5.1 介绍
      • 6.5.2 点赞特效简单示例:
    • 6.6 拓展
      • 6.6.1 .each
      • 6.6.2 .data()
      • 6.6.3 插件(了解)

前端之jQuery

1. jQuery简介

  • jQuery是一个轻量级的、兼容多浏览器的JavaScript库。
  • jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Write less, do more.“

2. jQuery优势

  • 一款轻量级的JS框架。
    • jQuery核心js文件才几十kb,不会影响页面加载速度。
  • 丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象的相邻元素,JS可能要写好几行代码,而jQuery一行代码就搞定了,再比如要将一个表格的隔行变色,jQuery也是一行代码搞定。
  • 链式表达式。
    • jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。
  • 事件、样式、动画支持。
    • jQuery还简化了js操作css的代码,并且代码的可读性也比js要强。
  • Ajax操作支持。
    • jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信。
  • 跨浏览器兼容。
    • jQuery基本兼容了现在主流的浏览器,不用再为浏览器的兼容问题而伤透脑筋。
  • 插件扩展开发。
    • jQuery有着丰富的第三方的插件,例如:树形菜单、日期控件、图片切换插件、弹出窗口等等基本前端页面上的组件都有对应插件,并且用jQuery插件做出来的效果很炫,并且可以根据自己需要去改写和封装插件,简单实用。

3. jQuery内容

  • 选择器
  • 筛选器
  • 样式操作
  • 文本操作
  • 属性操作
  • 文档处理
  • 事件
  • 动画效果
  • 插件
  • each、data、Ajax

下载链接:jQuery官网

中文文档:jQuery AP中文文档

4. jQuery版本

  • x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日)
  • x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x,最终版本:2.2.4 (2016年5月20日)
  • x:不兼容IE678,只支持最新的浏览器。需要注意的是很多老的jQuery插件不支持3.x版。目前该版本是官方主要更新维护的版本。

维护IE678是一件让人头疼的事情,一般我们都会额外加载一个CSS和JS单独处理。值得庆幸的是使用这些浏览器的人也逐步减少,PC端用户已经逐步被移动端用户所取代,如果没有特殊要求的话,一般都会选择放弃对678的支持。

5. jQuery对象

5.1 定义

  • jQuery对象就是通过jQuery包装DOM对象后产生的对象。

  • jQuery对象是 jQuery独有的。如果一个对象是 jQuery对象,那么它就可以使用jQuery里的方法。

    例如:$(“#i1”).html()

$("#i1").html()的意思是:获取id值为 i1的元素的html代码。其中 html()是jQuery里的方法。

相当于: document.getElementById("i1").innerHTML;

虽然 jQuery对象是包装 DOM对象后产生的,但是 jQuery对象无法使用 DOM对象的任何方法;同理 DOM对象也没不能使用 jQuery里的方法。

注意:一个约定,我们在声明一个jQuery对象变量的时候在变量名前面加上$。

5.2 jQuery对象转成DOM对象

var $variable = jQuery对象
var variable = DOM对象

$variable[0]//jQuery对象转成DOM对象

5.3 jQuery对象和DOM对象的使用

$("#i1").html();  //jQuery对象可以使用jQuery的方法
$("#i1")[0].innerHTML;  // DOM对象使用DOM的方法

6. jQuery基础语法

6.1 语法

$(selector/选择器).action()

6.2 查找标签

6.2.1 基本选择器

6.2.1.1 id选择器

$("#id")

6.2.1.2 标签选择器

$("tagName")

6.2.1.3 class选择器

$(".className")

6.2.1.4 配合使用

$("div.c1")  // 找到有c1 class类的div标签

6.2.1.5 所有元素选择器

$("*")

6.2.1.6 组合选择器

$("#id, .className, tagName")

6.2.1.7 层级选择器

x和y可以为任意选择器

$("x y");// x的所有后代y(子子孙孙)
$("x > y");// x的所有儿子y(儿子)
$("x + y")// 找到所有紧挨在x后面的y
$("x ~ y")// x之后所有的兄弟y

6.2.2 基本筛选器

6.2.2.1 方法

:first // 第一个
:last // 最后一个
:eq(index)// 索引等于index的那个元素
:even // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index)// 匹配所有大于给定索引值的元素
:lt(index)// 匹配所有小于给定索引值的元素
:not(元素选择器)// 移除所有满足not条件的标签
:has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)

例子:

$("div:has(h1)")// 找到所有后代中有h1标签的div标签
$("div:has(.c1)")// 找到所有后代中有c1样式类的div标签
$("li:not(.c1)")// 找到所有不包含c1样式类的li标签
$("li:not(:has(a))")// 找到所有后代中不含a标签的li标签

练习:

自定义模态框,使用jQuery实现弹出和隐藏功能。




  
  
  
  自定义模态框
  




div class="cover hide"/div
div class="modal hide"
  label for="i1"姓名/label
  input id="i1" type="text"
   label for="i2"爱好/label
  input id="i2" type="text"
  input type="button" id="i3" value="关闭"
/div
script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"/script
script
  var tButton = $("#i0")[0];
  tButton.onclick=function () {
    var coverEle = $(".cover")[0];
    var modalEle = $(".modal")[0];

    $(coverEle).removeClass("hide");
    $(modalEle).removeClass("hide");

  };

  var cButton = $("#i3")[0];
  cButton.onclick=function () {
    var coverEle = $(".cover")[0];
    var modalEle = $(".modal")[0];

    $(coverEle).addClass("hide");
    $(modalEle).addClass("hide");

  }
/script
/body
/html

6.2.2.2 属性筛选器

[attribute]
[attribute=value]// 属性等于
[attribute!=value]// 属性不等于

例子:

// 示例



$("input[type='checkbox']");// 取到checkbox类型的input标签
$("input[type!='text']");// 取到类型不是text的input标签

6.2.2.3 表单筛选器

:text
:password:file
:radio
:checkbox
:submit
:reset
:button

例子:

$(":checkbox")  // 找到所有的checkbox

表单对象属性:

:enabled
:disabled
:checked
:selected

例子:

找到可用的input标签

$("input:enabled") // 找到可用的input标签

找到被选中的option:



$(":selected")  // 找到所有被选中的option

6.2.3 筛选器方法

  1. 下一个元素:

    $("#id").next()
    $("#id").nextAll()
    $("#id").nextUntil("#i2")
    
  2. 上一个元素:

    $("#id").prev()  
    $("#id").prevAll()
    $("#id").prevUntil("#i2")
    
  3. 父亲元素:

    $("#id").parent()
    $("#id").parents()  // 查找当前元素的所有的父辈元素$("#id").parentsUntil() // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。
    
  4. 儿子和兄弟元素:

    $("#id").children();// 儿子们
    $("#id").siblings();// 兄弟们
    
  5. 查找

    搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法。

    $("div").find("p") //等价于`$("div p")`
    
  6. 筛选

    筛选出与指定表达式匹配的元素集合。这个方法用于缩小匹配的范围。用逗号分隔多个表达式。

    $("div").filter(".c1")  // 从结果集中过滤出有c1样式类的,等价于$("div.c1")
    
  7. 补充:

    .first() // 获取匹配的第一个元素
    .last() // 获取匹配的最后一个元素
    .not() // 从匹配元素的集合中删除与指定表达式匹配的元素
    .has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
    .eq() // 索引值等于指定值的元素
    
  8. 案例

    
    
    
      
      
      
      左侧菜单示例
      
    
    
    
    button id="b1"屠龙宝刀,点击就送/button
    hr
    button id="b2"屠龙宝刀,点击就送/button
    
    script src="jquery-3.2.1.min.js"/script
    script
      // clone方法不加参数true,克隆标签但不克隆标签带的事件
      ("#b1").on("click", function () {
        $(this).clone().insertAfter(this);
      });
      // clone方法加参数true,克隆标签并且克隆标签带的事件
      ("#b2").on("click", function () {
        $(this).clone(true).insertAfter(this);
      });
    /script
    /body
    /html
    

    6.4 事件

    6.4.1 常用事件

    click(function(){...})
    hover(function(){...})
    blur(function(){...})
    focus(function(){...})
    change(function(){...})
    keyup(function(){...})
    

    6.4.1.1 keydown和keyup事件组合示例

    
    
    
        
        
        Title
    
    
    
    
    
    table border="1"
      thead
      tr
        th#/th
        th姓名/th
        th操作/th
      /tr
      /thead
      tbody
      tr
        tdinput type="checkbox"/td
        tdEgon/td
        td
          select
            option value="1"上线/option
            option value="2"下线/option
            option value="3"停职/option
          /select
        /td
      /tr
      tr
        tdinput type="checkbox"/td
        tdAlex/td
        td
          select
            option value="1"上线/option
            option value="2"下线/option
            option value="3"停职/option
          /select
        /td
      /tr
      tr
        tdinput type="checkbox"/td
        tdYuan/td
        td
          select
            option value="1"上线/option
            option value="2"下线/option
            option value="3"停职/option
          /select
        /td
      /tr
      tr
        tdinput type="checkbox"/td
        tdEvaJ/td
        td
          select
            option value="1"上线/option
            option value="2"下线/option
            option value="3"停职/option
          /select
        /td
      /tr
      tr
        tdinput type="checkbox"/td
        tdGold/td
        td
          select
            option value="1"上线/option
            option value="2"下线/option
            option value="3"停职/option
          /select
        /td
      /tr
      /tbody
    /table
    
    input type="button" id="b1" value="全选"
    input type="button" id="b2" value="取消"
    input type="button" id="b3" value="反选"
    
    script src="jquery-3.3.1.js"/script
    script
    
        var flag = false;
        // shift按键被按下的时候
    
        (window).keydown(function (event) {
            console.log(event.keyCode);
            if (event.keyCode === 16){
                flag = true;
            }
        });
        // shift按键被抬起的时候
        (window).keyup(function (event) {
            console.log(event.keyCode);
            if (event.keyCode === 16){
                flag = false;
            }
        });
        // select标签的值发生变化的时候
        $("select").change(function (event) {
            // 如果shift按键被按下,就进入批量编辑模式
            // shift按键对应的code是16
            // 判断当前select这一行是否被选中
            console.log($(this).parent().siblings().first().find(":checkbox"));
            var isChecked = $(this).parent().siblings().first().find(":checkbox").prop("checked");
            console.log(isChecked);
            if (flag && isChecked) {
                // 进入批量编辑模式
                // 1. 取到当前select选中的值
                var value = $(this).val();
                // 2. 给其他被选中行的select设置成和我一样的值
                // 2.1 找到那些被选中行的select
                var $select = $("input:checked").parent().parent().find("select")
                // 2.2 给选中的select赋值
                $select.val(value);
            }
        });
    /script
    /body
    /html
    

    6.4.1.2 hover事件示例

    
    
    
        
        Title
    
    
    

    苍茫的天涯是我的哎,绵绵的青山脚下一片海!

    script src="jQuery-3.3.1.js" /script script $('p').hover( function () { alert('来啦,老弟') }, function () { alert('慢走哦~') } ) /script /body /html

    6.4.1.3 实时监听input输入值变化示例

    
    
    
      
      
      
      实时监听input输入值变化
    
    
    
    
    script src="jquery-3.2.1.min.js"/script
    script
      /*
    
    - oninput是HTML5的标准事件
    - 能够检测textarea,input:text,input:password和input:search这几个元素的内容变化,
    - 在内容修改后立即被触发,不像onchange事件需要失去焦点才触发
    - oninput事件在IE9以下版本不支持,需要使用IE特有的onpropertychange事件替代
    - 使用jQuery库的话直接使用on同时绑定这两个事件即可。
    - */
    $("#i1").on("input propertychange", function () {
    alert($(this).val());
      })
    /script
    /body
    /html
    

    6.4.2 事件绑定

    `.on( events [, selector ],function(){})`
    
    • events: 事件
    • selector: 选择器(可选的)
    • function: 事件处理函数

    6.4.3 移除事件

    `.off( events [, selector ][,function(){}])`   //`off()` 方法移除用 `.on()`绑定的事件处理程序。
    
    • events: 事件
    • selector: 选择器(可选的)
    • function: 事件处理函数

    6.4.4 阻止后续事件执行

    return false; // 常见阻止表单提交等
    
    e.preventDefault();
    

    例子:

    
    
    
        
        阻止默认事件
    
    
    
    form action=""
        button id="b1"点我/button
    /form
    
    script src="jquery-3.3.1.min.js"/script
    script
        $("#b1").click(function (e) {
            alert(123);
            //return false;
            e.preventDefault();
        });
    /script
    /body
    /html
    

    注意:像click、keydown等DOM中定义的事件,我们都可以使用.on()方法来绑定事件,但是hover这种jQuery中定义的事件就不能用.on()方法来绑定了。

    想使用事件委托的方式绑定hover事件处理函数,可以参照如下代码分两步绑定事件:

    $('ul').on('mouseenter', 'li', function() {//绑定鼠标进入事件
        $(this).addClass('hover');
    });
    
    $('ul').on('mouseleave', 'li', function() {//绑定鼠标划出事件
        $(this).removeClass('hover');
    });
    

    6.4.5 阻止事件冒泡

    
    
    
        
        阻止事件冒泡
    
    
    

    点我

    1. jQuery.fn.extend(object)

    一个对象的内容合并到jQuery的原型,以提供新的jQuery实例方法。

    
    

    单独写在文件中的扩展:

    (function(jq){
      jq.extend({
        funcName:function(){
        ...
        },
      });
    })(jQuery);
    

    例子:

    自定义的jQuery登录验证插件

    • HTML文件
    
    
    
      
      
      
      登录校验示例
      
    
    
    
    
    
    div
      form action="" class="login-form" novalidate
    
        
    /form /div script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"/script script src="validate.js"/script script $.validate(); /script /body /html
    • JS文件
    "use strict";
    (function ($) {
      function check() {
        // 定义一个标志位,表示验证通过还是验证不通过
        var flag = true;
        var errMsg;
        // 校验规则
        $("form input[type!=':submit']").each(function () {
          var labelName = $(this).prev().text();
          var inputName = $(this).attr("name");
          var inputValue = $(this).val();
          if ($(this).attr("required")) {
            // 如果是必填项
            if (inputValue.length === 0) {
              // 值为空
              errMsg = labelName + "不能为空";
              $(this).next().text(errMsg);
              flag = false;
              return false;
            }
            // 如果是密码类型,我们就要判断密码的长度是否大于6位
            if (inputName === "password") {
              // 除了上面判断为不为空还要判断密码长度是否大于6位
              if (inputValue.length < 6) {
                errMsg = labelName + "必须大于6位";
                $(this).next().text(errMsg);
                flag = false;
                return false;
              }
            }
            // 如果是手机类型,我们需要判断手机的格式是否正确
            if (inputName === "mobile") {
              // 使用正则表达式校验inputValue是否为正确的手机号码
              if (!/^1[345678]\d{9}$/.test(inputValue)) {
                // 不是有效的手机号码格式
                errMsg = labelName + "格式不正确";
                $(this).next().text(errMsg);
                flag = false;
                return false;
              }
            }
          }
        });
        return flag;
      }
    
      function clearError(arg) {
        // 清空之前的错误提示
        (arg).next().text("");
      }
      // 上面都是我定义的工具函数
      .extend({
        validate: function () {
          ("form :submit").on("click", function () {
          return check();
        });
        ("form :input[type!='submit']").on("focus", function () {
          clearError(this);
        });
        }
      });
    })(jQuery);
    

你可能感兴趣的:(第二阶段:Html基础 day53 前端--Html基础之jQuery)