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…

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

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

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

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

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

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

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

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

HTML5使用favicon.ico图标

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

【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…

隐藏字符造成的linux命令执行失败(非常难绷)

隐藏字符问题发生情景 事情是这样的&#xff0c;为了方便主机和虚拟机之间数据的传输&#xff0c;我打算建一个共享文件夹。由于我选择的是手动挂载&#xff0c;在VirtualBox 中创建好共享文件夹后&#xff0c;我着手打开Ubuntu&#xff0c;想将这个共享文件夹挂载到我的家目录…

C/C++ 虚函数

虚函数的定义 虚函数是指在基类内部声明的成员函数前面添加关键字 virtual 指明的函数虚函数存在的意义是为了实现多态&#xff0c;让派生类能够重写(override)其基类的成员函数派生类重写基类的虚函数时&#xff0c;可以添加 virtual 关键字&#xff0c;但不是必须这么做虚函…

爬虫基础之爬取某基金网站+数据分析

声明: 本案例仅供学习参考使用&#xff0c;任何不法的活动均与本作者无关 网站:天天基金网(1234567.com.cn) --首批独立基金销售机构-- 东方财富网旗下基金平台! 本案例所需要的模块: 1.requests 2.re(内置) 3.pandas 4.pyecharts 其他均需要 pip install 模块名 爬取步骤: …

RKNN_C++版本-YOLOV5

1.背景 为了实现低延时&#xff0c;所以开始看看C版本的rknn的使用&#xff0c;确实有不足的地方&#xff0c;请指正&#xff08;代码借鉴了rk官方的仓库文件&#xff09;。 2.基本的操作流程 1.读取模型初始化 // 设置基本信息 // 在postprocess.h文件中定义&#xff0c;详见…

Learning Vue 读书笔记 Chapter 2

2. Vue 基本工作原理 2.1 Virtual DOM 概念&#xff1a; DOM: DOM以内存中树状数据结构的形式&#xff0c;代表了网页上的HTML&#xff08;或XML&#xff09;文档内容。它充当了一个编程接口&#xff0c;将网页与实际的编程代码&#xff08;如JavaScript&#xff09;连接起来…

【C++高并发服务器WebServer】-7:共享内存

本文目录 一、共享内存1.1 shmget函数1.2 shmat1.3 shmdt1.4 shmctl1.5 ftok1.6 共享内存和内存映射的关联1.7 小demo 二、共享内存操作命令 一、共享内存 共享内存允许两个或者多个进程共享物理内存的同一块区域&#xff08;通常被称为段&#xff09;。由于一个共享内存段会称…

CrypTen——基于pytorch的隐私保护机器学习框架

目录 一、CrypTen概述 二、应用场景 三、CrypTen优势 四、CrypTen技术解析 1.基于pytorch的构建基础 2.核心密码学原语 3.加密模型训练流程 五、传统隐私保护技术与CrypTen的对比 1.传统隐私保护技术介绍 2.CrypTen与传统隐私保护技术的区别 六、CrypTen的环境配置…

ES6 简单练习笔记--变量申明

一、ES5 变量定义 1.在全局作用域中 this 其实就是window对象 <script>console.log(window this) </script>输出结果: true 2.在全局作用域中用var定义一个变量其实就相当于在window上定义了一个属性 例如: var name "孙悟空" 其实就相当于执行了 win…

Arduino大师练成手册 -- 控制 PN532 NFC 模块

要在 Arduino 上控制 PN532 NFC 模块&#xff0c;你可以按照以下步骤进行&#xff1a; 硬件连接 VCC&#xff1a;连接到 Arduino 的 3.3V 引脚。 GND&#xff1a;连接到 Arduino 的 GND 引脚。 SDA&#xff1a;连接到 Arduino 的 SDA 引脚&#xff08;通常是 A4&#xff09…

python——Django 框架

Django 框架 1、简介 Django 是用python语言写的开源web开发框架&#xff0c;并遵循MVC设计。 Django的**主要目的是简便、快速的开发数据库驱动的网站。**它强调代码复用&#xff0c;多个组件可以很方便的以"插件"形式服务于整个框架&#xff0c;Django有许多功能…