JQ-1 jQuery、库、框架的概念;jQuery(优点与缺点、起源和历史、学习原因;三种安装方式;监听文档加载;函数与对象);jQuery对象 与 DOM Element的区别+转换

1_认识jQuery

1.1_概念

读音为:/ˈdʒeɪkwɪəri/ ( 简称:jQ),是一个快速、小型且功能丰富的 JavaScript 库,官网对jQuery的描述:

  • 使HTML文档遍历、操作、事件处理、动画和 Ajax 之类的事情变得更加简单。
  • 具有易于使用的 API,可在多种浏览器中使用。
  • jQuery 结合多功能性和可扩展性,改变了数百万人编写 JavaScript 的方式。

jQuery官网:https://jquery.com/


1.2_库(library)和框架(framework)的概念

随着JavaScript的普及,以及越来越多人使用JavaScript来构建网站和应用程序

  • JavaScript社区认识到代码中存在非常多相同的逻辑是可复用的。
  • 因此社区就开始对这些相同的逻辑的代码封装到一个JavaScript文件中。
  • 这个封装好的JavaScript文件就可称为JavaScript库或JavaScript框架。

库(library)

  • JavaScript库是一个预先编写好并实现了一些特定功能的代码片段的集合。
  • 一个库中会包含许多的函数、变量等,可根据需求引入到项目中使用。
  • 一些常见的库有jQuery、Day.js、Lodash和React等

框架(framework)

  • JavaScript框架是一个完整的工具集,可帮助塑造和组织您的网站或应用程序。
  • 提供一个结构来构建整个应用程序,开发人员可以在结构的规则内更安全、更高效地工作。
  • 一些更常见的框架有:Bootstrap、Angular、Vue、Next.js等。

1.3_ jQuery优点与缺点

jQuery的优点

  • 易于学习:相对于其它的前端框架,jQuery 更易于学习,它支持 JavaScript 的编码风格。
  • 少写多做(Write less, do more)
  • jQuery提供了丰富的功能(DOM操作、过滤器、事件、动画、Ajax等)。
  • 可以编写更少可读的代码来提高开发人员的工作效率。
  • 优秀的 API 文档:jQuery 提供了优秀的在线 API 文档。
  • 跨浏览器支持:提供出色的跨浏览器支持 (IE9+),无需编写额外代码。

jQuery的缺点:

  • jQuery代码库一直在增长(自 jQuery 1.5 起超过 200KB)
  • 不支持组件化开发
  • jQuery 更适合DOM操作,当涉及到开发复杂的项目时,jQuery能力有限。

1.4_jQuery起源和历史

早在2005年8月22日, John Resig 首次提出支持CSS选择器的JavaScript库,其语法比现有库(例如:Behaviour )更简洁。

在2006年之前,John Resig(一名从事自己项目的Web开发人员)对编写跨浏览器的JavaScript感到非常繁琐。 2006年1月16日,John Resig在BarCamp的演讲中介绍了他的新库( jQuery )。

最后,我宣布了今晚发布的第二个新版本:jQuery: New Wave Javascript。简而言之,
这段代码彻底改变了Javascript与HTML交互的方式——它确实是一组令人惊叹的代码,
我已经投入了大量的时间和精力来实现它。我现在正在为网站编写文档,应该会在接下来的几天内准备好。

之后John Resig又花了 8 个月的时间完善jQuery库,直到2006-8-26才发布了 1.0 版本。

下图是迭代的历史版本

在这里插入图片描述


1.5_为什么学习jQuery

jQuery是一个非常受欢迎的JavaScript库,被全球约 7000 万个网站使用。它优秀的设计和架构思想非常值得去学习。

jQuery 的座右铭是“Write less , do more”,它易于学习, 非常适合JavaScript 开发人员学习的第一个库。

前端JavaScript库非常多,学习jQuery有利于学习和理解其它的JavaScript库(例如:Day.js、Lodash.js等)

许多大型科技公司,虽然他们现在不会直接使用jQuery来做项目,但在项目中仍然会借鉴很多jQuery设计思想。

因此,了解 jQuery 依然是一个好主意


2_ jQuery的安装

jQuery 本质是一个JavaScript 库。

  • 该库包含了:DOM操作、选择器、事件处理、动画和 Ajax 等核心功能。
  • 现在可以简单的理解它就是一个JavaScript文件。
  • 执行该文件中会给window对象添加一个jQuery函数(例如:window.jQuery)。
  • 接着就可以调用jQuery函数,或者使用该函数上的类方法。

jQuery安装方式有哪些?

2.1_方式一:CDN

在页面中,直接通过CDN的方式引入。

<script src="https://code.jquery.com/jquery-3.6.0.js"></script>

介绍CDN

什么是CDN呢?CDN称之为内容分发网络(Content Delivery Network或Content Distribution Network,缩写:CDN)

  • CDN它是一组分布在不同地理位置的服务器相互连接形成的网络系统。
  • 通过这个网络系统,将Web内容存放在距离用户最近的服务器。
  • 可以更快、更可靠地将Web内容(文件、图片、音乐、视频等)发送给用户。
  • CDN不但可以提高资源的访问速度,还可以分担源站的压力。

更简单的理解CDN:

  • CDN会将资源缓存到遍布全球的网站,用户请求获取资源时;
  • 可就近获取CDN上缓存的资源,提高资源访问速度,同时分担源站压力。

常用的CDN服务可以大致分为两种:

  • 自己购买的CDN服务:需要购买开通CDN服务(会分配一个域名)。 目前阿里、腾讯、亚马逊、Google等都可以购买CDN服务。
  • 开源的CDN服务。 国际上使用比较多的是unpkg、JSDelivr、cdnjs、BootCDN等。

2.2_方式二:下载jQuery的源文件

下载jQuery的源文件,并在页面中手动引入。

  • 官网下载:https://jquery.com/download/
  • CDN连接地址下载: https://releases.jquery.com/jquery/
  • GitHub仓库中下载:https://github.com/jquery/jquery

例如,新建一个文件夹lib,将JQ源文件放在此处

  <script src="../libs/jquery-3.6.0.js"></script>

2.3_方式三:使用npm包管理工具安装到项目中

(略)


3_案例体验JQuery

计数器案例:点击加号或者减号按钮,让原始数字零产生正确的变化。

第一种方式:原生DOM实现

<body>
  
  <button class="sub">-</button>
  <span class="counter">0</span>
  <button class="add">+</button>

  <script>
    var subEl = document.querySelector('.sub')
    var spanEl = document.querySelector('.counter')
    var addEl = document.querySelector('.add')
    var counter = 0
    subEl.addEventListener('click', function() {
      spanEl.innerText = --counter
    })
    addEl.addEventListener('click', function() {
      spanEl.innerText = ++counter
    })

  </script>
</body>

第二种方式:使用JQuery

<body>
  <button class="sub">-</button>
  <span class="counter">0</span>
  <button class="add">+</button>

  <script src="../libs/jquery-3.6.0.js"></script>
  <script>
    
    var $sub = jQuery('.sub')
    var $span = jQuery('.counter')
    var $add = jQuery('.add')
    var counter = 0
    $sub.on('click', function() {
      $span.text(--counter)      
    })
    $add.on('click', function() {
      $span.text(++counter)
    })

  </script>
</body>

4_ jQuery监听文档加载

jQuery监听document的DOMContentLoaded事件的四种方案

  • $( document ).ready( handler ) : deprecated
  • $( “document” ).ready( handler ) : deprecated
  • $().ready( handler ) :deprecated
  • $( handler ) :推荐用这种写法,其它可以使用但是不推荐
  <script src="../libs/jquery-3.6.0.js"></script>
  <script>
   var $doc =  $(document)
  //  方式 1:监听文档完全解析完成     
   $doc.ready(function() {
    console.log('doc ready1')
   })
   // 方式 2:监听文档完全解析完成
  jQuery('document').ready(function(){
    console.log('doc ready2')
  })
   // 方式 3:监听文档完全解析完成
  $().ready(function(){
    console.log('doc ready3')
  })
   // 方式 4:监听文档完全解析完成  【推荐】
  $(function() {
    console.log('doc ready4')
  })

  </script>

监听window的load事件,即网页所有资源(外部连接,图片等)加载完

  • .load( handler ) : This API has been removed in jQuery 3.0
  • $(window).on(‘load’, handler) : 推荐写法
  <script src="../libs/jquery-3.6.0.js"></script>
  <script>
      //方式一
    // $(window).load(function() {} ) // 3.0 remove

    // 方式二
    $(window).on('load', function() {
      console.log('图片加载完成')
    })
  </script>

5_Jquery对象

5.1_jQuery与其它库的变量名冲突

和 jQuery库一样,许多JavaScript库也会使用 $ 作为函数名或变量名。

  • 在 jQuery 中,$ 是jQuery的别名。
  • 如果在使用jQuery库之前,其它库已经使用了 $ 函数或者变量,这时就会出现冲突的情况。
  • 这时可以通过调用jQuery中的noConflict函数来解决冲突问题。
  • jQuery在初始化前会先备份一下全局其它库的jQuery$变量,调用noConflict函数只是恢复之前备份的jQuery和$变量。

该路径下的js代码 如下 <script src="./utils/hy-utils.js"></script>

var $ = '我是hy-utils'
var jQuery = '我是hy-utils jQuery'


下面的代码,解决$变量冲突

  <!-- 【自定义$变量,是一个字符串】
    给window 添加了 $ 变量
    window.$ = '我是hy-utils'
   -->
  <script src="./utils/hy-utils.js"></script>

  <!-- 【JQuery库定义$变量,是函数】
    给window 添加了 $ 变量
    window.$ = func 函数
    var _$ =
    var _jQuery =
   -->
  <script src="../libs/jquery-3.6.0.js"></script>
  <script>
    // console.log('%O', $)  //出现变量名冲突,以后面出现的为准。所以输出的$是Jquery的函数

    // 1.解决变量的冲突【即让$变量 从JEuery的库函数,变成自定义的$变量 】
    jQuery.noConflict() // window.$ =  _$
    console.log( $ ) // 我是hy-utils

下面代码解决,Jquery变量名冲突

  <script src="./utils/hy-utils.js"></script>
  <script src="../libs/jquery-3.6.0.js"></script>
  
  <script>
    // 解决变量的冲突
    var newjQuery = jQuery.noConflict(true) //保存Jquery库的 Jquery函数
    console.log( $ ) // 我是hy-utils  【自定义的$变量】
    console.log( jQuery ) // 我是hy-utils	【自定义的Jquery变量】

    console.log(newjQuery)  //输出的是Jquery库的 Jquery函数

  </script>

5.2_认识jQuery函数


jQuery是一个工厂函数( 别名$ ),调用该函数,会根据传入参数类型来返回匹配到元素的集合,一般把该集合称为jQuery对象。

  • 如果传入假值:返回一个空的集合。
  • 如果传入选择器:返回在在documnet中所匹配到元素的集合。
  • 如果传入元素:返回包含该元素的集合。
  • 如果传入HTML字符串,返回包含新创建元素的集合。
  • 如果传入回调函数:返回的是包含document元素集合, 并且当文档加载完成会回调该函数。
  • 因为函数也是对象,所以该函数还包含了很多已封装好的方法。如:jQuery.noConflict、jQuery.ready等

jQuery函数的参数

  • jQuery( selector [, context ] ) :selector 是字符串选择器;context 是匹配元素时的上下文,默认值为 document
    • jQuery( selector [, context ] )
    • jQuery( element )
    • jQuery( elementArray )
    • jQuery()
  • jQuery( html [, ownerDocument ] )
    • jQuery( html [, ownerDocument ] )
    • jQuery( html )
  • jQuery( callback )

在这里插入图片描述


5.3_认识jQuery对象

jQuery对象是一个包含所匹配到元素的集合,该集合是类数组(array-like)对象。

  • jQuery对象是通过调用jQuery函数来创建的。
  • jQuery对象中会包含N(>=0)个匹配到的元素。
  • jQuery 对象原型中包含了很多已封装好的方法。例如:DOM操作、事件处理、动画等方法。

下面通过调用jQuery函数来新建一个jQuery对象,例如:

  • $() 新建一个空的jQuery对象
  • $(document) 新建一个包含document元素的jQuery对象
  • $('选择器') 新建一个包含所选中DOM元素的jQuery对象

在这里插入图片描述


5.4_ jQuery对象 与 DOM Element的区别

  • 获取的方式不同
    • DOM Element 是通过原生方式获取,例如:document.querySelector()
    • jQuery对象是通过调用jQuery函数获取,例如:jQuery(’ ‘) 或者$(’ ')
  • jQuery对象是一个类数组对象,该对象中会包含所选中的DOM Element的集合。
  • jQuery对象的原型上扩展非常多实用的方法,DOM Element 则是W3C规范中定义的属性和方法

在这里插入图片描述


5.5_ jQuery对象 与 DOM Element 的转换

jQuery对象转成DOM Element

  • .get(index): 获取 jQuery 对象中某个索引中的 DOM 元素。
    • index一个从零开始的整数,指示要检索的元素。
    • 如果index超出范围(小于负数元素或等于或大于元素数),则返回undefined。
  • .get() : 没有参数,将返回jQuery对象中所有DOM元素的数组。

DOM Element转成jQuery对象

  • 调用jQuery函数或者$函数
  • 例如:$(元素)
<body>
  <ul>
    <li class="li-1">li-1</li>
    <li class="li-2">li-2</li>
    <li class="li-3">li-3</li>
    <li class="li-4">li-4</li>
    <li class="li-5">li-5</li>
  </ul>

  <script src="../libs/jquery-3.6.0.js"></script>
  <script>
    // 1.jQuery对象 转成 DOM Element
    var $ul = jQuery('ul')  //获取JQ对象
    // 方式一
    var ulEl = $ul[0]  // 将jQuery对象转成DOM Element
    console.log('%O', ulEl) //ul  [DOM Element]
    // 方式二
    console.log($ul.get()) //数组。 获取到匹配元素集合中所有的元素 [ul]
    console.log($ul.get(0)) //ul  [DOM Element]  获取到匹配元素集合中某一个元素
    

    // 2.DOM Element 转成 jQuery对象
    var ulEL = document.querySelector('ul') //获取DOM Element对象
    console.log(jQuery(ulEL)) //jQuery对象。     目的:想调用jQuery对象中的方法

  </script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值