jQuery的系统性总结

前言

        jQuery是一个快速、小型且功能丰富的 JavaScript 库(实际上就是一堆JS代码)。其目的在于:write less do more。

优点:

写得少做得多;兼容性;体积小;链式编程;隐式迭代、插件丰富(Bootstrap)、开源、免费。

jQueryAPI:

jQuery API Documentation

http://api.jquery.com

http://api.jquery.com/api

        在学习jQuery的时候,对比了一下jQuery与Ajax的代码,jQuery简化了HTML文档遍历、事件处理、动画和AJAX交互。jQuery对JavaScript进行了轻量级的封装,使得开发者可以更方便地使用JavaScript。jQuery对AJAX进行了封装,使得使用AJAX变得更加简单和直观。

JavaScript、Ajax、jQuery三者关系

1、JS是一门前端语言。

2、Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新。

3、jQuery是一个框架,它对JS进行了封装,使其更方便使用。jQuery使得JS与Ajax的使用更方便

DOM对象和JQuery对象

DOM对象

jQuery对象

是什么

页面上的标签节点等,使用javascript的语法创建的对象叫做dom对象,也就是js对象.

将DOM封装后得到的jQuery对象(数组可以转化成jQuery对象吗?)

使用jquery语法表示对象叫做jquery对象

注意:jquery表示的对象都是数组.

语法

var obj = document.getElementById(“txt1”);

obj就是一个dom对象,也叫作js对象

var jobj = $("#txt1")

jobj就是使用jquery语法所表示的对象.也就是jquery对象.

是一个数组,数组中就一个值.

如何获取

document.getElement...()

获取页面上的元素,jQuery中多方法少属性,便于链式编程

$(选择器)

如何转换

DOM对象—>jQuery对象

如何变成很强的人,先有钱后有权,用钱砸

$(dom对象)

jQuery对象—>DOM对象

隐式迭代(不知道的时候循环了。jQuery可能是对象集合)

如果是一个对象:

jq对象[0]或jq对象.get(0)来获得DOM对象的jQuery对象

如果是多个对象:

jq对象.get(0) 得到DOM数组

var obj = $("#txt")[0]; or var obj = $("#txt").get(0);

为什么要进行dom对象和jquery的转换:目的是要使用对象的党发,或者方法。

dom对象可以使用dom对象的属性和方法,如果你想要使用jq提供的函数没必须是jq的对象才行。

第一版思维导图:

 第一版总结出jQuery的功能,地位,联系三类。其中选择器、事件处理、动画效果体现了jQuery代码的主要功能。

事件冒泡与事件委托

特性

事件冒泡

事件委托

定义

事件从子元素逐层向上传播到父元素的过程。

利用事件冒泡机制,将事件监听器绑定到父元素上。

作用对象

所有DOM元素(事件的传播过程)。

父元素(事件的捕获和处理)。

核心目的

事件传播机制,确保事件可以被多个层级捕获。

减少事件绑定数量,支持动态元素。

实现方式

自然发生的DOM行为,无需手动实现。

通过绑定事件监听器到父元素,并检查event.target

区别

自然发生的DOM

手动利用事件冒泡实现优化

是否需要手动实现

不需要,浏览器自动处理。

需要开发者手动实现逻辑。

应用场景

处理多层嵌套元素的事件。

处理动态生成的元素事件,优化性能。

第二版思维导图:

 第二版思维导图,将功能进行抽象,分为表层的样式、属性、元素等一些操作,和体现其页面运动机制即选择器、动态效果与事件操作。

jQuery最重要的特点就是链式编程与隐式迭代,这些操作简化了css、html等代码。

有增加了其他的方法:jQuery拷贝、多库共存、Ajax交互操作。

显示迭代与隐式迭代

隐式迭代

显式迭代

迭代方式

自动完成,无需手动编写迭代代码

需要手动编写迭代逻辑(如.each()

for循环)

代码简洁性

代码更简洁,减少冗余

代码冗余较多,需要显式迭代每个元素

灵活性

较低,适用于通用操作

较高,可以在迭代中执行复杂逻辑

链式调用

支持链式调用(返回jQuery对象)

不支持链式调用(返回值为undefined

this

适用场景

适用于对一组元素执行相同操作(如设置样式、绑定事件)

适用于需要对每个元素执行不同操作的复杂场景

性能

内部优化,性能较高

性能与隐式迭代相当,但代码执行逻辑更复杂时可能稍慢

内部实现

基于.each()

方法,但对开发者透明

使用.each()

方法或原生JavaScript的迭代方法

// 隐式迭代
$(".box").click(function() {console.log("Box clicked!");
});// 显式迭代
$(".box").each(function(index, element) {if (index % 2 === 0) {$(element).css("color", "red");} else {$(element).css("color", "blue");}
});

map循环与each循环

map循环

each循环

是什么

map一个高阶函数,对数组中的每个元素执行一个提供的函数,返回一个新的数组,新数组的元素是原始数组元素调用函数后的结果

是用于遍历数组的方法,它对数组中的每个元素执行一个提供的函数,没有返回值(返回值undefined)

干什么

主要用于数据转换,将一个数组转换为另一个具有相同长度但元素经过某种变化的数组。2->2*2

重点在于对数组中的每个元素执行某种操作,如打印数组元素、更新元素的某些属性等,而不是生成一个新的数组。

返回值

会返回一个新的数组,新数组的长度与原数组相同。新数组的每个元素都是原数组对应元素经过映射函数处理后的结果。

不返回新的数组。它的返回值是undefined。其主要价值在于对数组元素逐个执行操作产生的副作用。

对原数组的影响

不改变原数组,生成新的数组

回调函数直接作用于原数组

终止条件

完整遍历数组,没有内置方法终止循环

可能会根据回调函数中的返回值或者其他条件来提前终止循环

性能

需要创建一个新的数组来存储结果,可能会占用更多的内存空间

不需要创建新的数组来存储结果

map函数与each函数

map函数

each函数

目的

在一定程度上都是用于对集合(如数组或对象)中的元素进行遍历操作。

使用

依赖回调函数来定义对每个元素的具体操作

返回值

对集合中的每个元素进行转换,并返回一个新的集合,新集合的长度通常和原集合相同(除非在回调函数中有过滤掉某些元素的操作,例如返回undefined

通常不返回一个新的集合,它的主要目的是对集合中的每个元素执行某种操作,如打印、修改元素状态等,重点在于操作过程而不是生成新的集合。它一般返回undefined或者不返回任何有意义的值(除非在回调函数中有自定义的返回值,但这个返回值通常不是用于构建新的集合)。

控制遍历

不受回调函数内部逻辑的影响而中途停止遍历

可以根据回调函数的返回值来决定是否提前终止遍历。

应用场景

根据原始集合生成一个经过转换的新集合的场景

对集合中的每个元素执行副作用操作,如更新 DOM 元素、向服务器发送数据(每个元素对应一个请求)、打印调试信息等。

第三版思维导图

 在前几版的基础上进行抽象、调整。从总体上又分为常用的API、jQuery的事件、jQuery其他的方法。

类操作与className

类操作

className

实现方式

jQuery

原生JavaScript

方法

通过jQuery提供的方法

.addClass().removeClass().toggleClass().hasClass()

动态地添加、移除、切换或检查元素的CSS类

支持链式调用

用于访问和修改HTML元素class属性的属性。

直接获取或设置元素的class值。

如果需要检查类是否存在或动态添加/移除类,需要额外编写代码。

性能

基于原生JavaScript封装,性能略低

原生方法性能高

兼容性

内部处理兼容性问题

兼容性较好,但可能需要额外处理

使用场景

使用jQuery,动态操作类

简单获取或设置类名,对于更复杂的类操作,建议使用classList(如classList.add()classList.remove()等),它提供了类似jQuery的功能,但性能更高。

var hasClass = $("#myElement").hasClass("class1");
$("#myElement").toggleClass("class1");
$("#myElement").addClass("class1 class2");
$("#myElement").removeClass("class1 class2");
// 获取类名
var classList = document.getElementById("myElement").className;
console.log(classList); // 输出元素的类名字符串
// 设置类名
document.getElementById("myElement").className = "class1 class2";
// 动态修改类名
var elem = document.getElementById("myElement");
elem.className += " class3"; // 添加新类
// className 是一个字符串,直接操作它可能会覆盖原有的类名
elem.className = "class1"; // 会移除原有类名,只保留"class1"

操作css方法

方法

功能描述

示例代码

返回值

.css()

获取或设置单个/多个CSS属性

$("#elem").css("color", "red");

<br>$("#elem").css({"color": "red", "font-size": "16px"});

返回值为undefined

获取单个CSS属性值

var color = $("#elem").css("color");

返回CSS属性值(字符串)

.addClass()

为元素添加一个或多个CSS类

$("#elem").addClass("class1 class2");

返回jQuery对象(链式调用)

.removeClass()

移除元素的一个或多个CSS类

$("#elem").removeClass("class1 class2");

<br>$("#elem").removeClass();

返回jQuery对象(链式调用)

.toggleClass()

切换元素的CSS类(存在则移除,不存在则添加)

$("#elem").toggleClass("class1 class2");

返回jQuery对象(链式调用)

.hasClass()

检查元素是否包含指定的CSS类

var hasClass = $("#elem").hasClass("class1");

返回布尔值

true/false

.attr()

设置或获取HTML属性(也可用于style属性)

$("#elem").attr("style", "color: red;");

<br>

var style = $("#elem").attr("style");

返回属性值

undefined

.removeAttr()

移除HTML属性(也可移除style属性)

$("#elem").removeAttr("style");

返回jQuery对象(链式调用)

.prop()

设置或获取元素的属性值(较少用于样式操作)

$("#elem").prop("style", "color: blue;");

返回属性值或undefined

css():

用于直接操作CSS样式,适合动态修改样式属性。

可以设置单个属性多个属性(通过对象形式)。

也可以用于获取单个属性的值。

addClass().removeClass().toggleClass().hasClass():

这些方法主要用于操作CSS类,适合通过预定义的样式类动态改变元素的外观。

支持链式调用,方便与其他jQuery方法组合使用。

attr().removeAttr():

主要用于操作HTML属性,但也可以通过style属性操作样式。

attr()可以设置或获取属性值,.removeAttr()用于移除属性。

prop()用于操作元素的属性值,功能与.attr()类似,但在某些情况下(如布尔属性)表现不同。较少用于样式操作,但可以用于动态设置style属性。

jQuery中的Ajax方法

jQuery AJAX是jQuery库提供的一种简化AJAX操作的工具。

使用$.ajax方法来发送Ajax请求。通过传递一个包含请求参数的对象,我们可以指定请求的URL、类型、数据类型以及成功和失败的处理函数。在成功回调函数中,我们可以处理服务器返回的数据。

load()

$.get()

$.post()

干什么

load() 方法从服务器加载数据,并把返回的数据放入被选元素中。

$.get() 方法通过 HTTP GET 请求从服务器上请求数据。

$.post() 方法通过 HTTP POST 请求向服务器提交数据。

语法·

$(selector).load(URL,data,callback);

$.get(URL,callback);

$.get( URL [, data ] [, callback ] [, dataType ] )

$.post(URL,callback);

$.post( URL [, data ] [, callback ] [, dataType ] )

参数

必需的 URL 参数规定您希望加载的 URL。

可选的 data 参数规定与请求一同发送的查询字符串键/值对集合。

可选的 callback 参数是 load() 方法完成后所执行的函数名称。

URL:发送请求的 URL字符串。

data:可选的,发送给服务器的字符串或 key/value 键值对。

callback:可选的,请求成功后执行的回调函数。

dataType:可选的,从服务器返回的数据类型。默认:智能猜测(可以是xml, json, script, 或 html)。

URL:发送请求的 URL字符串。

data:可选的,发送给服务器的字符串或 key/value 键值对。

callback:可选的,请求成功后执行的回调函数。

dataType:可选的,从服务器返回的数据类型。默认:智能猜测(可以是xml, json, script, 或 html)。

原生JavaScript AJAX与jQuery AJAX的用法比较-百度开发者中心 (baidu.com)

 

总结

        通过jQuery的验收,纪老师向我们传达了很多的信息,我们学习代码与理论真正要把握的是他们的本质,从看得懂,到技术的发展起源与进化。在学习的角度上,还是以人的角度去思考问题,包括遇到的jQuery引用的位置,head和body都有哪些内容,为什么?我们致力于做一名designer。

        全局观+带着问题去学习,不怕不知道就怕不知道,如何能够把枯燥的知识看得进去,就涉及到学习的步骤,即三遍读书法。前几天搜到的一个介于舒适区与未知领域的,有一部分叫做甜头区域,为什么会觉得难,是因为很多背景知识不理解,理解了背景知识,学起来也就不难了。

        又学到了一个新典故,“小鸡吃石子”,小鸡吃石子,对于个人成长而言,需要自食其力,掌握生存本领。对于教育体制而言,摆脱养殖场,掌握养殖场想要控制的变量,或者根据变量要求锻炼、发展自己。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【背包问题】完全背包

目录 前言&#xff1a; 一&#xff0c;完全背包问题 问题描述&#xff1a; 模板题目&#xff1a; 题目解析&#xff1a; 代码&#xff1a; 空间优化&#xff1a; 二&#xff0c;典例 1&#xff0c;零钱兑换 题目解析&#xff1a; 算法分析&#xff1a; 代码&#xff…

【Python实现机器遗忘算法】复现2023年TNNLS期刊算法UNSIR

【Python实现机器遗忘算法】复现2023年TNNLS期刊算法UNSIR 1 算法原理 Tarun A K, Chundawat V S, Mandal M, et al. Fast yet effective machine unlearning[J]. IEEE Transactions on Neural Networks and Learning Systems, 2023. 本文提出了一种名为 UNSIR&#xff08;Un…

Django实现数据库的表间三种关系

Django实现数据库的表间三种关系 1. 一对多&#xff08;One-to-Many&#xff09;关系示例&#xff1a;关系说明&#xff1a;查询示例&#xff1a; 2. 一对一&#xff08;One-to-One&#xff09;关系示例&#xff1a;关系说明&#xff1a;查询示例&#xff1a; 3. 多对多&#x…

知识管理平台在企业信息化建设中的应用价值与未来展望

内容概要 在当今信息化时代&#xff0c;企业面临着海量信息的挑战&#xff0c;知识管理平台因此应运而生&#xff0c;成为企业提升管理效率和决策能力的关键工具。知识管理平台不仅仅是一个信息存储的工具&#xff0c;它集成了信息共享、协作与创新、决策支持等多项功能。通过…

原生 Node 开发 Web 服务器

一、创建基本的 HTTP 服务器 使用 http 模块创建 Web 服务器 const http require("http");// 创建服务器const server http.createServer((req, res) > {// 设置响应头res.writeHead(200, { "Content-Type": "text/plain" });// 发送响应…

力扣【98. 验证二叉搜索树】Java题解(容易写错的题)

二叉搜索树的中序遍历是有序数组&#xff08;因为对于数组某个元素&#xff0c;左边是它的左子树而右边是它的右子树&#xff0c;显然二叉树搜索树左子树小于它&#xff0c;右子树大于它&#xff09;&#xff0c;所以可以直接中序遍历然后判断是否有序来判断是否是二叉搜索树。…

MiniHack:为强化学习研究提供丰富而复杂的环境

人工智能咨询培训老师叶梓 转载标明出处 想要掌握如何将大模型的力量发挥到极致吗&#xff1f;叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具&#xff08;限时免费&#xff09;。 1小时实战课程&#xff0c;您将学习到如何轻松上手并有效利用 Llama Facto…

构建自定义 AI 模型服务:集成到 Spring AI 处理特定任务

生成式 AI 的发展为解决各种特定任务提供了强大的支持。然而&#xff0c;许多场景需要定制化的 AI 模型&#xff0c;例如企业内的专属知识库问答、图像处理任务、或特定行业的语音识别。将自定义的 AI 模型集成到 Spring AI 中&#xff0c;可以利用其模块化、配置管理和工具支持…

从AD的原理图自动提取引脚网络的小工具

这里跟大家分享一个我自己写的小软件&#xff0c;实现从AD的原理图里自动找出网络名称和引脚的对应。存成文本方便后续做表格或是使用简单行列编辑生成引脚约束文件&#xff08;如.XDC .UCF .TCL等&#xff09;。 我们在FPGA设计中需要引脚锁定文件&#xff0c;就是指示TOP层…

kubernetes 核心技术-调度器

在 Kubernetes 集群中&#xff0c;调度器扮演着至关重要的角色。它负责决定将哪些 Pod 放置到哪些节点上运行&#xff0c;以确保集群资源得到高效利用的同时满足各种约束条件。调度器不仅要考虑 CPU 和内存等基本资源的需求&#xff0c;还需要处理诸如亲和性、反亲和性、污点与…

ultralytics 是什么?

ultralytics 是一个用于计算机视觉任务的 Python 库&#xff0c;专注于提供高效、易用的目标检测、实例分割和图像分类工具。它最著名的功能是实现 YOLO&#xff08;You Only Look Once&#xff09; 系列模型&#xff0c;特别是最新的 YOLOv8。 1. YOLO 是什么&#xff1f; YO…

MySQL分表自动化创建的实现方案(存储过程、事件调度器)

《MySQL 新年度自动分表创建项目方案》 一、项目目的 在数据库应用场景中&#xff0c;随着数据量的不断增长&#xff0c;单表存储数据可能会面临性能瓶颈&#xff0c;例如查询、插入、更新等操作的效率会逐渐降低。分表是一种有效的优化策略&#xff0c;它将数据分散存储在多…

Vue 3 中的标签 ref 与 defineExpose:模板引用与组件暴露

在 Vue 3 中&#xff0c;ref 不仅可以用于创建响应式数据&#xff0c;还可以用于获取 DOM 节点或组件实例。通过 ref&#xff0c;我们可以直接访问模板中的元素或组件&#xff0c;并在需要时操作它们。此外&#xff0c;defineExpose 用于在 <script setup> 语法中显式暴露…

Docker 国内镜像源

目录 概述 步骤 参考资料 概述 自 2024-06-06 开始&#xff0c;阿里&#xff0c;腾讯、中科大等国内的 Docker Hub 镜像加速器相继停止服务&#xff0c;总结了网友整理出来一些其他国内 Docker Hub 镜像源&#xff0c;经过测试可以使用。 步骤 配置 Docker 守护程序 修改…

HTML5使用favicon.ico图标

目录 1. 使用favicon.ico图标 1. 使用favicon.ico图标 favicon.ico一般用于作为网站标志&#xff0c;它显示在浏览器的地址栏或者标签上 制作favicon图标 选择一个png转ico的在线网站&#xff0c;这里以https://www.bitbug.net/为例。上传图片&#xff0c;目标尺寸选择48x48&a…

xarray转换nc文件经度范围:0-360更改为-180-180

原文见https://blog.csdn.net/weixin_44237337/article/details/119707332&#xff0c;因为觉得很实用就转载一下。 lon_name longitude #你的nc文件中经度的命名 ds[longitude_adjusted] xr.where(ds[lon_name] > 180,ds[lon_name] - 360,ds[lon_name]) ds (ds.swap_d…

834 数据结构(自用)

一.绪论 1.数据结构基本概念 1.基本术语: 数据元素&#xff1a;数据基本单位。 数据项&#xff1a;众多数据项组成一个数据元素&#xff0c;不可分割的最小单位。 数据对象&#xff1a;具有相同性质的数据元素集合。 数据结构&#xff1a;相互之间存在一种或多种特定关系…

【C++动态规划 网格】2328. 网格图中递增路径的数目|2001

本文涉及知识点 C动态规划 LeetCode2328. 网格图中递增路径的数目 给你一个 m x n 的整数网格图 grid &#xff0c;你可以从一个格子移动到 4 个方向相邻的任意一个格子。 请你返回在网格图中从 任意 格子出发&#xff0c;达到 任意 格子&#xff0c;且路径中的数字是 严格递…

fatal error C1083: ޷[特殊字符]ļ: openssl/opensslv.h: No such file or directory

一、环境 1. Visual Studio 2017 2. edk2&#xff1a;202305 3. Python&#xff1a;3.11.4 二、 fatal error C1083: ޷&#xbfab0;ļ: openssl/opensslv.h: No such file or directory 上图出现这个警告&#xff0c;不用管。 出现Done&#xff0c;说明编译成功。 执行上…

组件框架漏洞

一.基础概念 1.组件 定义&#xff1a;组件是软件开发中具有特定功能或特性的可重用部件或模块&#xff0c;能独立使用或集成到更大系统。 类型 前端 UI 组件&#xff1a;像按钮、下拉菜单、导航栏等&#xff0c;负责构建用户界面&#xff0c;提升用户交互体验。例如在电商 AP…