我需要将数据添加到一组图像中,这些图像在每个元素之后递增。 Jquery in Action有这段代码:
settings.thumbnails$ = this.filter('img');
settings.thumbnail$.each(function(n) {
$(this).data('photo-index',n);
这本书说,使用.each()会为每个记录其在列表中的位置的元素添加一个唯一的数字。我不明白这是怎么回事,因为附加到'photo-index'的值n
对于每次迭代都是相同的......
有人看到我在这里缺少的东西吗?
答案 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
的结果中图像的索引。
只要您在文档中当前显示的图像之后添加图像,此索引就会保持不变。