jquery中的.each()方法

时间:2011-08-19 19:02:33

标签: jquery

我需要将数据添加到一组图像中,这些图像在每个元素之后递增。 Jquery in Action有这段代码:

settings.thumbnails$ = this.filter('img');
settings.thumbnail$.each(function(n) {
$(this).data('photo-index',n);

这本书说,使用.each()会为每个记录其在列表中的位置的元素添加一个唯一的数字。我不明白这是怎么回事,因为附加到'photo-index'的值n对于每次迭代都是相同的......

有人看到我在这里缺少的东西吗?

4 个答案:

答案 0 :(得分:2)

var data = ['foo','bar','foobar','baf','woot'];
$.each(data,function(iterator,element){
  console.log(iterator+'. '+element);
});

你错过了.each在函数调用中有两个参数。

因此,要将其应用于您的代码:

settings.thumbnails$ = this.filter('img');
settings.thumbnails$.each(function(i,e) { // add back the iterator (i)
  $(this).data('photo-index',i); // reference it here
});

您还可以在.each来电中引用“settings.thumbnail $”(单数),这可能是个问题,但我不知道您的目的是什么。 < / p>

或者,您可以使用.each()并使用它的本机索引来分配:

settings.thumbnails$.each(function(i,e){
  $(this).data('photo-index',$(this).index());
});

答案 1 :(得分:0)

jQuery each()将使用列表中当前迭代的索引填充第一个参数,因此settings.thumbnail $的每个元素将被分配一个唯一的n$(this).data('photo-index', n)

答案 2 :(得分:0)

在您的函数中,this关键字指的是您正在迭代的单个元素。 n将成为索引。因此,如果您有3个img元素,则该函数将被调用3次,n从0到2,并且每个当前元素都绑定到this。您还可以通过函数的第二个参数访问元素:function(n, element) { $(element).data("photo-index", n); }

文档为here

答案 3 :(得分:0)

filter函数返回带有图像元素的数组。 唯一编号可能确实引用了数组索引。因此n是调用filter的结果中图像的索引。

只要您在文档中当前显示的图像之后添加图像,此索引就会保持不变。