能否中断jQuery each迭代、修改值后继续执行?附代码示例
解答:jQuery each迭代的中断、修改与继续执行
当然可以实现中断jQuery的each迭代,处理完特定值后再继续执行!下面结合你的代码场景详细说明:
1. 核心知识点:jQuery each的控制逻辑
在jQuery的.each()迭代中:
- 跳过当前迭代(类似
continue):在回调函数里执行return true; - 终止整个迭代(类似
break):在回调函数里执行return false;
如果你的需求是找到特定元素,修改对应的值后继续遍历剩下的元素,其实不需要完全终止迭代,只需要在匹配到目标时修改数据,然后让迭代继续即可;如果需要先中断迭代做一些额外处理,之后再手动触发剩余元素的遍历,也可以轻松实现。
2. 结合你的代码示例的实现
场景1:修改特定元素的值后继续迭代
比如你想找到name为"target"的input,修改它的value后继续把所有元素的键值推入数组:
var aKeys = new Array(), aValues = new Array(), sArray = {}; $('input').each(function (index, element) { var sKey = $(this).attr('name'), sValue = $(this).val(); // 找到目标元素,修改对应值 if (sKey === 'target') { sValue = '修改后的新值'; // 也可以直接修改元素本身的value:$(this).val('新值'); } aKeys.push(sKey); aValues.push(sValue); // 如果需要跳过某个元素(比如name为"skip"的元素),可以用这行 // if (sKey === 'skip') return true; }); // 后续创建目标对象的逻辑 for(var i = 0; i < aKeys.length; i++){ sArray[aKeys[i]] = aValues[i]; }
场景2:中断迭代,处理后手动继续遍历
如果需要先完全中断迭代,做一些额外处理(比如异步请求获取数据),之后再遍历剩余的元素,可以记录当前中断的索引,之后从该索引开始继续遍历:
var aKeys = new Array(), aValues = new Array(), sArray = {}; var breakIndex = -1; // 记录中断的位置 $('input').each(function (index, element) { var sKey = $(this).attr('name'), sValue = $(this).val(); // 遇到需要中断处理的条件 if (sKey === 'needBreak') { breakIndex = index; // 记录当前索引 // 先把当前元素修改后的值推入数组 sValue = '中断处理后的新值'; aKeys.push(sKey); aValues.push(sValue); return false; // 终止当前迭代 } aKeys.push(sKey); aValues.push(sValue); }); // 这里做中断后的额外处理(比如异步操作) // 假设处理完成后,继续遍历剩余元素 if (breakIndex !== -1) { $('input').slice(breakIndex + 1).each(function (index, element) { var sKey = $(this).attr('name'), sValue = $(this).val(); aKeys.push(sKey); aValues.push(sValue); }); } // 最终创建目标对象 for(var i = 0; i < aKeys.length; i++){ sArray[aKeys[i]] = aValues[i]; }
3. 额外优化提示
其实你最终要创建键值对对象sArray,可以不用额外维护两个数组,直接在each里构建对象会更简洁:
var sArray = {}; $('input').each(function (index, element) { var sKey = $(this).attr('name'), sValue = $(this).val(); // 处理修改逻辑 if (sKey === 'target') { sValue = '新值'; } sArray[sKey] = sValue; });
内容的提问来源于stack exchange,提问作者Andrew Sunset
相关产品推荐
相关产品推荐

