首页 前端知识 JQuery详细使用

JQuery详细使用

2024-09-30 23:09:18 前端知识 前端哥 656 893 我要收藏

1.jQuery 介绍

1.1JavaScript 库

JavaScript 库:即 library,是一个封装好的特定的集合(方法和函数)。从封装一大堆函数的角度理解库,就是在这个库中,封装了很多预先定义好的函数在里面,比如动画 animate、hide、show 等。 简单理解就是一个 JS 文件,里面对原生 JS 代码进行了封装,存放到里面。这样我们就可以快速而方便的使用封装好的功能。 比如 jQuery,就是为了快速方便的操作 DOM,里面基本都是函数(方法)。 常见的 JavaScript 库:jQuery、Prototype、YUI、Dojo、Ext.js、移动端的 zepto 等,这些库都是对原生 JS 的封装,内部都是用 JS 实现的。

1.2jQuery 的概念

jQuery 总体概况如下。
●jQuery 是一个快速、简洁的 JavaScript 库,其设计的宗旨是 “write less, do more”,即倡导写更少的代码,做更多的事情。
●j 就是 JavaScript;Query 是查询;意思是指将 JavaScript 中的 DOM 做了封装,我们可以快速的使用里面的功能。
●jQuery 封装了 JavaScript 常用的功能代码,优化了 DOM 操作、事件处理、动画设计和 Ajax 交互。
●学习 jQuery 的本质:就是学习调用这些函数(方法)。
●jQuery 出现的目的是加快qd人员的开发速度,我们可以非常方便的调用和使用它,从而提升开发效率。

1.3jQuery 的优点

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

2.jQuery 的基本使用

2.1jQuery 的下载

jQuery的官网地址:   https://jquery.com/
各个版本的下载:      https://code.jquery.com/

2.2.jQuery 的入口函数

理解 $(function(){})
Query 中常见的两种入口函数:

// 第一种,简单易用
$(function() {
    ... // 此处是页面 DOM 加载完成的入口
});

// 第二种,繁琐,但是也可以实现
$(document).ready(function() {
    ... // 此处是页面 DOM 加载完成的入口
});

总结:
●等着 DOM 结构渲染完毕,即可执行内部代码。不必等到所有外部资源加载完成,jQuery 帮我们完成了封装。
●相当于原生 JS 的 DOMContentLoaded。

//js写法
window.onload=function(){
  
}

●不同于原生 JS 中的 load 事件是等页面文档、外部的 js 文件、外部的 css 文件、图片加载完成才执行内部代码。
●更推荐使用第一种方式。

2.3 jQuery 的顶级对象 $

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

2.4jQuery 对象和 DOM 对象(重要)

使用 jQuery 方法和原生 JS 获取的元素是不一样的,总结如下:
●用原生 JS 获取的对象就是 DOM 对象。
●jQuery 方法获取的元素就是 jQuery 对象
●jQuery 对象的本质是:利用 $ 对 DOM 对象包装后产生的对象(伪数组形式存储)。
注意:只有 jQuery 对象才能使用 jQuery 方法,DOM 对象则使用原生的 JS 方法。

2.5jQuery 对象和 DOM 对象转换

DOM 对象与 jQuery 对象之间是可以相互转换的。因为原生 JS 比 jQuery 更大,原生的一些属性和方法 jQuery 没有封装,想要使用这些属性和方法需要把 jQuery 对象转换成 DOM 对象才能使用。

// 1.DOM对象转换成jQuery对象,方法只有一种
var box = document.querySelector('#box');  // 获取DOM对象
var jQueryObject = $(box);  // 把DOM对象转换为 jQuery 对象

// 2.jQuery 对象转换为 DOM 对象有两种方法:
//   2.1 jQuery对象[索引值]
var domObject1 = $('div')[0];

//   2.2 jQuery对象.get(索引值)
var domObject2 = $('div').get(0);

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

3.jQuery 选择器

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

3.1基础选择器

$("选择器")   //  里面选择器直接写 CSS 选择器即可,但是要加引号 
名称用法描述
ID选择器$(“#id值”)获取指定的ID的元素
通配符选择器$(“*”)匹配所有元素
类选择器$(“.class值”)获取同一类class的元素
标签选择器$(“标签名”) 例如: $(“div”)获取同一类标签的所有元素
分组选择器(并集选择器)$(“div,p,li”)选取多个元素
交集选择器$(“li.current”)选取li标签,并且此标签拥有class=“current”
选择当前元素$(this)选取当前HTML元素

3.2层级选择器

层级选择器最常用的两个分别是:后代选择器和子代选择器。

名称用法描述
后代选择器$(“ul li”)使用空格,代表后代选择器,获取ul 下的所有的li元素,包括儿子,孙子,重孙子等…
子代选择器$(“ul>li”)使用>号,获取儿子层级的元素,注意,并不会获取孙子层级的元素

基础选择器和层级选择器代码案例:

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

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>选择器</title>
    </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 src="jquery-3.6.3/jquery-3.6.3.js"></script>
        <script>
            $(function () {
                //1.获取所有的div
                console.log($("div"));
                //2.获取div,且拥有class="nav"
    console.log($("div.nav"));
                //3.获取我是ul的
                console.log($("ul>li"));
            });
        </script>
    </body>

    </html>

3.3筛选选择器

筛选选择器,顾名思义就是在所有选项中选择满足条件的进行筛选选择,常见如下:

名称用法描述
:first$(“li:first”)获取第一个li元素
:last$(“li:last”)获取最后一个li元素
:eq(index)$(“li:eq(2)”)获取到的li元素中,选择索引号为2的元素,索引号从0开始
:odd$(“li:odd”)获取到的li元素中,选择索引号为奇数的元素
:even$(“li:even”)获取到的li元素中,选择索引号为偶数的元素
:not(selector)$(“li:not(:last-child)”)选择器不选最后1个元素
[属性]$(“img[title]”)拥有title属性的img
[属性=值]$(“img[title=‘美女’]”)拥有title属性,且属性值为美女
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>选择器</title>
</head>

<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
    </ul>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $("li:first").css("color", "red");
        $("li:last").css("color", "blue");
        //索引从0
        $("li:eq(3)").css("color", "pink");
        //奇数
        $("li:odd").css("background-color", "yellow");
 </script>
</body>
</html>

3.4查找(进行筛选)

查找jQuery对象内部的元素的子孙/兄弟/父母元素, 并封装成新的jQuery对象返回

语法用法描述
parent()$(“li”).parent()查找父级元素
children(selector)$(“ul”).children(“li”)$(“ul>li”) , 找子元素
find(selector)$(“ul”).find(“li”)$(“ul li”),后代选择器
siblings(selector)$(“.first”).siblings(“li”)先找 class="first"元素,找兄弟元素,不包括自己
nextAll(selector)$(“.first”).nextAll()查找当前元素之后的所有同辈元素
prevAll(selector)$(“.first”).prevAll()查找当前元素之前的所有同辈元素
hasClass(class)$(“div”).hasClass(“protected”)判断当前元素是否包含指定的class值,如果有true

4.1演示children

image.png

4.2演示 siblings 找兄弟元素4.3演示 nextAll() 找后面的同辈元素4.4演示 prevAll() 找前面的同辈元素4.5演示 hasClass4.6综合案例
<!DOCTYPE html>
    <html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>选择器</title>
    </head>

    <body>
        <div class="grandfather">
            <div class="father">
                <div class="son">儿子</div>
            </div>
        </div>

        <div class="nav">
            <p>我是 p</p>
            <div>
                <p>我是 p</p>
            </div>
        </div>
        <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
        <script>
            // 注意:都是方法,要带括号
            $(function () {
                // 1.父
                console.log($(".son").parent());
    // 2.子
                // (1) 选择亲儿子,类似子代选择器
                console.log($(".nav").children("p"));
                // (2) 选择所有后代,类似后代选择器
                $(".nav").find("p").css("color", "red");

                // 3.兄
                console.log($(".nav").siblings());
            });
        </script>

    </body>

    </html>

●jQuery 设置样式

$('div').css('属性', '值');

●jQuery 里面的排他思想

// 想要多选一的效果,排他思想:当前元素设置样式,其余的兄弟元素清除样式。
$(this).css("color","red");
$(this).siblings().css("color","");

●隐式迭代

// 遍历内部 DOM 元素(伪数组形式存储)的过程就叫做隐式迭代。
// 简单理解:给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作,方便我们调用。
$('div').hide();  // 页面中所有的div全部隐藏,不用循环操作

●链式编程

// 链式编程是为了节省代码量,看起来更优雅。
$(this).css('color', 'red').sibling().css('color', '');

3.5表单相关

语法用法描述
:input$(“:input”)匹配所有 input, textarea, select 和 button 元素
:text$(“:text”)匹配所有的单行文本框
:checkbox$(“:checkbox”)匹配所有复选框
:radio$(“:radio”)匹配所有单选按钮
:checked$(“:checked”)匹配所有选中的被选中元素(复选框、单选框等,不包括select中的option)
:selected$(“:selected”)匹配所有选中的option元素

3.6过滤

在jQuery对象内部的元素中找出部分匹配的元素, 并封装成新的jQuery对象返回

语法描述
first()
last()
eq(index)$(“li”).eq(2) 等价于 $(“li:eq(2)”) 索引从0开始$(“li:eq(2)”) 索引从0开始
filter(selector)对当前元素提要求
not(selector)对当前元素提要求, 并取反
has(selector)对子孙元素提要求

4.jQuery样式操作

jQuery 中常用的样式操作有两种,css 和 设置类样式方法

4.1 操作 css 方法

jQuery 可以使用 css 方法来修改简单元素样式:也可以操作类,修改多个样式。 常用一下三种方式:

// 1.参数只写属性名,则是返回属性值
var strColor = $(this).css('color');

// 2.参数是属性名,属性值,逗号分隔,是设置一组样式,属性必须加引号,值如果是数字可以不用跟单位和引号
$(this).css("color", "red");

// 3.参数可以是对象形式,方便设置多组样式。属性名和属性值用冒号隔开, 属性可以不用加引号
$(this).css({ "color":"white","font-size":"20px"});

注意:css() 多用于样式少时操作,多了则不太方便。
原生的js操作样式: document.querySelector(“#div1”).style.color=“red”;

4.2 设置类样式方法

作用等同于以前的 classList,可以操作类样式。

注意:操作类里面的参数不可以加 .。
常用的三种方式:

// 1.添加类 addClass('sy1 sy2 sy3...')
$("div").addClass("current");

// 2.删除类 当没有参数则代表删除class的所有的值
$("div").removeClass("current");

// 3.切换类 有这个样式则删除,没有则添加
$("div").toggleClass("current");

注意:
●设置类样式的方法比较适合样式多时操作,可以弥补 css() 的不足。
●原生 JS 中className 会覆盖元素原先里面的类名,jQuery 里面类操作只是对指定类进行操作,不影响原先的类名。

3示例
售后保障商品评价规格与包装商品介绍商品介绍-内容image.png

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>操作样式</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul {
            list-style: none;
        }

        .tab {
            background-color: lemonchiffon;
            width: 402px;
            margin: 50px auto;
        }

        .tab_list {
            height: 30px;
            border: 1px solid #5500ff;
        }

        .tab_list li {
            width: 100px;
            float: left;
 height: 30px;
            line-height: 30px;
            text-align: center;
            cursor: pointer;
        }

        .tab_list li.current {
            background-color: lavender;
            color: mediumpurple;
        }

        .tab_content {
            width: 402px;
            height: 200px;
            border: 1px solid #5500ff;
        }

        .tab_content .item {
            display: none;
        }
    </style>
</head>

<body>
    <div class="tab">
        <div class="tab_list">
            <ul>
                <li class="current">商品介绍</li>
                <li>规格与包装</li>
<li>售后保障</li>
                <li>商品评价</li>
            </ul>
        </div>
        <div class="tab_content">
            <div class="item" style="display: block;">
                商品介绍-内容
            </div>
            <div class="item">
                规格与包装-内容
            </div>
            <div class="item">
                售后保障-内容
            </div>
            <div class="item">
                商品评价-内容
            </div>
        </div>
    </div>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        //入口函数
        $(function () {
            //1. 通过jquery选择器,找到所有的li
            $(".tab_list li").click(function () {
                // this 就是dom对象 <li>标签
                // $(this) 就是 jquery对象 
$(this).addClass("current").siblings().removeClass("current");

                //获取你的点击li的索引
                let index = $(this).index();

                //让index对应的div,显示
                $(".tab_content .item").eq(index).show().siblings().hide();

            });
        });
    </script>
</body>

</html>

5.jQuery 效果

jQuery 给我们封装了很多动画效果,最为常见的如下:
●显示隐藏:show() / hide() / toggle()
●划入划出:slideDown() / slideUp() / slideToggle()
●淡入淡出:fadeIn() / fadeOut() / fadeToggle() / fadeTo()
●自定义动画:animate()
注意:
●动画或者效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队执行。
●jQuery 提供了一个方法,可以停止动画排队:stop()。

5.1显示隐藏

显示隐藏动画,常见方法有 3 个:show() / hide() / toggle()
语法规范如下:
1.1显示语法show

show([speed],[easing],[fn])
<1> 三个参数都可以省略,无动画直接显示
<2> speed: 速度, slow,normal, fast 或者直接写毫秒数值 1000
<3> easing: 切换效果 linear 线性 swing 默认值
<4> fn: 回调函数,在动画完成后执行此函数,每个元素执行1次

1.2隐藏语法hide

hide([speed],[easing],[fn])
<1> 三个参数都可以省略,无动画直接显示
<2> speed: 速度, slow,normal, fast 或者直接写毫秒数值 1000
<3> easing: 切换效果 linear 线性 swing 默认值
<4> fn: 回调函数,在动画完成后执行此函数,每个元素执行1次

1.3切换语法toggle

toggle([speed],[easing],[fn])
<1> 三个参数都可以省略,无动画直接显示
<2> speed: 速度, slow,normal, fast 或者直接写毫秒数值 1000
<3> easing: 切换效果 linear 线性 swing 默认值
<4> fn: 回调函数,在动画完成后执行此函数,每个元素执行1次

1.4案例

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            background-color: khaki;
        }
    </style>
</head>

<body>
    <div class="box">盒子1</div>
    <button class="showBtn">显示</button>
    <button class="hideBtn">隐藏</button>
    <button class="toggleBtn">切换</button>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $(function () {

            $(".showBtn").click(function () {
                $(".box").show();
            });

            $(".hideBtn").click(function () {
                $(".box").hide(2000, 'linear', function () {
                    alert('看不见!');
                });
            });

            $(".toggleBtn").click(function () {
                $(".box").toggle();
            });
 });
    </script>
</body>

</html>

5.2划入划出

滑入滑出动画,常见有三个方法:slideDown() / slideUp() / slideToggle() ;
语法规范如下:

2.1下滑效果slideDown

slideDown([speed],[easing],[fn])
<1> 三个参数都可以省略,无动画直接显示
<2> speed: 速度, slow,normal, fast 或者直接写毫秒数值 1000
<3> easing: 切换效果 linear 线性 swing 默认值
<4> fn: 回调函数,在动画完成后执行此函数,每个元素执行1次

2.2上滑效果slideUp

slideUp([speed],[easing],[fn])
<1> 三个参数都可以省略,无动画直接显示
<2> speed: 速度, slow,normal, fast 或者直接写毫秒数值 1000
<3> easing: 切换效果 linear 线性 swing 默认值
<4> fn: 回调函数,在动画完成后执行此函数,每个元素执行1次

2.3滑动切换slideToggle

slideToggle([speed],[easing],[fn])
<1> 三个参数都可以省略,无动画直接显示
<2> speed: 速度, slow,normal, fast 或者直接写毫秒数值 1000
<3> easing: 切换效果 linear 线性 swing 默认值
<4> fn: 回调函数,在动画完成后执行此函数,每个元素执行1次

2.4案例

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            background-color: khaki;
        }
    </style>
</head>

<body>
    <div class="box">盒子1</div>
    <button>向下滑动</button>
    <button>向上滑动</button>
    <button>切换</button>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $(function () {

            $("button").eq(0).click(function () {
                $(".box").slideDown();
            });

            $("button").eq(1).click(function () {
                $(".box").slideUp(2000, 'linear', function () {
                    alert('看不见!');
                });
            });

            $("button").eq(2).click(function () {
                $(".box").slideToggle();
            });

        });
    </script>
</body>
</html>

5.3淡入淡出

淡入淡出动画,常见有四个方法:fadeIn() / fadeOut() / fadeToggle() / fadeTo() ;
语法规范如下:

3.1淡入效果fadeIn
fadeIn([speed],[easing],[fn])
<1> 三个参数都可以省略,无动画直接显示
<2> speed: 速度, slow,normal, fast 或者直接写毫秒数值 1000
<3> easing: 切换效果 linear 线性 swing 默认值
<4> fn: 回调函数,在动画完成后执行此函数,每个元素执行1次
3.2淡出效果fadeOut
fadeOut([speed],[easing],[fn])
<1> 三个参数都可以省略,无动画直接显示
<2> speed: 速度, slow,normal, fast 或者直接写毫秒数值 1000
<3> easing: 切换效果 linear 线性 swing 默认值
<4> fn: 回调函数,在动画完成后执行此函数,每个元素执行1次
3.3切换效果 fadeToggle
fadeToggle([speed],[easing],[fn])
<1> 三个参数都可以省略,无动画直接显示
<2> speed: 速度, slow,normal, fast 或者直接写毫秒数值 1000
<3> easing: 切换效果 linear 线性 swing 默认值
<4> fn: 回调函数,在动画完成后执行此函数,每个元素执行1次
3.4渐进方式调整到指定的不透明度 fadeTo
fadeTo([speed],opacity,[easing],[fn])
opacity 透明度,必须写 取值0~1之间
3.5案例

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            background-color: khaki;
        }
    </style>
</head>

<body>
    <div class="box">盒子1</div>
    <button>淡入效果</button>
    <button>淡出效果</button>
    <button>淡入淡出切换</button>
    <button>修改透明度</button>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $(function () {

            $("button").eq(0).click(function () {
                $(".box").fadeIn(1000);
            });

            $("button").eq(1).click(function () {
                $(".box").fadeOut(1000);
            });

            $("button").eq(2).click(function () {
                $(".box").fadeToggle(1000);
            });

            $("button").eq(3).click(function () {
                $(".box").fadeTo(1000, 0.5);
            });

        });
    </script>
</body>

</html>

5.4.停止动画排队

动画或者效果一旦触发就得执行,如果多次触发就会造成动画或者效果排队执行,停止动画排队的方法是:stop()。
●stop() 方法用于停止动画或效果
●stop() 写到动画或者效果的前面,相当于停止结束上一次动画
总结:每次使用动画之前,先调用 stop(),再调用动画。

5.5自定义动画

自定义动画非常强大,通过参数的传递可以模拟以上所有动画,方法为 animate()。

animate(params,[speed],[easing],[fn])
<1> params:想要更改的样式属性,以对象形式传递,必须写, css样式
<2> speed: 速度, slow,normal, fast 或者直接写毫秒数值 1000
<3> easing: 切换效果 linear 线性 swing 默认值
<4> fn: 回调函数,在动画完成后执行此函数,每个元素执行1次
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义动画</title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            background-color: khaki;
        }
    </style>
</head>

<body>
    <div class="box">盒子1</div>
    <button id="startBtn">开始动画</button>
    <button id="stopBtn">停止动画</button>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $(function () {
            $("#startBtn").click(function () {
                $(".box").animate({ width: '800px', opacity: 0.4 }, 2000, 'linear', function () {
                    alert('动画结束');
                });
            });
        });
    </script>

</body>

</html>

6.jQuery 属性操作

jQuery 常用属性操作有三种:prop() / attr() / data()

6.1元素固有属性值 prop()

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

获取属性
prop("属性名")

设置属性
prop("属性名","属性值");

注意: prop() 除了普通属性操作,更适合操作表单属性:disabled / checked / selected等。

6.2元素自定义属性 attr()

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

获取属性
attr("属性")

设置属性
attr("属性":"属性值")

注意:attr() 除了普通属性操作,更适合操作自定义属性。(该方法也可以获取 H5 自定义属性)

2.1通过removeAttr(attr)删除属性

 $("选择器").removeAttr("属性名");

6.3数据缓存 data()

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

附加数据
data("name","value")  //向北选元素附加数据

获取数据
data("name")

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

6.4案例

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>操作属性</title>
</head>

<body>
    <a href="http://www.baidu.com" title="百度">百度</a>
    <input type="checkbox" checked>
    <select name="province">
        <option value="湖北" selected>湖北</option>
        <option value="湖南">湖南</option>
        <option value="广东">广东</option>
    </select>
    <div index="1" data-index="2">我是 div</div>
    <span>123</span>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $(function () {
            //1.获取固有属性值
            console.log($("a").prop("href"));
            console.log($("a").prop("title"));
            $("a").prop("title", "去百度一下");

            $("select>option").eq(1).prop("selected", true);
            $("input[type='checkbox']").prop("checked", false);
            //2.获取自定义属性
            console.log($("div").attr("index"));
            console.log($("div").data("index"));
        });
    </script>

</body>

</html>

7.jQuery 文本属性值

jQuery 的文本属性值常见操作有三种:html() / text() / val()。
分别对应 JS 中的 innerHTML、innerText 和 value 属性。\

7.1普通元素内容 html()

html()  //获取元素的内容

html("内容") //设置元素的内容

7.2普通元素文本内容 text()

text()  //获取元素的文本内容

text("文本内容") //设置元素的文本内容

7.3表单的值 val()

val()  //获取表单的值

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

7.4演示代码:


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

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>html(),text(),val()</title>
    </head>

    <body>
        <div>
            <span>我是内容</span>
        </div>
        <input type="text" value="请输入内容">
        <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
        <script>
            $(function () {
                //1.获取div中的内容
                console.log($("div").html());
                console.log($("div").text());
                //2.获取输入框中的值
                console.log($("input").val());

                $("input").val('admin');

            });
        </script>
    </body>

    </html>

## 8.jQuery 元素操作(DOM操作)

jQuery 元素操作主要讲的是用 jQuery 方法,操作标签的遍历、创建、添加、删除等操作。

### 8.1遍历元素

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

$(“选择器”).each(function(index,domElement){

});

语法解释:
1. each方法遍历匹配的每一个元素,主要用DOM处理
2. 有2个参数
index 每个元素的索引,索引从0开始
domElement 每个DOM对象,不是jquery对象
3. 如果需要调用jquery的函数,则需要转换成jquery对象 $(domElement)


**注意**:此方法用于遍历 jQuery 对象中的每一项,回调函数中元素为 DOM 对象,想要使用 jQuery 方法需要转换

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

        语法解释:
             1.  $.each()方法用于遍历任何对象,主要用于数据处理, 例如遍历数组,对象
             2.  index 每个元素的下标
                 element 每个DOM对象

注意:此方法用于 jQuery 对象中的每一项,回调函数中元素为 DOM 对象,想要使用 jQuery 方法需要转换。\
案例\
![image.png](https://img-blog.csdnimg.cn/img_convert/3608f13299647945d4456ac8cfb22d74.png)

### 8.2.创建、添加、删除元素

jQuery 方法操作元素的创建、添加、删除方法很多,重点使用部分如下:

#### 8.2.1创建

类似于原生的document.createElement("li")\
动态创建了一个 \<li>

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

#### 8.2.2内部添加

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

    element.append(内容);

    内容,可以是HTML 元素,jQuery 对象,DOM 元素

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

    element.prepend(内容);

    内容,可以是HTML 元素,jQuery 对象,DOM 元素

#### 8.2.3外部添加

把内容放入目标元素后面

    element.after("内容")

把内容放入目标元素前面

    element.before("内容")

内部添加和外部添加的区别:\
① 内部添加元素,生成之后,它们是父子关系\
② 外部添加元素,生成以后,他们是兄弟关系

#### 8==.2.4删除元素==

删除匹配的元素(本身)

    element.remove();

删除匹配元素集合中所有的子节点

    element.empty();

清空匹配的元素内容

    element.html("")

① remove 是删除元素本身\
② empty和html("") 作用等价

注意:以上只是元素的创建、添加、删除方法的常用方法,其它方法请参考 API。

### 8.3综合案例

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>jquery提供的dom操作方法</title>
</head>

<body>
    <ul>
        <li>原先的 li</li>
    </ul>
    <div class="test">我是原先的 div</div>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $(function () {

            //1.创建元素
            var li = $("<li>我是后来创建的li</li>");
            //2.追加到ul中
            $("ul").append(li);
            // li.appendTo($("ul"));
            //3.在原先的div下面新增一个div
            var div = $("<div>我是新的div</div>");
            $("div.test").after(div);

            //4.删除
            $("ul>li").eq(0).remove();

        });
    </script>
</body>

</html>

9.jQuery对数组的操作

9.1 $.each 遍历

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

    语法解释:
         1.  $.each()方法用于遍历任何对象,主要用于数据处理, 例如遍历数组,对象
         2.  index 每个元素的下标
             element 数组中每个值

image.png

9.2 $.unique() 去重

注意:执行$.unique()之前,需要先调用sort对数据进行排序

var arr2 = [5, 2, 4, 6, 5, 3, 1, 2, 6, 7, 8];
arr2.sort();
$.unique(arr2);
console.log(arr2.concat());

9.3 $.inArray

返回元素在数组的下标,不存在返回-1var arr3 = new Array(1, 2, 3, 4, 5);
  //参数1:搜索的值
  //参数2:数组
  console.log($.inArray(13, arr3));

10.jQuery 尺寸、位置操作

10.1.jQuery 尺寸操作

jQuery 尺寸操作包括元素宽高的获取和设置,且不一样的 API 对应不一样的盒子模型。

语法用法
width()/height()取得匹配元素的宽度和高度值 ,只算 width/height
innerWidth()/innerHeight()取得匹配元素的宽度和高度值,包含 padding
outerWidth()/outerHeight()取得匹配元素的宽度和高度值,包含 padding,border
outerWidth(true)/outerHeight(true)取得匹配元素的宽度和高度值,包含 padding,border,margin

●以上参数为空,则是获取相应的值,返回number类型
●如果参数是数字,则修改值
●数字可以不必写单位

<body>
    <div></div>
    <script>
        $(function() {
            // 1. width() / height() 获取设置元素 width和height大小 
            console.log($("div").width());
            // $("div").width(300);

            // 2. innerWidth() / innerHeight()  获取设置元素 width和height + padding 大小 
            console.log($("div").innerWidth());

            // 3. outerWidth()  / outerHeight()  获取设置元素 width和height + padding + border 大小 
            console.log($("div").outerWidth());

            // 4. outerWidth(true) / outerHeight(true) 获取设置 width和height + padding + border + margin
            console.log($("div").outerWidth(true));
        })
    </script>
</body>

注意:有了这套 API 我们将可以快速获取和设置宽高,至于其他属性想要获取和设置,还要使用 css() 等方法配合。

10.2jQuery 位置操作

jQuery 的位置操作主要有 3 个:offset()、position()、scrollTop()/scrollLeft(),具体介绍如下:

10.2.1 offset() 设置或者获取元素偏移

1offset方法设置或者返回被选元素相对于文档的偏移坐标,跟父级没有关系。
2该方法有2个属性, left 和 top
offset().top 用于获取距离文档顶部的距离。
offset().left 用于获取距离文档左侧的距离。
3 可以设置元素的偏移 offset({top:10,left:10})

10.2.2 location()

1position()方法用于返回被选元素相对于带有定位的父级偏移坐标,如果父级没有定位,则以文档为准。
2该方法有2个属性, left 和 top
position().top 用于获取距离定位父级顶部的距离。
position().left 用于获取距离定位父级左侧的距离。
3该方法只能获取,不能设置值\

<body>
    <div class="father">
        <div class="son"></div>
    </div>
        
    <div class="back">返回顶部</div>
    <div class="container"></div>
   
    <script>
        $(function() {
            // 1. 获取设置距离文档的位置(偏移) offset
            console.log($(".son").offset());
            console.log($(".son").offset().top);
            // $(".son").offset({
            //     top: 200,
            //     left: 200
            // });
      
            // 2. 获取距离带有定位父级位置(偏移) position   如果没有带有定位的父级,则以文档为准
            // 这个方法只能获取不能设置偏移
            console.log($(".son").position());
            // $(".son").position({
            //     top: 200,
            //     left: 200
            // });
      
            // 3. 被卷去的头部
            $(document).scrollTop(100);
            // 被卷去的头部 scrollTop()  / 被卷去的左侧 scrollLeft()
            // 页面滚动事件
var boxTop = $(".container").offset().top;
            $(window).scroll(function() {
                // console.log(11);
                console.log($(document).scrollTop());
                if ($(document).scrollTop() >= boxTop) {
                    $(".back").fadeIn();
                } else {
                    $(".back").fadeOut();
                }
            });
            // 返回顶部
            $(".back").click(function() {
                // $(document).scrollTop(0);
                $("body, html").stop().animate({
                    scrollTop: 0
                });
                // $(document).stop().animate({
                //     scrollTop: 0
                // }); 不能是文档而是 html和body元素做动画
            })
        })
    </script>
</body>

11.jQuery 事件

11.1jQuery 事件注册

jQuery 为我们提供了方便的事件注册机制,使开发人员易于操作,优缺点如下:
●优点:操作简单,且不用担心事件覆盖等问题。
●缺点:普通的事件注册不能做事件委托,且无法实现事件绑定,需要借助其它方法。

 element.事件(function(){});

$("div").click(
   function(){
     //事件处理的代码
   }
);

其他事件和原生事件基本一致
例如: mourseover,mouseout,blur,focus,change,keydown,keyup,resize,scroll等。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: khaki;
        }
    </style>
</head>

<body>
    <div>内容</div>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $(function () {
            //注册事件
            $("div").click(function () {
                $(this).css("background-color", "red");
            });
            $("div").mouseover(function () {
                $(this).css("background-color", "blue");
            });
  });
    </script>
</body>

</html>

11.2 jQuery 事件处理

因为普通注册事件方法的不足,jQuery 又开发了多个处理方法,重点讲解如下:
●on():用于事件绑定,也是目前最好用的事件绑定方法
●off():事件解绑
●trigger() / triggerHandler():事件触发。

11.2.1事件处理 on() 绑定事件

因为普通注册事件方法不足,jQuery 又创建了多个新的事件绑定方法 bind() / live() / delegate() / on() 等,其中最好用的是 on()。

on方法优势1-可以绑定多个事件,多个处理事件处理程序
可以绑定多个事件,多个处理事件处理程序。

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

如果事件处理程序相同

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



    <style>
      div{
      width: 100px;
      height: 100px;
      background-color: pink;
    }

    .current {
      background-color: purple;
    }
    </style>
      <script src="jquery.min.js"></script>
      </head>
      <body>
      <div></div>
      <script>
      $(function() {
        // 1.单个事件注册
        // $("div").click(function() {
        //     $(this).css("background", "purple");
        // })

        // $("div").mouseenter(function() {
        //     $(this).css("background", "skyblue");
        // })

        // 2.事件处理 on
        // (1) 使用 on 绑定多个事件
        // $("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");
        })
      })
      </script>

on方法优势2-可以事件委派操作\
可以事件委派操作,事件委派定义是,把原来加给子元素身上的事件绑定在父元素上,就是把事件委派给父元素。

    $("ul").on('click','li',function(){
          alert("Hello World!");
    })

在此之前有bind(),live(),delegate()等方法来处理事件绑定或者事件委派


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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div style="background-color:red">
        <p>这是一个段落。</p>
        <button>请点击这里</button>
    </div>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $(function () {
            $("div").on("click", "button", function () {
                $("p").slideToggle();
            });
        });
    </script>
</body>

</html>

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

$("div").on('click','p',function(){
    alert('我可以给动态生成的元素绑定事件!');
});

$("div").append($("<p>我是动态创建的p标签</p>"));



// (3) on 可以给动态创建的元素绑定事件
// $("ol li").click(function() {
//     alert(11);
// })
$("ol").on("click", "li", function() {
    alert("hello");
})
var li = $("<li>我是后来创建的</li>")
$("ol").append(li);

11.3事件处理 off() 解绑事件

当某个事件上面的逻辑,在特定需求下不需要的时候,可以把该事件上的逻辑移除,这个过程也称为事件解绑。jQuery 为我们提供了多种事件解绑方法:die() / undelegate() / off() 等,甚至还有只触发一次的事件绑定方法 one(),在这里重点看一下 off()。
off()方法可以移除通过on()方法添加的事件处理程序。

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

11.4 one()来绑定事件,事件只触发一次

$(选择器).one("click",function(){
    
})
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: khaki;
        }
    </style>
</head>

<body>
    <div></div>
    <ul>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
    </ul>
    <p>我是p</p>
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $(function () {
            $("div").on({
                click: function () {
                    alert("我点击了")
                },
                mouseover: function () {
                    alert("我鼠标经过了");
                }
            });
            $("ul").on("click", "li", function () {
                alert(11);
            })
            // 1.事件解绑 off
            // $("div").off(); // 解除了 div 身上的所有事件
            $("div").off("mouseover");  // 只解除 div 身上的mouseover事件
            $("ul").off("click", "li"); // 解除事件委托

            // 2.one() 只能触发事件一次
            $("p").one("click", function () {
                alert(11);
            })
        })
    </script>
</body>

</html>

11.5事件处理 trigger() 自动触发事件

有些时候,在某些特定条件下,我们希望某些事件可以自动触发,比如轮播图自动播放功能跟点击左右侧按钮一致。可以利用定时器自动触发左右按钮点击事件,不必鼠标点击触发。由此 jQuery 为我们提供了两个自动触发事件 trigger() 和 triggerHandler()。
第1种: trigger()

element.click()  //第一种简写形式
element.trigger("type")  //第二种自动触发模式

第2种: triggerHandler()

element.triggerHandler(type) //第三种自动触发模式
triggerHandler 模式不会触发元素的默认行为
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div>div</div>
    <input type="text">
    <script src="jquery-3.6.3/jquery-3.6.3.js"></script>
    <script>
        $(function () {
            $("div").on("click", function () {
                alert(11);
            })

            // 自动触发事件
            // (1) 元素.事件()
            // $("div").click();
            // (2) 元素.trigger("事件类型")
            // $("div").trigger("click");
            // (3) 元素.triggerHandler() 不会触发元素的默认行为(例如:表单中的光标闪烁)
            setTimeout(() => {
                $("div").triggerHandler("click");
            }, 1000);
$("input").on("focus", function () {
                $(this).val("你好吗");
            })
            // $("input").triggerHandler("focus");
            $("input").trigger("focus");
        })
    </script>
</body>

</html>

11.6jQuery 事件对象

jQuery 对 DOM 中的事件对象 event 进行了封装,兼容性更好、获取更方便、使用变化不大。事件被触发,就会有事件对象的产生。

element.on(events,[selector],function(event){
  
});

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

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>阻止事件传播</title>
    <style type="text/css">
        .big {
            width: 150px;
            height: 150px;
            background-color: lightblue;
        }

        .small {
            width: 100px;
            height: 100px;
            background-color: lightgreen;
        }
    </style>
</head>

<body>
    <div class="big">
        <div class="small">

        </div>
    </div>
    <script src="jquery-3.6.3/jquery-3.6.3.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        $(function () {
            $(".small").click(function (event) {
                alert("点击了小块");
 //event.stopPropagation();//阻止了事件的传递
                return false;
            });
            $(".big").click(function () {
                alert("点击了大块");
            });
        });
    </script>
</body>
</html>

11.7改变

change() 内容改变 
注: 对于文本框,只有当该文本失去焦点的时候,才会触发change事件。 

11.8焦点

focus() 获取焦点 
blur() 失去焦点 

11.9鼠标

  mousedown 表示鼠标按下 
    mouseup表示鼠标弹起 
    mousemove表示鼠标进入 
    mouseenter表示鼠标进入 
    mouseover表示鼠标进入 
    mouseleave表示鼠标离开 
    mouseout表示鼠标离开 
进入事件有3个 mousemove mouseenter mouseover 
    mousemove :当鼠标进入元素,每移动一下都会被调用 
    mouseenter :当鼠标进入元素,调用一下,在其中移动,不调用 
    mouseover:当鼠标进入元素,调用一下,在其中移动,不调用 

mouseenter 和 mouseover的区别 
    mouseenter: 当鼠标经过其子元素不会被调用 
    mouseover:当鼠标经过其子元素会被调用 

mouseleave 和 mouseout的区别 
    mouseleave: 当鼠标经过其子元素不会被调用 
    mouseout:当鼠标经过其子元素会被调用 

11.10 键盘

keydown 表示按下键盘
keypress 表示按住键盘
keyup 表示键盘弹起
    这三者的区别分别表现在发生的 先后顺序,获取到的键盘按钮值,已经对输入框的文本取值这三方面
    先后顺序: 按照 keydown keypress keyup 顺序发生
    键盘按钮值:
    通过event对象的which属性获取键盘的值
    keydown和keyup 能获取所有按键,不能识别大小写
    keypress 不能获取功能键,如F1 SHIFT等,能够识别大小写
    文本取值:
    keydown和keypress:不能获取最后一个字符
    keyup: 获取所有字符
    如图所例,敲入ab
    发生的先后顺序是 keydown,keypress,keyup
    keydown和keyup取到大写B的ASCII码表 66,keypress取到小写b的ASCII码表 98.
    keydown和keypress只能取到文本值a, keyup可以取到ab 

11.11加载

页面加载有两种方式表示 
1. $(document).ready(function(){}); 
2. $(function(){}); 这种比较常用 
图片加载用load()函数 
3.  $("#img").load(function(){
      $("#msg").html("图片加载成功"); 
    });

11.12点击

click() 表示单击 
dblclick() 表示双击 
注: 空白键和回车键也可以造成click事件,但是只有双击鼠标才能造成dblclick事件
示例:
  $("#b").click(function(){
      $("#msg").html("单击按钮");
  });
  $("#b").dblclick(function(){
      $("#msg").html("双击按钮");
  });

12.jQuery Validate 表单验证

jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求。该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API。

12.1默认校验规则

序号规则描述
1required:true必须输入的字段。
2remote:“check.php”发送ajax请求验证(常用案例就是在注册时,验证用户名是否存在), // 注:请求返回的 response === true || response === ‘true’,才算验证通过,这需要后端的配
3email:true必须输入正确格式的电子邮件。
4url:true必须输入正确格式的网址。
5date:true必须输入正确格式的日期。日期校验 ie6 出错,慎用。
6dateISO:true必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。
7number:true必须输入合法的数字(负数,小数)。
8digits:true必须输入整数。
9creditcard:必须输入合法的信用卡号。
10equalTo:“#field”输入值必须和 #field 相同。
11accept:输入拥有合法后缀名的字符串(上传文件的后缀)。
12maxlength:5输入长度最多是 5 的字符串(汉字算一个字符)。
13minlength:10输入长度最小是 10 的字符串(汉字算一个字符)。
14rangelength:[5,10]输入长度必须介于 5 和 10 之间的字符串(汉字算一个字符)。
15range:[5,10]输入值必须介于 5 和 10 之间。
16max:5输入值不能大于 5。
17min:10输入值不能小于 10。

12.2案例

新建项目,添加需要的外部js

新建html页面,学习如何使用jquery表单验证
步骤1:导入 js 库

image.png


步骤2: 准备需要验证的表单

image.png

<form id="registerForm" action="xxxxx" method="get">
        <fieldset>
            <p>
                <label for="userName">用户名</label>
                <input type="text" name="userName" id="userName" />
            </p>
            <p>
                <label for="userPwd">密码</label>
                <input type="text" name="userPwd" id="userPwd" />
            </p>
            <p>
                <label for="rePwd">确认密码</label>
                <input type="text" name="rePwd" id="rePwd" />
            </p>
            <p>
                <label for="userEmail">邮箱</label>
                <input type="text" name="userEmail" id="userEmail" />
            </p>
            <p>
                <label for="userPhone">手机号</label>
                <input type="text" name="userPhone" id="userPhone" />
            </p>
            <p>
                <label for="tp">有推荐人请勾选</label>
                <input type="checkbox" name="tp" id="tp" />
            </p>
            <p>
                <label for="person">推荐人</label>
                <input type="text" name="person" id="person" />
            </p>
            <p><input type="submit" value="注册" /></p>
        </fieldset>
    </form>

步骤3:将校验规则写到 js 代码中
image.png

<script src="js/jquery-3.6.3.js"></script>
    <script src="js/jquery.validate.js"></script>
    <script>
        $(function () {

            // value用户输入的内容   element  input输入框
            $.validator.addMethod("phone", function (value, element, param) {
                var reg = /^1[3456789][0-9]{9}$/;
                return reg.test(value);
            }, "Mobile phone Numbers are illegal!");

            // 在键盘按下并释放及提交后验证提交表单
            $("#registerForm").validate({
                //规则
                rules: {
                    userName: { required: true, rangelength: [5, 10] },
                    userPwd: { required: true, minlength: 6 },
                    rePwd: { equalTo: "#userPwd" },
                    userEmail: { required: true, email: true },
                    userPhone: { required: true, phone: true },
                    person: { required: "#tp:checked" }
                },
                // required: "#tp:checked" 若复选框选中了,则person输入框必填
                //错误提示信息
                messages: {
                    userName: { required: '请填写用户名!', rangelength: '用户名长度为5-10位!' },
                    userPwd: { required: '请填写密码!', minlength: '密码长度最少6位!' },
                    rePwd: { equalTo: '密码不一致!' },
                    userEmail: { required: '请填写邮箱!', email: '不是一个合法邮箱!' },
                    userPhone: { required: '请填写手机号码!', phone: '手机号格式不对!' },
                    person: { required: '请填写推荐人!' }
 }
            });
        });
    </script>

步骤4:设置提示信息的样式\

<style type="text/css">
        .error {
            color: red !important;
            font-size: 14px;
            padding-left: 10px;
        }
</style>

13.jQuery 插件

jQuery 功能比较有限,想要更复杂的特效效果,可以借助 jQuery 插件完成。这些插件也是依赖于 jQuery 来完成的,所以必须引入 jQuery 文件,所以也被称为 jQuery 插件。
jQuery 插件常用的网站:

● jQuery 插件库:http://www.jq22.com
● jQuery 之家:http://www.htmleaf.com

jQuery 插件使用步骤:
●引入相关文件。(jQuery 文件和插件文件)
●复制相关 html、css、js(调用插件)

购物车案例

  <!DOCTYPE html>
    <html>

    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>我的购物车</title>
        <script src="jquery-3.6.3.min.js"></script>
        <script src="jquery.validate.min.js"></script>
        <style>
            * {
                margin: 0;
                padding: 0;
            }

            #cart {
                width: 80%;
                min-height: 400px;
                position: absolute;
                left: 50%;
                top: 100px;
                transform: translateX(-50%);
            }

            .cart-main {
                width: 100%;
                height: 100%;
            }

            .cart-thead {
                display: flex;
                flex-direction: row;
                justify-content: space-around;
            }

            .cart-thead .column {
                flex: 1;
            }

            .cart-list {
                width: 100%;
            }

            .cart-item-list {
                display: flex;
                flex-direction: row;
                justify-content: space-around;
                align-items: center;
            }

            .cart-item-list:hover {
                background-color: lightcyan;
            }

            .cart-item-list .cell {
                flex: 1;
            }

            .p-goods img {
                width: 60%;
                height: 60%;
                margin-top: 10%;
                margin-bottom: 10%;
            }

            .p-props {
                font-size: 12px;
                color: gray;
            }

            .quantity-form {
                width: 80px;
                height: 20px;
                display: flex;
                flex-direction: row;
            }

            .itxt {
                width: 30px;
                height: 20px;
                text-align: center;
            }

            .decrement,
            .increment {
                text-align: center;
                text-decoration: none;
                display: inline-block;
                width: 20px;
                height: 20px;
                border: 1px solid gray;
                /* cursor: not-allowed; */
            }

            .toolbar-right {
                display: flex;
                flex-direction: row;
                justify-content: flex-end;
            }

            .price-sum {
                margin-right: 10%;
            }
        </style>
    </head>

    <body>

        <div id="cart">
            <div class="cart-main">
                <div class="cart-thead">
                    <div class="column t-checkbox">
                        <div class="cart-checkbox">
                            <input type="checkbox" id="toggle-checkboxes_up" name="toggle-checkboxes" class="jdcheckbox" />
                            <label class="checked" for="">全选</label>
                        </div>
                    </div>
                    <div class="column t-goods">商品</div>
                    <div class="column t-props"></div>
                    <div class="column t-price">单价</div>
                    <div class="column t-quantity">数量</div>
                    <div class="column t-sum">小计</div>
                    <div class="column t-action">操作</div>
                </div>

                <div class="cart-list">
                    <div class="cart-item-list">
                        <div class="cell p-checkbox">
                            <input type="checkbox" name="goodsId" />
                        </div>
                        <div class="cell p-goods">
                            <img src="img/icon.png" />
                        </div>
                        <div class="cell p-props">颜色:除霾除醛基础款AC4074</div>
                        <div class="cell p-price">&yen;<span>100</span></div>
                        <div class="cell p-quantity">
                            <!-- 满赠 -->
                            <div class="quantity-form" promoid="50000118485">
                                <a href="javascript:void(0);" class="decrement disabled">-</a>
                                <input autocomplete="off" type="text" class="itxt" value="2" minnum="1">
                                <a href="javascript:void(0);" class="increment">+</a>
                            </div>
                            <div class="ac ftx-03 quantity-txt" _stock="stock_184793">有货</div>
                        </div>
                        <div class="cell t-sum">&yen;<span></span></div>
                        <div class="cell t-action">
                            <a href="">删除</a>
                        </div>
                    </div>

                    <div class="cart-item-list">
                        <div class="cell p-checkbox">
                            <input type="checkbox" name="goodsId" />
                        </div>
                        <div class="cell p-goods">
                            <img src="img/icon.png" />
                        </div>
                        <div class="cell p-props">颜色:除霾除醛基础款AC4074</div>
                        <div class="cell p-price">&yen;<span>50</span></div>
                        <div class="cell p-quantity">
                            <!-- 满赠 -->
                            <div class="quantity-form" promoid="50000118485">
                                <a href="javascript:void(0);" class="decrement disabled">-</a>
                                <input autocomplete="off" type="text" class="itxt" value="1" minnum="1">
                                <a href="javascript:void(0);" class="increment">+</a>
                            </div>
                            <div class="ac ftx-03 quantity-txt" _stock="stock_184793">有货</div>
                        </div>
                        <div class="cell t-sum">&yen;<span></span></div>
                        <div class="cell t-action">
                            <a href="">删除</a>
                        </div>
                    </div>
                </div>
                <div class="cart-item-list">
                    <div class="cell p-checkbox">
                        <input type="checkbox" name="goodsId" />
                    </div>
                    <div class="cell p-goods">
                        <img src="img/icon.png" />
                    </div>
                    <div class="cell p-props">颜色:除霾除醛基础款AC4074</div>
                    <div class="cell p-price">&yen;<span>10</span></div>
                    <div class="cell p-quantity">
                        <!-- 满赠 -->
                        <div class="quantity-form" promoid="50000118485">
                            <a href="javascript:void(0);" class="decrement disabled">-</a>
                            <input autocomplete="off" type="text" class="itxt" value="3" minnum="1">
                            <a href="javascript:void(0);" class="increment">+</a>
                        </div>
                        <div class="ac ftx-03 quantity-txt" _stock="stock_184793">有货</div>
                    </div>
                    <div class="cell t-sum">&yen; <span></span></div>
                    <div class="cell t-action">
                        <a href="">删除</a>
                    </div>
                </div>
            </div>

            <div class="toolbar-right">
                <div class="amount-sum">
                    已选择<em>0</em>件商品<b class="up"></b>
                </div>
                <div class="price-sum">
                    <div>
                        <span class="txt txt-new">总价:</span>
                        <span class="price sumPrice">&yen;<em>0.00</em></span>
                    </div>
                </div>
            </div>

        </div>
        </div>
        </div>
        <script>
            $(function () {
                function xiaoji() {
                    //遍历价格
                    $(".p-price span").each(function (index) {
                        //获取该价格
                        var price = parseFloat($(this).text().trim());
                        //获取该数量
                        var num = parseInt($(".itxt").eq(index).val());
                        //为小计赋值
                        $(".t-sum span").eq(index).text((price * num).toFixed(2));
                    })
                }
                xiaoji();

                function setTotalNumAndPrice() {
                    let totalPrice = 0;
                    let totalNum = 0;
                    $("input[name='goodsId']:checked").each(function () {
                        //获取当前索引
                        var index = $('input[name="goodsId"]').index(this);
                        //获得数量,累加数量
                        totalNum += parseInt($(".itxt").eq(index).val());
                        //获得小鸡,累加小计
                        totalPrice += parseFloat($(".t-sum span").eq(index).text().trim());
                    })
                    //赋值总量
                    $(".amount-sum em").text(totalNum);
                    //赋值总价
                    $(".sumPrice em").text(totalPrice.toFixed(2));
                }

                //全选取消 全选
                $("#toggle-checkboxes_up").click(function () {
                    //获取当前选中状态
                    let isChecked = $(this).prop("checked");
                    //根据这个状态给所有子选择框赋值
                    $("input[name='goodsId']").prop("checked", isChecked);
                    //并计算一遍总价和总量
                    setTotalNumAndPrice();
                })

                //单选和取消单选
                $("input[name='goodsId']").click(function () {
                    //利用被选框的数量和总框数量进行比较,不同则把取消全选框
                    var AllChecked = $("input[name='goodsId']:checked").length === $("input[name='goodsId']").length;
                    //更新全选框的状态
                    $("#toggle-checkboxes_up").prop("checked", AllChecked);
                    //计算一次
                    setTotalNumAndPrice();
                })

                //减少商品数量
                $(".decrement").click(function () {
                    var $input = $(this).siblings(".itxt");
                    var num = parseInt($input.val());
                    if (num > 1) {
                        $input.val(--num);
                        var price = parseFloat($(this).parent().parent().prev().find('span').text().trim());
                        console.log(price);
                        $(this).parent().parent().next().find('span').text((price * num).toFixed(2));
                    }
                    setTotalNumAndPrice();
                    if(num===1){
                        $(this).css("cursor","not-allowed");
                    }
                })

                //增加商品数量
                $(".increment").click(function () {
                    var $input = $(this).siblings(".itxt");
                    var num = parseInt($input.val());
                    if (num < 10) {
                        $input.val(++num);
                        var price = parseFloat($(this).parent().parent().prev().find('span').text().trim());
                        $(this).parent().parent().next().find('span').text((price * num).toFixed(2));
                    }
                    setTotalNumAndPrice();
                })
            })


        </script>

    </body>

    </html>
转载请注明出处或者链接地址:https://www.qianduange.cn//article/18827.html
标签
评论
发布的文章

JSON:API Normalizer 项目教程

2024-10-30 21:10:43

json2html 项目教程

2024-10-30 21:10:41

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!