从列表元素中创建javascript对象

时间:2013-07-31 19:01:38

标签: javascript jquery html oop

我遇到一个小问题,在无序列表中创建列表项目中的对象。我正在创建一个库,我需要每个库缩略图都是它自己的对象,所以我使用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;
        });

    });

2 个答案:

答案 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); 一样访问它们。