jQuery跳过,跳出$.each()循环

博客介绍了jQuery each循环中跳出和跳过循环的方法。使用return true可跳过当前循环,使用return false则能跳出所有循环,为jQuery开发中循环控制提供了有效解决方案。

jquery each跳出循环,跳过循环

return true; —— 跳过当过循环;

return false;——跳出所有循环;

    // 所有属性
    $.each($('a'),function (index,val) {
        var $a = $(val);
        var aName = $a.prop('name');

        if(objNotNull(aName)){  // name属性存在时以name属性为主
            params[aName] = $a.html();
        }else{
            var aId = $a.prop('id');
            if(aId.indexOf('extraP') !== -1){
                return true;
            }
            params[aId] = $a.html();
        }
    });

 

<think>我们有一段JavaScript代码,其主要功能是检查一个名为`serverList`的数组中是否存在与给定`description`相同的描述值。如果存在,则设置`descConflict`为`true`。然后,如果`editIndex`不等于`-1`,则重置`descConflict`为`false`。最后,如果`descConflict`为`true`,则弹出一个错误提示并返回`false`。 具体代码解释如下: ```javascript var descConflict = false; // 初始化一个标志变量,表示描述是否冲突 $.each(serverList, function () { // 遍历serverList数组 if (this.description == description) { // 如果当前遍历项的description属性等于外部的description变量 descConflict = true; // 将冲突标志设为true } }); if (editIndex != -1) { // 如果editIndex不等于-1(通常表示处于编辑模式,且editIndex指向正在编辑的项) descConflict = false; // 那么将冲突标志重置为false } if (descConflict) { // 如果最终冲突标志为true $.alert(ERR_FW_RULE_DESC_CONFLICT); // 弹出错误提示,提示描述冲突 return false; // 返回false,表示校验未通过 } ``` ### 代码作用说明: 1. **遍历检查描述冲突**:在`serverList`数组中检查是否有任何一项的`description`属性值与传入的`description`相同。如果找到相同的,就将`descConflict`设为`true`。 2. **编辑模式特殊处理**:如果`editIndex`不等于`-1`,说明当前正在编辑一个已有的条目。在编辑现有条目时,允许描述与自身相同(即编辑当前条目时,即使描述没有改变,也不会被误判为冲突),所以将`descConflict`重置为`false`。 3. **冲突处理**:如果经过上述步骤后,`descConflict`仍为`true`(即非编辑模式下发现描述冲突),则弹出错误提示,并返回`false`。 ### 潜在问题: - **效率问题**:如果数组很大,每次检查都需要遍历整个数组,可以考虑在适当的时候提前退出循环(例如,当已经发现冲突时,可以跳出循环)。 - **编辑模式逻辑**:这段代码在编辑模式下会忽略所有冲突。这意味着,如果编辑一个条目时,将其描述改为另一个已存在条目的描述,也会被允许(因为编辑模式下会强制将冲突标志设为false)。这可能是设计上的需求,也可能是逻辑错误。需要根据业务需求确认。 ### 改进建议: ```javascript var descConflict = false; // 如果是编辑模式,则跳过当前编辑项(避免与自己比较) $.each(serverList, function(index) { // 在编辑模式下,跳过当前编辑项(因为允许与自身相同) if (editIndex != -1 && index === editIndex) { return true; // 继续循环下一个 } if (this.description === description) { descConflict = true; return false; // 提前结束循环 } }); // 不再需要 if (editIndex != -1) 来重置descConflict,因为已经跳过当前编辑项 if (descConflict) { $.alert(ERR_FW_RULE_DESC_CONFLICT); return false; } ``` ### 改进说明: 1. 在遍历时,如果是编辑模式(`editIndex != -1`)且当前索引等于`editIndex`,则跳过该项(即允许编辑项的描述与自身相同)。 2. 一旦找到冲突项,立即退出循环(`return false`在`$.each`中表示终止循环)。 3. 这样处理后,就不再需要后续的`if (editIndex != -1) { descConflict = false; }`,因为跳过了编辑项,所以编辑项不会引起冲突标志,除非其他项有相同的描述。 ### 原始代码的意图: 原始代码的逻辑是:即使在编辑模式下,如果发现重复,先标记冲突,然后如果是编辑模式,则忽略冲突。这样在编辑模式下,即使有重复(包括自己)也会被忽略。改进后的代码更精确地避免了编辑项自身重复的问题。 §§相关问题§§1. 在JavaScript中如何优化遍历数组查找重复项的性能?2. 编辑模式下跳过当前项的冲突检查有哪些实现方式?3. 为什么在编辑模式中需要特殊处理重复检查?4. 使用jQuery$.each方法时如何提前终止循环?5. 在表单验证中处理唯一性检查的常见模式有哪些? </think>这段代码主要用于检查**服务器列表中的描述字段是否重复**,并在出现重复时进行错误处理。具体逻辑如下: ### 代码功能解析 1. **初始化冲突标志** `var descConflict = false;` 设置一个布尔变量用于记录描述是否冲突 2. **遍历服务器列表检查重复** ```javascript $.each(serverList, function() { if (this.description == description) { descConflict = true; // 发现重复描述 } }); ``` 遍历`serverList`数组,对比每个元素的`description`属性与传入的`description`值 3. **编辑模式特殊处理** ```javascript if (editIndex != -1) { descConflict = false; // 重置冲突标志 } ``` 关键逻辑:当`editIndex`不为-1时(表示当前处于编辑模式),强制清除冲突标志。这是因为编辑现有条目时允许保持原描述不变。 4. **冲突处理机制** ```javascript if (descConflict) { $.alert(ERR_FW_RULE_DESC_CONFLICT); // 显示错误提示 return false; // 阻止后续操作 } ``` 最终检查冲突标志,如果有冲突则弹出错误提示并终止流程 ### 典型使用场景 这段代码常见于: - 服务器配置管理界面 - 防火墙规则编辑器 - 需要唯一性校验的表单提交场景 特别是在编辑现有条目时避免误判为"重复描述" ### 潜在改进建议 1. **提前终止遍历** ```javascript $.each(serverList, function() { if (this.description == description) { descConflict = true; return false; // 添加此行可提前结束遍历 } }); ``` 2. **排除当前编辑项** ```javascript $.each(serverList, function(index) { // 编辑时跳过当前编辑项 if (editIndex != -1 && index === editIndex) return; if (this.description == description) descConflict = true; }); ``` 3. **使用数组方法简化** ```javascript const conflict = serverList.some((item, index) => item.description === description && (editIndex === -1 || index !== editIndex) ); if (conflict) { ... } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值