【Java 进阶篇】JQuery 遍历 —— 无尽可能性的 `each` 之旅

在这里插入图片描述

在前端的征途中,操作元素是开发者不可避免的任务之一。而在 JQuery 中,each 方法则是处理这个任务的得力助手。本文将深入探讨 each 方法的奇妙之处,以及它与原生的 for...of 循环的关系,带你领略无尽可能性的遍历之旅。

起步:重新认识 each

在 JQuery 中,each 方法是一种遍历集合的强大方式。它允许你对集合中的每个元素执行特定的操作,是一种高度灵活的遍历工具。首先,我们来看一下 each 方法的基本语法:

$.each(collection, function(index, value) {// 对每个元素执行的操作
});
  • collection:要遍历的集合,可以是数组、对象或类数组对象。
  • function(index, value):在集合中每个元素上执行的函数,其中 index 是元素的索引,value 是元素的值。

each 方法的真正妙处在于它的灵活性。无论是数组、对象还是其他类型的集合,each 都能游刃有余地完成遍历任务。

用代码感受 each 的魔法

首先,我们通过一个简单的例子来感受一下 each 方法的神奇之处。在这个例子中,我们有一个包含数字的数组,我们将使用 each 方法遍历数组,并将每个数字输出到控制台:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JQuery each 方法示例</title><script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
</head>
<body><script>$(document).ready(function() {// 定义一个包含数字的数组var numbers = [1, 2, 3, 4, 5];// 使用 each 方法遍历数组$.each(numbers, function(index, value) {// 输出每个数字到控制台console.log("第" + (index + 1) + "个数字是:" + value);});});</script>
</body>
</html>

在这个例子中,我们通过 each 方法遍历了 numbers 数组,并使用回调函数输出了每个数字到控制台。这展示了 each 方法的简单用法,但实际上它的应用远不止于此。

更进一步:each 的无限可能

1. 遍历数组

each 方法对数组的遍历是最为直观的。在下面的例子中,我们使用 each 方法遍历一个包含颜色名称的数组,并在页面上创建对应颜色的块元素:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JQuery each 方法示例</title><script src="https://code.jquery.com/jquery-3.6.4.min.js"></script><style>.color-block {width: 100px;height: 100px;margin: 5px;display: inline-block;}</style>
</head>
<body><script>$(document).ready(function() {// 定义一个包含颜色名称的数组var colors = ["red", "green", "blue", "yellow", "purple"];// 使用 each 方法遍历数组,并创建对应颜色的块元素$.each(colors, function(index, value) {// 创建块元素var block = $("<div></div>").addClass("color-block").css("background-color", value);// 在 body 中追加块元素$("body").append(block);});});</script>
</body>
</html>

在这个例子中,我们使用 each 方法遍历了 colors 数组,并根据每个颜色创建了一个块元素。通过这样的方式,我们可以动态地生成页面上的元素,而不需要手动编写每个元素的代码。

2. 遍历对象

each 方法不仅可以用于数组,还可以用于遍历对象的属性。在下面的例子中,我们有一个包含学生信息的对象,我们使用 each 方法遍历这个对象,并在页面上显示学生的姓名和年龄:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JQuery each 方法示例</title><script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
</head>
<body><script>$(document).ready(function() {// 定义一个包含学生信息的对象var students = {student1: { name: "Alice", age: 20 },student2: { name: "Bob", age: 22 },student3: { name: "Charlie", age: 21 }};// 使用 each 方法遍历对象,并显示学生的姓名和年龄$.each(students, function(studentId, studentInfo) {// 创建包含学生信息的字符串var studentString = "学生ID:" + studentId + ",姓名:" + studentInfo.name + ",年龄:" + studentInfo.age;// 在 body 中追加包含学生信息的段落$("body").append("<p>" + studentString + "</p> }}</script>
</body>
</html>

3. 修改元素属性

each 方法不仅可以用于遍历集合,还可以在遍历的过程中修改元素的属性。在下面的例子中,我们使用 each 方法遍历包含图片路径的数组,并将这些路径应用到页面上的图片元素的 src 属性:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JQuery each 方法示例</title><script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
</head>
<body><img id="image1" alt="Image 1"><img id="image2" alt="Image 2"><img id="image3" alt="Image 3"><script>$(document).ready(function() {// 定义一个包含图片路径的数组var imagePaths = ["path/to/image1.jpg", "path/to/image2.jpg", "path/to/image3.jpg"];// 使用 each 方法遍历数组,并修改图片元素的 src 属性$.each(imagePaths, function(index, path) {// 构建图片元素的 IDvar imageId = "image" + (index + 1);// 修改图片元素的 src 属性$("#" + imageId).attr("src", path);});});</script>
</body>
</html>

在这个例子中,我们定义了一个包含图片路径的数组 imagePaths,然后使用 each 方法遍历了这个数组。在遍历的过程中,我们通过拼接字符串构建了每个图片元素的 ID,然后使用 attr 方法修改了图片元素的 src 属性。

更多可能性:全局 each 与原生 for...of

在介绍全局 each 之前,我们先来了解一下原生的 for...of 循环。for...of 是 ECMAScript 6 新增的一种遍历集合的方式,它更加直观和语义化。下面是一个简单的例子:

// 遍历数组
const numbers = [1, 2, 3, 4, 5];
for (const number of numbers) {console.log(number);
}// 遍历字符串
const str = "Hello";
for (const char of str) {console.log(char);
}// 遍历 Map
const myMap = new Map();
myMap.set("a", 1);
myMap.set("b", 2);
for (const [key, value] of myMap) {console.log(key, value);
}

这里我们通过 for...of 循环遍历了数组、字符串和 Map 对象。它的语法简洁,代码可读性强。

全局 each

JQuery 的 each 方法是基于回调函数的遍历方式,而全局的 each 是一种无需回调函数的遍历方式,它允许你直接在集合上执行操作。全局 each 的语法如下:

$.each(collection, function(index, value) {// 对每个元素执行的操作
});

相比于 for...of,全局 each 语法稍显繁琐。但它仍然是一种灵活、强大的遍历方式。下面通过示例演示全局 each 的使用:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>全局 each 示例</title><script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
</head>
<body><script>$(document).ready(function() {// 遍历数组$.each([1, 2, 3, 4, 5], function(index, value) {console.log("数组元素索引:" + index + ",值:" + value);});// 遍历对象$.each({ a: 1, b: 2, c: 3 }, function(key, value) {console.log("对象属性名:" + key + ",值:" + value);});// 遍历类数组对象$.each(document.querySelectorAll('p'), function(index, element) {console.log("段落索引:" + index + ",文本内容:" + element.textContent);});});</script>
</body>
</html>

在这个例子中,我们分别使用全局 each 遍历了数组、对象和文档中的段落元素。这展示了全局 each 的灵活性,无论是数组、对象还是类数组对象,都能轻松应对。

比较全局 each 与原生 for...of

  • 可读性for...of 循环更加直观和语义化,尤其适用于数组和可迭代对象的遍历。全局 each 在遍历数组时需要添加一个回调函数,可能稍显繁琐。

  • 适用范围for...of 循环适用于所有可迭代对象,包括数组、字符串、Map 等。全局 each 更加灵活,可以遍历数组、对象、类数组对象等,但在语义上更偏向于数组和类数组对象的遍历。

  • 语法差异for...of 循环的语法相对简单,不需要引入 JQuery。全局 each 需要引入 JQuery,并且语法稍显繁琐。

小结

通过本文的介绍,你应该对 each 方法及全局 each 有了更深入的了解。它们是 JQuery 中非常有用的工具,能够帮助你轻松地遍历集合,并在遍历的过程中执行各种操作。无论是数组、对象还是其他类数组对象,each 方法都能胜任。全局 each 则提供了一种无需回调函数的遍历方式,更加灵活。

在实际开发中,选择使用 each 还是原生的 for...of 取决于具体的需求和个人偏好。在遍历数组时,特别是在 JQuery 已经被使用的项目中,each 无疑是一个强大而方便的选择。而在新项目中,或者需要遍历各种可迭代对象时,原生的 for...of 循环可能更为合适。希望通过本文的学习,你能更加熟练地运用这两种遍历方式,让你的前端代码更加出色。加油,少年!在无尽的遍历之旅中,愿你发现更多的乐趣和技巧。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

2023APMCM亚太杯/小美赛数学建模竞赛优秀论文模板分享

一、模板介绍 二、注意事项 将论文划分小节时&#xff0c;应避免在小节中出现大段的文字叙述&#xff0c;这样的叙述会妨碍评委在浏览论文时掌握论文的要点。重要的句子&#xff0c;包括首次定义的概念&#xff0c;用黑体书写。 重要的数学公式应另起新行单独列出。建模所用的…

微信小程序会议OA-登录获取手机号流程登录-小程序导入微信小程序SDK(从微信小程序和会议OA登录获取手机号到登录小程序导入微信小程序SDK)

目录 获取用户昵称头像和昵称 wx.getUserProfile bindgetuserinfo 登录过程 登录-小程序 wx.checkSession wx.login wx.request 后台 准备数据表 反向生成工具生成 准备封装前端传过来的数据 小程序服器配置 导入微信小程序SDK application.yml WxProperties …

【Python】Python中的@staticmethod和@classmethod的用法

【Python】Python中的staticmethod和classmethod的用法 文章目录 【Python】Python中的staticmethod和classmethod的用法1. staticmethod2. classmethod 1. staticmethod 静态方法是属于类而不是类的实例的方法。静态方法不需要访问类的实例或实例的状态。因此&#xff0c;它们…

HarmonyOS从基础到实战-高性能华为在线答题元服务

最近看到美团、新浪、去哪儿多家互联网企业启动鸿蒙原生应用开发&#xff0c;这个HarmonyOS NEXT越来越引人关注。奈何当前不面向个人开发者开放&#xff0c;但是我们可以尝试下鸿蒙新的应用形态——元服务的开发。 元服务是基于HarmonyOS提供的一种面向未来的服务提供方式&…

idea全局搜索

ctrlshiftf 在 IntelliJ IDEA 中&#xff0c;你可以使用全局搜索功能来搜索整个项目中的代码、文件和符号。全局搜索功能能够帮助你快速定位和浏览代码&#xff0c;提高开发效率。 要执行全局搜索&#xff0c;请按下以下快捷键&#xff1a; Windows/Linux: 使用快捷键 Ctrl …

如何在外部数据库中存储空间化表时使用Mapinfo_mapcatalog

开始创建地图目录表之前 您将使用EasyLoader在要使用的数据库中创建地图目录表。EasyLoader与MapInfo Pro一起安装。 &#xff08;工具“DBMS_Catalog”不再随MapInfo Professional 64位一起提供&#xff0c;因为它的功能可以在EasyLoader工具中找到。&#xff09; ​ 注&…

湖科大计网:传输层

一、传输层概述 一、基本概念 传输层是端到端的协议。 因特网的两种不同的传输层协议&#xff1a; TCP&#xff1a;面向连接 UDP&#xff1a;无连接 我们在学习的过程中&#xff0c;只需要关注传输层之间的通信&#xff0c;不需要关注传输层协议数据是经过路由器转发至目的网络…

网卡收发包过程

初始化 注&#xff1a;初始化由网卡的驱动程序完成 在内存中为DMA开辟一段连续空间&#xff08;这段内存也被称为DMA内存区&#xff09;&#xff0c;存储PD&#xff08;Packet Descriptor&#xff09;数组&#xff0c; PD数组是给网卡中的DMA Engine使用的&#xff0c;1个PD对…

Java中,ArrayList和LinkedList区别区分,简洁

在Java中&#xff0c;ArrayList和LinkedList都是用来存储和管理数据的类 ArrayList是Java中的一个类&#xff0c;它实现了List接口&#xff0c;是一种基于动态数组实现的集合类常用成员方法&#xff1a; 构造方法&#xff1a;ArrayList() 成员方法&#xff1a;add、remov…

一篇文章让你彻底了解Java算法「十大经典排序算法」

✍️作者简介&#xff1a;码农小北&#xff08;专注于Android、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f449;关注✨、点赞&…

Redis篇---第十二篇

系列文章目录 文章目录 系列文章目录前言一、Memcache与Redis的区别都有哪些?二、单线程的redis为什么这么快三、redis的数据类型,以及每种数据类型的使用场景前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇…

你真的了解 Cookie 和 Session 吗?

文章目录 Cookie 和 Session总结 Cookie 和 Session cookie HTTP cookie&#xff08;web cookie、browser cookie&#xff09;是服务器发送给用户 web 浏览器的一小段数据。浏览器可能会存储 cookie&#xff0c;并在以后的请求中将其发送回同一台服务器。通常&#xff0c;HTTP …

【OpenGauss源码学习 —— 列存储(ColumnTableSample)】

执行算子&#xff08;ColumnTableSample&#xff09; 概述ColumnTableSample 类ColumnTableSample::ColumnTableSample 构造函数ColumnTableSample::~ColumnTableSample 析构函数ExecCStoreScan 函数ColumnTableSample::scanVecSample 函数ColumnTableSample::getMaxOffset 函数…

pikachu靶场-暴力破解攻略

pikachu暴力破解 基于表单的暴力破解 抓包发送到intruder 添加两个变量 下图攻击模式需要选择cluster bomb 用户名处添加几个常见的用户名 密码处则添加密码字典 如图可见有一条密码已经爆出 登录成功 验证码绕过(on server) 输入验证码后提交 抓包 然后发送到repeater先…

spring ioc原理剖析上不包括DI

###1.刷新上下文对象->创建beanfactory public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {StartupStep contextRefresh this.applicationStartup.start("spring.context.refresh");// Prepar…

vue中data属性为什么是一个函数?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-data属性 目录 为什么data属性是一个函数而不是一个对象&#xff1f; 一、实例和组件定义dat…

解锁数据库运维秘籍:掌握AntDB-T动态共享内存,提升进程间通信效率

动态共享内存是AntDB数据库通信的重要手段&#xff0c;本文主要阐述AntDB-T数据库动态共享内存的实现原理、实现方式与使用方法。 AntDB-T数据库是一款企业级通用分布式关系型数据库&#xff0c;其数据库内核是基于进程模型实现的&#xff0c;因此进程间通信&#xff08;IPC&am…

Appium移动自动化测试—如何安装Appium

前言 Appium 自动化测试是很早之前就想学习和研究的技术了&#xff0c;可是一直抽不出一块完整的时间来做这件事儿。现在终于有了。 反观各种互联网的招聘移动测试成了主流&#xff0c;如果再不去学习移动自动化测试技术将会被淘汰。 web自动化测试的路线是这样的&#xff1…

基于单片机的公共场所马桶设计(论文+源码)

1.系统设计 本课题为公共场所的马桶设计&#xff0c;其整个系统架构如图2.1所示&#xff0c;其采用STC89C52单片机为核心控制器&#xff0c;结合HC-SR04人体检测模块&#xff0c;压力传感器&#xff0c;LCD1602液晶&#xff0c;蜂鸣器&#xff0c;L298驱动电路等构成整个系统&…

1445 雉兔同笼

Tint(input()) for i in range(T):s input().split()head int(s[0])foot int(s[1])rabbitfoot/2-headchicken2*head-foot/2if rabbit>0 and chicken>0 and rabbit.is_integer():print(int(chicken),int(rabbit))else:print(-1)