> 文档中心 > 【jQuery】jQuery概述及jQuery的原理_01

【jQuery】jQuery概述及jQuery的原理_01

目录

一. 什么是jQuery:

1. 什么是jQuery:

2. 为什么要用jQuery

3. 何时使用jQuery

4. 问题: jQuery将来会用的越来越少!

二. 如何使用jQuery

1. 下载

2. 引入网页: 2种

3. 我的第一个jquery程序

三.  jQuery原理

❣️ 闲话:jQuery 优点与特点

❣️ 经验分享

❣️ 总结: $()共有4种

❣️ 总结:知识点提炼


❣️ 了解更多DOM操作,欢迎关注DOM学习笔记专栏


一. 什么是jQuery:

1. 什么是jQuery:

         (1). 第三方开发的: 先下载才能使用。

         (2). 执行DOM操作的: jQuery还是执行DOM5件事: 增删改查+事件绑定。学习jQuery还是在学DOM。
         (3). 极简化的: jQuery是对DOM操作的终极简化。

         (4). 函数库: jQuery使用函数来解决一切问题。

官方概念:

jQuery是一个快速,小型且功能丰富的JavaScript库。借助易于使用的API(可在多种浏览器中使用),使HTML文档的遍历和操作,事件处理,动画和Ajax等事情变得更加简单。

​​​​​​​通俗理解,私认为:

jQuery是JavaScript的一个工具库,工具库就是指封装好的JavaScript函数,可以直接在程序中进行调用,那jQuery就是一款非常流行的JavaScript库。jQuery设计的宗旨是“写更少的代码,做更多的事情”。jQuery库封装了JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

2. 为什么要用jQuery

         (1). 简化

         (2). 解决了大部分浏览器兼容性问题

比如说,有一些特别旧的浏览器可能不支持标准DOM,比如IE8,这个时候开发人员就不得不进行浏览器的判断:如果是IE8执行什么代码,非IE8执行什么代码,老是进行判断,很繁琐,而jquery把这些兼容问题都封装进了函数里面,直接调用即可,不用再考虑浏览器兼容性问题,所以解决兼容性问题,是当年jquery火爆一时的一个非常重要的原因

3. 何时使用jQuery

几乎所有旧的项目和框架都是用jQuery做出来的。

4. 问题: jQuery将来会用的越来越少!

         (1). 只简化了每一步操作,但是没有简化步骤!依然存在大量重复的编码!

         (2). 不支持移动端!

二. 如何使用jQuery

1. 下载

         (1). 官网:  jquery.com

         (2). 版本: 

         a.  1.x: 兼容旧浏览器

         b.  2.x: 不再兼容旧浏览器, 暂不支持es6

         c.  3.x: 不再兼容旧浏览器,支持ES6

         (3). 压缩 vs 未压缩:

         a. 未压缩版: jquery-1.11.3.js

                  1). 有完备的注释、代码格式、见名知意的变量名。

                  2). 好处: 可读性好,适合于开发和学习之用

                  3). 缺点: 体积大,不便于快速下载使用,不适合于生产环境

         b. 压缩版:jquery-1.11.3.min.js

                  1). 去掉了所有注释和代码格式,极简化了变量名。

                  2). 好处: 体积小,便于快速下载使用,适合于生产环境

                  3). 缺点: 可读性差,不适合于学习之用

2. 引入网页: 2种

         (1). 使用项目本地的js文件: 先将jquery.js文件下载到项目本地的文件夹中,在网页中使用相对路径引入:

        

         (2). 使用CDN网络中共享的js文件:

         a. CDN网络: 在全球范围多点共享资源,并能够根据用户所在的位置,自动选择离客户最近的服务器下载资源 的智能网络

         b. 如何使用cdn网络中共享的jquery.js: 只要找到网址即可:

        

3. 我的第一个jquery程序

       (1). 示例: 使用DOM记录按钮点击次数:

         1_DOM.html

      

jQuery/$工厂函数

//DOM 4步 //1. 查找触发事件的元素 var btn=document.getElementById("btn1") //2. 绑定事件处理函数 btn.onclick=function(){ //3. 查找要修改的元素 //本例中: 修改自己this,不用找 //4. 修改元素 //4.1 取出现在的点击次数转为整数 // 复习第一阶段slice var n=parseInt(this.innerHTML.slice(9,-1)); //4.2 次数+1 n++; //4.3 放回按钮内容中,但是拼的格式要和最初一模一样 this.innerHTML=`click me(${n})`; }

运行结果: 

       (2). 示例: 使用jQuery记录按钮点击次数

         1_jQuery.html

      

jQuery/$工厂函数

//DOM 4步 //1. 查找触发事件的元素 // var btn=document.getElementById("btn1"); //创建一个jQuery类型的子对象,并查找id为btn1的DOM按钮对象,保存到新创建的jQuery子对象中,等待操作。 var $btn=$("#btn1") //2. 绑定事件处理函数 // btn.onclick=function(){ //为btn绑定单击事件处理函数 $btn.click(function(){ //3. 查找要修改的元素 //本例中: 修改自己this,不用找 //因为this默认指原生DOM元素对象,所以不能直接调用jQuery家简化版函数。所以必须用$()将this包装为一个新的jQuery家子对象,才能继续使用jQuery家简化版函数。 var $this=$(this); //4. 修改元素 //4.1 取出现在的点击次数转为整数 // var n=this.innerHTML.slice(9,-1); var n=parseInt($this.html().slice(9,-1)); //4.2 次数+1 n++; //4.3 放回按钮内容中,但是拼的格式要和最初一模一样 // this.innerHTML=`click me(${n})`; $this.html(`click me(${n})`) //} })

运行结果: 

三.  jQuery原理

1. 引入jquery.js后: 在全局创建了一种新的类型jQuery

         (1). 构造函数: 负责创建当前类型的一个新的子对象

         (2). 原型对象: 负责保存该类型所有子对象共有的方法

2. 创建jQuery子对象: 要想使用jQuery家所有简化版函数,必须先创建jQuery家的子对象。然后,才能用子对象调用jQuery原型对象中的简化版函数

3. 问题:jQuery的简化版函数,都是为了简化DOM操作,来操作DOM元素的。比如: .click()代替DOM的onclick为元素绑定事件。.html()就是代替innerHTML获取或修改元素的内容。但是,如果只创建jQuery家子对象,是不知道该用这些函数操作哪个DOM元素的!

4. 解决:今后创建jQuery子对象时,都会顺便传入一个DOM元素,供jQuery简化版函数去操作!2种方式:

         (1). 在创建jQuery子对象时,提供一个选择器,去查找DOM元素,将找到的DOM元素放入新创建的jQuery子对象中。

         var jq子对象=new jQuery("选择器")

         (2). 也可以直接在new jQuery()中放入一个已经获得的DOM元素参数。表示将一个原生DOM元素封装为jQuery类型的子对象

         var jq子对象=new jQuery(DOM元素对象)

         比如: var $this=$(this)  

    注意:this其实是一个html 元素。$this 只是个变量名,加$是为说明其是个jquery对象。而$(this)是个转换,将this表示的dom对象转为jquery对象,这样就可以使用jquery提供的方法操作。$this作用就是把当前对象保存起来,便于后边的使用。

5. 结果:将来对jQuery子对象调用那些简化版的函数,其实操作的就是找到的这个DOM元素。

6. 问题: 简化版函数如何变成原生DOM的属性和方法呢?

7. 解决: 其实,每当我们调用一个简化版函数时,jq子对象都会自动将简化版函数翻译为对应的原生的属性和方法

8. 问题: jquery的作者认为,每次使用jquery都要new jQuery()太繁琐!

9. 解决: 简化:

        (1). 将new jQuery()放入jquery构造函数内。结果: 今后创建jQuery子对象时,不用每次都写new,只写jQuery()即可

         (2). 给jQuery起了一个别名叫$。从此要想创建jquery类型的子对象,只用$()即可。

10. $的本质: 创建一个jQuery类型的子对象,等效于new jQuery()

11. 问题: 使用原生的DOM查找函数找到的元素对象和使用jquery的$()找到的结果对象是不一样的!

         (1). 原生的DOM查找函数,找到的直接就是原生的DOM元素

         (2). $()最后获得的是一个jQuery类型的子对象,其中包含着找到的原生DOM元素对象

         如何区分?

12. 解决: 今后,凡是用$()找到的结果对象,都要以$开头命名!

比如: var $this=$(this),变量this要改为$this

13. 问题: jQuery事件处理函数中的this

      (1). jQuery事件处理函数的原理和DOM事件处理函数的原理是一模一样的。$btn.click(function(){ ... })就等效于btn.οnclick=function(){ ... }

         (2). 所以, jQuery事件处理函数中的this->当前触发事件的DOM元素对象

         (3). 但是, this默认指的是当前正在触发事件的原生DOM元素,无法使用jQuery家所有简化版函数

14. 解决: 只要将this,用$()包装一下,包装成一个jQuery类型的子对象。就可以使用jQuery类型的子对象调用简化版函数,来操作this指向的DOM元素对象。

         var $btn=$(this)

15. 问题: 案例中, 获取按钮的内容用.html(),修改按钮的内容用的还是.html()。一个函数,怎么既能获取,又能修改呢?

16. 总结: 其实大部分jquery简化版函数都有三大特征:

         (1). 一个函数两用: 多数和修改相关的函数,都是一个函数两用。即能获取旧值,又能修改新值。如何判断本次是该修改,还是该获取?重载。

         a. 如果本次调用函数时,没有传新值,就默认执行获取旧值的操作

         b. 如果本次调用函数时,传了新值,就自动切换为修改操作。

         (2). 自带遍历:

         a. 其实, jquery查找结果对象是一个类数组对象。无论选择器找到多少元素,都可以包裹进jquery对象中

         b. 只要对整个jQuery子对象调用一次简化版函数,就等效于对jquery对象内每个DOM元素都调用一次对应的原生DOM属性或方法。无需自己写for循环。

         c. 示例: 使用jQuery记录三个按钮各自的单击次数

         2_jQueryAPI.html

      

jQueryAPI特点

//DOM 4步 //1. 查找触发事件的元素 //本例中三个按钮都可点击 var $btns=$("button"); console.log($btns); //2. 绑定事件处理函数 //为每个按钮都绑定单击事件 $btns.click(function(){ //相当于: for(...) //$btns[0].onclick=function(){ ...this... }; //$btns[1].onclick=function(){ ...this... }; //$btns[2].onclick=function(){ ...this... }; //3. 查找要修改的元素 var $this=$(this); //4. 修改元素 //4.1 取出现在的点击次数转为整数 // var n=this.innerHTML.slice(9,-1); var n=parseInt($this.html().slice(9,-1)); //4.2 次数+1 n++; //4.3 放回按钮内容中,但是拼的格式要和最初一模一样 // this.innerHTML=`click me(${n})`; $this.html(`click me(${n})`) })

运行结果: 

         (3). 多数函数都会返回正在操作的.前的主语jq对象——链式操作。(需要循序渐进,以后的知识点中,会逐步介绍,请持续关注,待续...)

❣️ 闲话:jQuery 优点与特点

🔵 jQuery 优点

  • 占用空间少:

    缩小并压缩后的jQuery文件只有30KB。

  • 符合CSS3规范:

    支持CSS3选择器查找元素以及样式属性操作。

  • 跨浏览器:

    jQuery兼容各种主流浏览器,如IE、Chrome、Firefox、Safari、Opera等。

🔵 jQuery 特点

快速获取文档元素

​ jQuery的选择机制构建于Css的选择器,它提供了快速查询DOM文档中元素的能力,而且大大强化了JavaScript中获取页面元素的方式。

​提供漂亮的页面动态效果

​ jQuery中内置了一系列的动画效果,可以开发出非常漂亮的网页,许多网站都使用jQuery的内置的效果,比如淡入淡出、元素移除等动态特效。

创建AJAX无刷新网页

​ AJAX是异步的JavaScript和XML的简称,可以开发出非常灵敏无刷新的网页,特别是开发服务器端网页时,比如PHP网站,需要往返地与服务器通信,如果不使用AJAX,每次数据更新不得不重新刷新网页,而使用AJAX特效后,可以对页面进行局部刷新,提供动态的效果。

提供对JavaScript语言的增强

​ jQuery提供了对基本JavaScript结构的增强,比如元素迭代和数组处理等操作。

​增强的事件处理

​ jQuery提供了各种页面事件,它可以避免程序员在HTML中添加太多事件处理代码,最重要的是,它的事件处理器消除了各种浏览器兼容性问题。

​更改网页内容

​ jQuery可以修改网页中的内容,比如更改网页的文本、插入或者翻转网页图像,jQuery简化了原本使用JavaScript代码需要处理的方式。

​​​​​​​❣️ 经验分享

jQuery是一款优秀的JavaScript库,jQuery设计者的宗旨是“write less,do more”,即少写代码,多做事。那在使用jQuery完成比较复杂的页面开发时,可以快速的获取DOM元素,并且快速的修改DOM元素的样式,这比使用原生的JS简单多了,而且jQuery还提供了一些实现动画及特效的函数,可以快速实现复杂的用户交互效果,用起来是很爽的!

不过,我们在学习jQuery之前,最好是有一定的JavaScript基础和使用JS原生开发的能力,因为只有对原始JavaScript比较了解之后,再学习jQuery,才能体会到jQuery的优势,并且让我们可以快速理解jQuery的设计原理。jQuery虽然在操作DOM元素和实现用户交互时很好用,但是在处理业务逻辑比较复杂的需求时,还是要使用原生JavaScript来实现,jQuery可以作为辅助工具来使用。

❣️ 总结: $()共有4种

1. $("选择器") 查找DOM元素,并包装进jQuery对象中

2. $(DOM元素对象) 不用查找,直接将DOM元素包装进jQuery对象中

3. $(`HTML片段`) 创建新元素

4. $(function(){ ... }) 绑定DOMContentLoaded事件处理函数,在DOM内容加载后就自动提前执行!


❣️ 总结:知识点提炼

1. 引入jQuery.js: 2种

(1). 引入项目本地jquery.js文件:

(2). 引入CDN网络中共享的jquery.js文件:

2. 创建jQuery类型子对象: 2种

(1). 只有jQuery类型子对象才能使用jQuery家简化版函数。

DOM家元素对象无权直接使用jQuery家简化版函数。

所以只要使用jQuery家简化版函数,都要先创建jQuery家子对象,其中保存一个要操作的DOM元素对象。

(2). 如何:2种:

         a. 查找DOM元素对象,并保存进新创建的jQuery对象中:

         var $jq子对象=$("选择器")

         b. 不查找,直接将DOM元素对象保存进新创建的jQuery对象中:

         var $jq子对象=$(DOM元素对象)

3. 原理:

(1). $=jQuery=new jQuery

(2). jq子对象其实是一个类数组对象,可保存找到的多个DOM元素对象

(3). 对jq子对象调用简化版函数,会被自动翻译为对应的原生DOM的方法和属性。

         所以jQuery中的所有简化版函数效果和DOM中原生方法和属性效果一样。

         jQuery中的this、e、e.target等,和DOM中的完全一样!

4. jQuery简化版函数3大特点:

(1). 自带for循环: 对整个jquery子对象调用一次简化版函数,等效于对jQuery子对象中保存的每个DOM元素对象分别调用一次对等的DOM原生方法或属性——不用自己写for循环

(2). 一个函数两用: 调用函数时:

         a. 没给新值作为参数,默认执行获取旧值的操作

         b. 给了新值作为参数,自动切换为执行修改操作

(3). 多数函数都会返回正在操作的.前的主语jq对象——链式操作。

​​​

 如果这篇【文章】有帮助到你,希望可以给【