You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决jQuery的.each()方法每次运行都返回最后一个值的问题?

如何阻止.each()方法每次运行时都选中最后一个值?

嘿,我来帮你捋清楚这个问题~

你代码里的问题其实很典型:你的addedClass变量在each循环里被反复覆盖了。咱们拆解一下:

  1. 你用$("#list li").each()遍历所有li元素,每一次循环都会根据当前li的类修改addedClass的值
  2. 等整个each循环跑完,addedClass只会保留最后一个li对应的类名
  3. 后面的for循环是在each完全结束后才执行的,所以所有添加的<p>标签都会用这个最终的类,自然就全变成最后那个值了

另外还有个小细节:你原来的append语句里,HTML属性的引号写法有问题,会导致语法错误,这个我也一起帮你修正了。

下面分两种常见需求给你解决方案:


需求1:只要有任意一个li带one类,所有p都用red类,否则用blue类

这种情况根本不需要遍历所有li,直接检查是否存在符合条件的元素就行,效率更高:

var array = ["test1", "test2", "test3"]; 
// 直接判断是否存在带one类的li
var addedClass = $("#list li.one").length > 0 ? "red" : "blue";
for (var i = 0; i < array.length; i++) { 
  // 修正引号问题,用单引号包裹class属性值
  $("#results").append("<p class='" + addedClass + "'>" + array[i] + "</p>"); 
}

需求2:数组的每个元素对应一个li的类(假设数组长度和li数量一致)

这种情况要把数组的处理逻辑放到each循环内部,利用循环的index参数对应数组的索引,同时把addedClass的作用域限制在循环里,避免被覆盖:

var array = ["test1", "test2", "test3"]; 
$("#list li").each(function(index) { 
  // 把变量声明在循环内部,每次循环都是独立的
  var addedClass = $(this).hasClass("one") ? "red" : "blue";
  $("#results").append("<p class='" + addedClass + "'>" + array[index] + "</p>"); 
});

核心思路就是:要么提前拿到最终结果,避免循环覆盖变量,要么把变量的作用域限制在单次循环内,及时使用当前值。这样就不会出现总是取最后一个值的问题啦~

内容的提问来源于stack exchange,提问作者medglabe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:34:33