javascript - 通过 Id 调用来遍历数组元素

标签 javascript jquery arrays jquery-selectors css-selectors

如何遍历包含 5 个元素的数组。我有 5 个元素,其 ID 分别为 imgone、imgtwo、imgthree、imgfour、imgfive。

var ids =
[ 
    "#imgone",
    "#imgtwo",
    "#imgthree",
    "#imgfour",
    "#imgfive"
]; 
for (var i = 0; id = ids[i]; i++)
{  
    $(id).click(function() {

        $("#cell1,#cell2,#cell3,#cell4,#cell5").hide(); 
         $("#cell" + (i+1)).show(); 

    });
}
});

然后我有 5 个 a 标签元素,例如

<a href="#"  id="imgone"><img src ="myimage1" /></a>    
<a href="#"  id="imgtwo"><img src ="myimage2" /></a>    
<a href="#"  id="imgthree"><img src ="myimage3" /></a>    
<a href="#"  id="imgfour"><img src ="myimage4" /></a>    
<a href="#"  id="imgfive"><img src ="myimage5" /></a> 

cell1、cell2 等是我需要显示/隐藏元素点击的 block 。

顺便说一句,这段代码总是隐藏所有单元格 block 并显示单元格 6,这在我的代码中不存在。 我的意思是 $("#cell"+ (i+1)).show(); 永远不会将 i 的值设为 0、1、2、3 或 4。

那么我如何遍历数组并显示隐藏我的单元格。我认为这行代码有问题 $(id).click(function() 但不知道是什么???

最佳答案

这是一个闭包问题,变量i指向循环中使用的i,执行的时候总是6.

改用这段代码

for (var i = 0; id = ids[i]; i++)
{  
    var fnc = function(j){
        return function() {
            $("#cell1,#cell2,#cell3,#cell4,#cell5").hide(); 
            $("#cell" + (j+1)).show();
        };
    }(i);
    $(id).click(fnc);
}

有关 javascript 闭包的更多信息,请参阅 How do JavaScript closures work?

关于javascript - 通过 Id 调用来遍历数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4983101/

相关文章:

javascript - document.getElementById.innerHTML 只工作一次 - 如何配置全局复制元素?

javascript - 判断一个多词字符串是否包含一个词

c# - 如何将存储文件分配给 ByteArray?

javascript - 允许只购买一种产品@ Shopify

javascript - 让按钮多次触发 onclick 事件

jquery - 我有带下拉菜单的 CSS 菜单,但是我的下拉菜单被我的 jquery 幻灯片阻止了,有什么办法可以修复它?

C++ |将 int 转换为 byte[4],反之亦然

c - 在c中序列化字符串

javascript - 在javascript中获取链接名称

javascript - 使用跨域帖子发送凭据?