jQuery.each()方法
在 jQuery 中,$.each()
方法是一个通用的迭代方法,用于遍历数组、对象或 jQuery 对象集合。它提供了简洁的方式来循环处理元素,常用于处理 DOM 元素、数组数据或键值对。以下是对 $.each()
方法的详细介绍,包括定义、语法、参数、用法、示例和注意事项,适合初学者快速上手。
1. 定义
$.each()
:jQuery 提供的迭代方法,用于遍历数组、对象或 jQuery 选择器返回的元素集合。- 所属库:jQuery 核心方法,无需额外插件。
- 用途:逐个处理数组元素、对象属性或 DOM 元素,执行指定的回调函数。
2. 语法
$.each()
有两种主要用法:
- 遍历数组或对象:
$.each(arrayOrObject, function(indexOrKey, value) {
// 回调函数逻辑
});
- 遍历 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()
比原生forEach
或for
循环稍慢(jQuery 封装开销)。- 对于高性能场景,考虑使用原生方法。
- this 的使用:
- 在
$.each()
中,this
指向当前元素,与value
或element
相同。 - 在
$(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, element
(this
为 DOM 元素)。 - 推荐实践:
- 使用
return false
控制循环终止。 - 优先用
$(this)
处理 DOM 元素。 - 高性能场景考虑原生
forEach
或for...of
。 - 适用场景:DOM 操作、数据处理、配置合并。
如果你需要更具体的示例(如结合 AJAX 处理数据、性能优化)或对其他 jQuery 方法的说明,请告诉我!