2011-05-18 47 views
2

我正在尝试使用jquery为图片库分页。我使用的图像目录包含大约600张图像,命名如下:“photo1.jpg”...“photo(n).jpg”...“photo600.jpg”。如何将参数发送到Jquery中的每个函数

假设我有一个变量持有页码var page,每个虚拟页面上有40个图像。我想要做的事情如下:

for (var i = 0; i<40; i++){ 
     var imageNum = (((page*40)-40)+i+1); 
     $("img")[i].attr("src","photo"+ imageNum + ".jpg"); // Doesn't work 
    } 
} 

这是hackish,但你看到我想做什么? jquery API有some info on using each()迭代通过jquery对象,但我无法弄清楚如何发送每个函数的一个参数,其中包含关于哪个页面的数据,我需要确定图像的路径。我要的东西,如:

$("img").each(function (i) { 
     //code to update image paths based on page parameter 
     }); 

我打开不同的方法为好,我是一个总的小白,我觉得我可能要对这个错误的方式来开始:S。

编辑 感谢大家的回答。

如果你正在寻找一个快速和简单的答案,使用each(),看看杰夫B的答案。

我接受了帕特里克dw的答案,因为它更详细地介绍了我正在制作的一个单独的错误,并介绍了另一种方法。另外,如果您和我一样,并且认为您需要将参数传递给.each(),请参阅我们对他的回复的评论。

回答

3

这不起作用,因为[i]为您提供了不裹在一个jQuery对象的本地DOM元素。

jQuery有eq()[docs]方法给你包装的元素,所以你可以调用attr()[docs]方法。

// Do NOT run the selector inside the loop 
var imgs = $("img"); 

for (var i = 0; i<40; i++){ 
     var imageNum = (((page*40)-40)+i+1); 
     imgs.eq(i).attr("src","photo"+ imageNum + ".jpg"); // Doesn't work 
    } 
} 

作为替代,可以直接传递一个函数到attr()[docs]方法将循环过你的元素。

$("img").attr('src', function(i) { 
    return "photo" + (((page*40)-40)+i+1) + ".jpg"; 
}); 

return值将被分配给你设置属性(在这种情况下src)的值。

+0

1为那些商标上标[docs]链接。你应该注册这些。 – Raynos 2011-05-18 17:16:09

+0

帕特里克,我非常喜欢你提供的替代解决方案,非常干净! 不幸的是,对于任何发现这条线索的人来说,他们可能会和我一样对范围感到困惑。 我错误的印象是,我需要将'page'传递给每个函数 - 显然你没有。 'page'在你的替代解决方案和Jeff B给出的解决方案中都可用,它不需要被传递给被称为每个参数的函数。 与回调和函数被调用的顺序有关吗?我需要阅读更多。我是新来jquery(和JavaScript)。 :) – 2011-05-18 17:20:02

0

第二种方法当然更加漂亮,但第一种方法也可以。

你应该使用这样的:$($("img")[i]).attr(...)

1

.each()功能通行证你的指标,(如果你希望值):

$("img").each(function(idx) { 
    $(this).attr("src","photo"+ (((page*40)-40)+idx+1) + ".jpg"); 
}); 

实施例:(类似,但修改为使用占位符)

http://jsfiddle.net/mEzR9/

相关问题