不看后悔系列——JQuery学习笔记

本文详细介绍了jQuery的入门知识,包括jQuery的下载、加载模式、选择器、事件处理、DOM操作等方面。重点讲解了jQuery的核心函数、选择器(如基本选择器、过滤选择器)、属性操作(attr与prop方法的区别)以及事件处理机制,旨在帮助开发者快速理解和掌握jQuery的实用技巧。
摘要由CSDN通过智能技术生成

初识jQuery

jQuery是什么?
在这里插入图片描述

  • jQuery是一个JavaScript库,旨在简化HTML DOM树遍历和操作,以及事件处理,动画和Ajax。它是使用许可的MIT许可证的免费开源软件。Web分析表明它是大范围部署最广泛的JavaScript库,从命名可以看出jQuery最主要的用途是用来做查询(jQuery=js+Query)。
  • jQuery的语法旨在使导航文档,选择DOM元素,创建动画,处理事件和开发Ajax应用程序变得更加容易。jQuery还为开发人员提供了在JavaScript库之上创建插件的功能。这使开发人员能够为低级交互和动画,高级效果和高级,可主题的小部件创建抽象。jQuery库的模块化方法允许创建功能强大的动态Web页面和Web应用程序。

体验jQuery

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>01-初识jQuery</title>
    <style>
        *{
    
            margin: 0;
            padding: 0;
        }
        div{
    
            width: 100px;
            height: 100px;
            border: 1px solid #000;
        }
    </style>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
        window.onload = function (ev) {
    
            // 1.利用原生的JS查找DOM元素
            var div1 = document.getElementsByTagName("div")[0];
            var div2 = document.getElementsByClassName("box1")[0];
            var div3 = document.getElementById("box2");
             console.log(div1);
             console.log(div2);
             console.log(div3);
            // 2.利用原生的JS修改背景颜色
             div1.style.backgroundColor = "red";
             div2.style.backgroundColor = "blue";
             div3.style.backgroundColor = "yellow";
        }

        $(function () {
    
            var $div1 = $("div");
            var $div2 = $(".box1");
            var $div3 = $("#box2");
             console.log($div1);
             console.log($div2);
             console.log($div3);
            $div1.css({
    
               background: "red",
                width: "200px",
                height: "200px"
            });
            $div2.css({
    
                background: "blue"
            });
            $div3.css({
    
                background: "yellow"
            });
        });
    </script>

</head>
<body>
	<div></div>
	<div class="box1"></div>
	<div id="box2"></div>
</body>
</html>

为什么要使用jQuery

  • 强大选择器: 方便快速查找DOM元素

    • 如上面实例所展示一样,通过jQuery查找DOM元素要比原生js快捷很多
    • jQuery允许开发者使用CSS1-CSS3几乎所有的选择器,以及jQuery独创的选择器
  • 链式调用: 可以通过.不断调用jQuery对象的方法

  $(document).ready(function () {
   
       var $div1 = $("div");
       // 链式调用
        $div1.eq(1).css(
            'background',"red"
        ).css('width', '200px');
    });
  • 隐式遍历(迭代): 一次操作多个元素
$(document).ready(function(){
   
	//隐式遍历找到的所有div
	$("div).css('background','red');
});
  • 读写合一: 读数据/写数据使用是一个函数
$(document).ready(function () {
   
        // 读取数据
        var $tx = $("div").eq(0).text();
        alert($tx);
        // 写入数据
        $("div").eq(0).text("新的数据");
    });
  • 事件处理
  • DOM操作(C增U改D删)
  • 样式操作
  • 动画
  • 丰富的插件支持
  • 浏览器兼容(前端开发者痛点)
    • JQery1.x版:兼容ie678,但相对其它版本文件较大,官方只做BUG维护,功能不再新增,最终版本:1.12.4 (2016年5月20日).

    • JQery2.x版:不兼容ie678,相对1.x文件较小,官方只做BUG维护,功能不再新增,最终版本:2.2.4 (2016年5月20日)

    • JQery3.x版:不兼容ie678,只支持最新的浏览器,很多老的jQuery插件不支持这个版本,相对1.x文件较小,提供不包含Ajax/动画API版本。

应该选择几点几版本jQuery?

  • 查看百度网页源码:使用的是1.x
  • 查看腾讯网页源码:使用的是1.x
  • 查看京东网页源码:使用的是1.x
  • 综上所述学习1.x,选择1.x

应该使用开发版还是生产版?

  • 开发版: 所有代码没有经过压缩,体积更大(200-300KB)
  • 生产版:所有代码经过压缩,提及更小(30-40KB)
  • 初学者为了更好的理解jQuery编码时使用开发板,项目上线时为了提升访问速度使用生产版

1.jQuery下载地址

jQuery下载

1.2 jQuery和JS的加载模式

原生JS和jQuery入口函数的加载模式不同

  • 原生JS会等到DOM元素加载完毕,并且图片也加载完毕才会执行
  • jQuery会等到DOM元素加载完毕,但不会等到图片也加载完毕
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery和JS入口函数的区别</title>
    <style>
        div {
    
            width: 100px;
            height: 100px;
        }
    </style>
    <!--引入jQuery-->
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script>
    <script>
        // 原生JS和jQuery入口函数的加载模式不同
        // 原生JS会等到DOM元素加载完毕,并且图片也加载完毕才会执行
        // jQuery会等到DOM元素加载完毕,但不会等到图片也加载完毕
        
        // 原生JS的固定写法
        window.onload = function (ev) {
    
            var img = document.getElementsByTagName("img")[0];
            console.log(img);
            var width = window.getComputedStyle(img).width;
            console.log(width);     //540px
        }
        
        //jQuery固定写法
        $(document).ready(function (ev) {
    
            var $width = $("img").width();
            console.log($width);        // 0
        });
    </script>
</head>
<body>
	<img src="https://www.baidu.com/img/bd_logo1.png?where=super" alt="">
</body>
</html>
  • 多个window.onload只会执行一次, 后面的会覆盖前面的
  • 多个$(document).ready()会执行多次,后面的不会覆盖前面的

不会覆盖的本质

  • jQuery框架本质是一个闭包,每次执行我们都会给ready函数传递一个新的函数,不同函数内部的数据不会相互干扰
  /****只弹出Hello 3***/
        window.onload = function (ev) {
   
            alert("Hello 1");
        }
        window.onload = function (ev) {
   
	        alert("Hello 2");
        }
        window.onload = function (ev) {
   
	        alert("Hello 3");
        }
        /***** 都会弹出****/
        $(document).ready(function (ev) {
   
	        alert("Hello 1");
        });
        $(document).ready(function (ev) {
   
	        alert("Hello 2");
        });
        $(document).ready(function (ev) {
   
	        alert("Hello 3");
        });

在这里插入图片描述

为什么我们能访问$符号

  • 因为$符号是jQuery框架对外暴露的一个全局变量
window.jQuery = window.$ = jQuery;
  • 所以想要使用jQuery框架只有两种方式,一种是通过$,一种是通过jQuery

1.3 jQuery入口函数的其他编写方式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>03-jQuery和JS入口函数的区别</title>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
        /*
        window.onload = function (ev) {
            // 1.通过原生的JS入口函数可以拿到DOM元素
            var images = document.getElementsByTagName("images")[0];
            console.log(images);
            // 2.通过原生的JS入口函数可以拿到DOM元素的宽高
            var width = window.getComputedStyle(images).width;
            console.log("onload", width);
        }
        */

        /*
        * 1.原生JS和jQuery入口函数的加载模式不同
        * 原生JS会等到DOM元素加载完毕,并且图片也加载完毕才会执行
        * jQuery会等到DOM元素加载完毕,但不会等到图片也加载完毕就会执行
        * */
        /*
        $(document).ready(function () {
            // 1.通过jQuery入口函数可以拿到DOM元素
            var $images = $("images");
            console.log($images);
            // 2.通过jQuery入口函数不可以拿到DOM元素的宽高
            var $width = $images.width();
            console.log("ready", $width);
        });
        */

        /*
        1.原生的JS如果编写了多个入口函数,后面编写的会覆盖前面编写的
        2.jQuery中编写多个入口函数,后面的不会覆盖前面的
        */
        // window.onload = function (ev) {
    
        //     alert("hello lnj1");
        // }
        // window.onload = function (ev) {
    
        //     alert("hello lnj2");
        // }

        $(document).ready(function () {
    
            alert("hello lnj1");
        });
        $(document).ready(function () {
    
            alert("hello lnj2");
        });
    </script>
</head>
<body>
	<img src="https://img.alicdn.com/tfs/TB1P_MofwmTBuNjy1XbXXaMrVXa-190-140.gif" alt="">
</body>
</html>

1.4 jQuery入口函数的其它写法

<script>
        // 1.第一种写法
        $(document).ready(function () {
    
            // alert("hello lnj");
        });

        // 2.第二种写法
        jQuery(document).ready(function () {
    
            // alert("hello lnj");
        });

        // 3.第三种写法(推荐)
        $(function () {
    
            // alert("hello lnj");
        });

        // 4.第四种写法
        jQuery(function () {
    
            alert("hello lnj");
        });
    </script>

1.5jQuery冲突问题

很多js的框架都提供了类似jQuery这样的便捷访问方式,所以很有可能某一天我们在使用多个框架的时,多个框架作者提供的便捷访问方式冲突(A框架通过访 问 , B 框 架 也 通 过 访问,B框架也通过访问,B框架也通过访问),解决方案见代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>05-jQuery冲突问题</title>
    <script src="js/jquery-1.12.4.js"></script>
    <script src="js/test.js"></script>
    <script>
        // 1.释放$的使用权
        // 注意点: 释放操作必须在编写其它jQuery代码之前编写
        //         释放之后就不能再使用$,改为使用jQuery
        // jQuery.noConflict();

        // 2.自定义一个访问符号
        var nj = jQuery.noConflict();
        nj(function () {
    
            alert("hello lnj");
        });
    </script>
</head>
<body>

</body>
</html>

2.jQuery核心函数和工具方法

2.1jQuery核心函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>06-jQuery核心函数</title>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
        // $();就代表调用jQuery的核心函数

        // 1.接收一个函数
        $(function () {
    
            alert("hello lnj");
            // 2.接收一个字符串
            // 2.1接收一个字符串选择器
            // 返回一个jQuery对象, 对象中保存了找到的DOM元素
            var $box1 = $(".box1");
            var $box2 = $("#box2");
            console.log($box1);
            console.log($box2);
            // 2.2接收一个字符串代码片段
            // 返回一个jQuery对象, 对象中保存了创建的DOM元素
            var $p = $("<p>我是段落</p>");
            console.log($p);
            $box1.append($p);
            // 3.接收一个DOM元素
            // 会被包装成一个jQuery对象返回给我们
            var span = document.getElementsByTagName("span")[0];
            console.log(span);
            var $span = $(span);
            console.log($span);
        });
    </script>
</head>
<body>
	<div class="box1"></div>
	<div id="box2"></div>
	<span>我是span</span>
</body>
</html>

2.2 JQuery对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>07-jQuery对象</title>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
        $(function () {
    
            /*
            * 1.什么是jQuery对象
            * jQuery对象是一个伪数组
            *
            */
            var $div = $("div");
            console.log($div);

            var arr = [1, 3, 5];
            console.log(arr);
        });
    </script>
</head>
<body>
	<div>div1</div>
	<div>div2</div>
	<div>div3</div>
</body>
</html>

什么是伪数组?

  • 有0到length-1的属性
  • 并且有length属性

例如:

var obj = {
   0:"lnj", 1:"33", 2:"male", length: 3}

2.3 JQuery静态方法和实例方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>08-静态方法和实例方法</title>
    <script>
        // 1.定义一个类
        function AClass() {
    
        }
        // 2.给这个类添加一个静态方法
        // 直接添加给类的就是静态方法
        AClass.staticMethod = function () {
    
            alert("staticMethod");
        }
        // 静态方法通过类名调用
        AClass.staticMethod();

        // 3.给这个类添加一个实例方法
        AClass.prototype.instanceMethod = function () {
    
            alert("instanceMethod");
        }
        // 实例方法通过类的实例调用
        // 创建一个实例(创建一个对象)
        var a = new AClass();
        // 通过实例调用实例方法
        a.instanceMethod();
    </script>
</head>
<body>

</body>
</html>

2.4 静态方法each

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>09-静态方法each方法</title>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
        var arr = [1, 3, 5, 7, 9];
        var obj = {
    0:1, 1:3, 2:5, 3:7, 4:9, length:5};
        /*
        第一个参数: 遍历到的元素
        第二个参数: 当前遍历到的索引
        注意点:
        原生的forEach方法只能遍历数组, 不能遍历伪数组
        */
         arr.forEach(function (value, index) {
    
             console.log(index, value);
         });
         obj.forEach(function (value, index) {
    
             console.log(index, value);
         });

        // 1.利用jQuery的each静态方法遍历数组
        /*
        第一个参数: 当前遍历到的索引
        第二个参数: 遍历到的元素
        注意点:
        jQuery的each方法是可以遍历伪数组的
        */
         $
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值