我遇到一个小问题,在无序列表中创建列表项目中的对象。我正在创建一个库,我需要每个库缩略图都是它自己的对象,所以我使用jQuery的$ .each()
迭代每个列表项问题是我不知道如何给每个对象/它自己的实例名称。
以下是代码:
function galleryButton(){
this.link
this.name
this.image
this.identifier,
this.goPage = function(){
$('.container').animate({opacity : '0'}, 500).load(this.link + ' .galContainer', function(){$('.container').animate({opacity : '1'})});
return false;
}
}
$(document).ready(function(){
$.ajaxSetup({
cache:false
});
$('.gallery li a').each(function(node, value){
this = new galleryButton();
this.link = $(this).attr('href');
this.name = $(this).attr('name');
this.image = $(this + " img").attr('src');
this.identifier = $(this).attr('data-pic-id');
$(this).click(this.goPage);
})
$('.goback').click(function(){
var back = $(this).attr('href');
$('.container').animate({opacity : '0'}, 500).load(back + ' .gallery', function(){$('.container').animate({opacity : '1'})});
return false;
});
});
答案 0 :(得分:1)
不要将galleryButton存储到“this”变量中。制作一个新的var,
var myGalleryButton = new galleryButton();
并更新您的作业:
myGalleryButton.link = $(this).attr('href');
/// etc
然后在.each()函数的末尾,将myGalleryButton推送到数组/对象以供以后访问。
答案 1 :(得分:0)
这没有任何意义:
$('.gallery li a').each(function(node, value){
this = new galleryButton();
this.link = $(this).attr('href');
this.name = $(this).attr('name');
this.image = $(this + " img").attr('src');
this.identifier = $(this).attr('data-pic-id');
$(this).click(this.goPage);
});
您不想覆盖this
,您想要创建一个新对象,如:
var slide = new galleryButton();
slide.link = $(this).attr('href');
slide.name = $(this).attr('name');
slide.image = $(this + " img").attr('src');
slide.identifier = $(this).attr('data-pic-id');
所以在这种情况下slide
是实例名称,但它只在每个回调函数的函数范围内存在。
现在,如果您需要能够访问这些对象,那么您需要在函数外部创建变量或将它们放在其他可访问的位置。如果是我,我会将它们存储在data
的{{1}}中:
li
然后您可以像 var slide = new galleryButton();
slide.link = $(this).attr('href');
slide.name = $(this).attr('name');
slide.image = $(this + " img").attr('src');
slide.identifier = $(this).attr('data-pic-id');
$(this).closest('li).data('slide', slide);
一样访问它们。