jQuery.each()方法

在 jQuery 中,$.each() 方法是一个通用的迭代方法,用于遍历数组、对象或 jQuery 对象集合。它提供了简洁的方式来循环处理元素,常用于处理 DOM 元素、数组数据或键值对。以下是对 $.each() 方法的详细介绍,包括定义、语法、参数、用法、示例和注意事项,适合初学者快速上手。


1. 定义

  • $.each():jQuery 提供的迭代方法,用于遍历数组、对象或 jQuery 选择器返回的元素集合。
  • 所属库:jQuery 核心方法,无需额外插件。
  • 用途:逐个处理数组元素、对象属性或 DOM 元素,执行指定的回调函数。

2. 语法

$.each() 有两种主要用法:

  1. 遍历数组或对象
   $.each(arrayOrObject, function(indexOrKey, value) {
       // 回调函数逻辑
   });
  1. 遍历 jQuery 对象(通过 $(selector).each()):
   $(selector).each(function(index, element) {
       // 回调函数逻辑
   });
  • 参数
  • arrayOrObject:要遍历的数组或对象。
  • selector:jQuery 选择器,返回的元素集合。
  • function(indexOrKey, value)
    • indexOrKey:数组的索引(数字)或对象的键(字符串)。
    • value:当前元素(数组值、对象值或 DOM 元素)。
    • this:在回调函数中,this 指向当前元素(与 value 相同)。
  • index, element(jQuery 对象遍历):
    • index:元素在集合中的索引(从 0 开始)。
    • element:当前 DOM 元素(非 jQuery 对象)。
    • this:指向当前 DOM 元素。
  • 返回值
  • $.each():返回原数组或对象(支持链式调用)。
  • $(selector).each():返回 jQuery 对象(支持链式调用)。

3. 基本用法

3.1 遍历数组

const numbers = [10, 20, 30];
$.each(numbers, function(index, value) {
    console.log(`Index: ${index}, Value: ${value}`);
});

输出

Index: 0, Value: 10
Index: 1, Value: 20
Index: 2, Value: 30
  • 说明index 是数组索引,value 是数组元素,this 指向 value

3.2 遍历对象

const person = { name: "Alice", age: 25, city: "New York" };
$.each(person, function(key, value) {
    console.log(`Key: ${key}, Value: ${value}`);
});

输出

Key: name, Value: Alice
Key: age, Value: 25
Key: city, Value: New York

3.3 遍历 jQuery 对象

<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script>
$(document).ready(function() {
    $("li").each(function(index, element) {
        console.log(`Index: ${index}, Text: ${$(element).text()}`);
    });
});
</script>

输出

Index: 0, Text: Item 1
Index: 1, Text: Item 2
Index: 2, Text: Item 3
  • 说明
  • $(selector).each() 遍历 jQuery 选择的 DOM 元素。
  • element 是原生 DOM 元素,需用 $(element) 转为 jQuery 对象。

4. 控制循环

  • 提前退出:在回调函数中返回 false 可终止循环。
  • 继续循环:返回 true 或不返回值继续下一次迭代。

示例:提前退出

const numbers = [1, 2, 3, 4, 5];
$.each(numbers, function(index, value) {
    if (value === 3) {
        return false; // 终止循环
    }
    console.log(value);
});

输出

1
2
  • 说明:当 value 为 3 时,循环终止。

5. 常见使用场景

  • 处理 DOM 元素
$("p").each(function(index) {
    $(this).css("color", index % 2 === 0 ? "blue" : "red");
});
  • 处理 JSON 数据
const data = [
    { id: 1, name: "Alice" },
    { id: 2, name: "Bob" }
];
$.each(data, function(index, item) {
    console.log(`ID: ${item.id}, Name: ${item.name}`);
});

输出

ID: 1, Name: Alice
ID: 2, Name: Bob
  • 合并数组数据
const arr1 = [1, 2];
const arr2 = [3, 4];
$.each(arr2, function(index, value) {
    arr1.push(value);
});
console.log(arr1); // 输出: [1, 2, 3, 4]

6. 与 JavaScript 原生方法的对比

  • Array.prototype.forEach 的区别
  • $.each():支持数组和对象,jQuery 风格,跨浏览器兼容。
  • forEach:仅支持数组,ES5 原生方法。
  [1, 2, 3].forEach((value, index) => {
      console.log(`Index: ${index}, Value: ${value}`);
  });
  • $.map() 的区别
  • $.each():遍历并执行操作,无返回值或返回原对象。
  • $.map():遍历并生成新数组。
  const numbers = [1, 2, 3];
  const doubled = $.map(numbers, function(num) {
      return num * 2;
  });
  console.log(doubled); // 输出: [2, 4, 6]

7. 注意事项

  • 性能
  • $.each() 比原生 forEachfor 循环稍慢(jQuery 封装开销)。
  • 对于高性能场景,考虑使用原生方法。
  • this 的使用
  • $.each() 中,this 指向当前元素,与 valueelement 相同。
  • $(selector).each() 中,this 是原生 DOM 元素,需用 $(this) 转为 jQuery 对象。
  • 返回值
  • return false 终止循环,return true 或无返回值继续。
  • $.each() 返回原对象,$(selector).each() 返回 jQuery 对象。
  • 兼容性
  • $.each() 在所有 jQuery 版本中支持,跨浏览器兼容。
  • 对象遍历顺序
  • 对象属性的遍历顺序不保证(依赖 JavaScript 引擎)。
  • 替代方法
  • 现代 JavaScript 中,可用 for...of(数组)或 for...in(对象)替代:
    javascript for (let [key, value] of Object.entries({ a: 1, b: 2 })) { console.log(`Key: ${key}, Value: ${value}`); }

8. 高级示例

8.1 动态修改 DOM

<ul id="list">
    <li>Apple</li>
    <li>Banana</li>
    <li>Orange</li>
</ul>

<script>
$(document).ready(function() {
    $("#list li").each(function(index) {
        $(this).text(`${$(this).text()} (#${index + 1})`);
    });
});
</script>

效果

  • 列表变为:
  Apple (#1)
  Banana (#2)
  Orange (#3)

8.2 处理嵌套数组

const data = [
    { id: 1, items: ['a', 'b'] },
    { id: 2, items: ['c', 'd'] }
];
$.each(data, function(index, obj) {
    console.log(`Object ${index + 1}:`);
    $.each(obj.items, function(i, item) {
        console.log(`  Item ${i + 1}: ${item}`);
    });
});

输出

Object 1:
  Item 1: a
  Item 2: b
Object 2:
  Item 1: c
  Item 2: d

9. 总结

  • $.each():通用迭代方法,支持数组、对象和 jQuery 对象的遍历。
  • 关键点
  • 遍历数组:index, value
  • 遍历对象:key, value
  • 遍历 jQuery 对象:index, elementthis 为 DOM 元素)。
  • 推荐实践
  • 使用 return false 控制循环终止。
  • 优先用 $(this) 处理 DOM 元素。
  • 高性能场景考虑原生 forEachfor...of
  • 适用场景:DOM 操作、数据处理、配置合并。

如果你需要更具体的示例(如结合 AJAX 处理数据、性能优化)或对其他 jQuery 方法的说明,请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注