不会在jQuery中迭代数组

时间:2011-01-25 20:33:47

标签: javascript jquery iterator

所以我可以把我想要的所有图像都放到一个数组中并将它们传递给$ image。但是,当我尝试循环遍历该数组时,它只会持续警告相同的项目3次。

我遇到问题的代码。

   getItem : function($image){
    console.log($image)
    console.log(jQuery.type($image))
    var setup ='<img src="' + $($image).attr('href') + '" title="' +    $($image).attr('title') + '"/>';

    $.each($image, function(i){
        alert( setup);
    });

 } 

HTML

    <a href="images/slideshow/1-GW.PhillipBarnhart.ReverendMemory.jpg" title="Phillip Barnhart as: 
        Reverend Memory - a clergyman who stands for decorum and truth." rel="slideshow"><img src="images/view-slideshow.jpg" width="490" height="352" alt="View Slideshow"></a>
        <a rel="slideshow" href="images/slideshow/2-GW.BethBrooks.POLLYTODD.jpg">fff</a>
        <a rel="slideshow" href="images/slideshow/3-GW.NickHale.NOSTALGIA.jpg">test</a>

整个脚本或者如果你喜欢jsFiddle这里是一个链接。 http://jsfiddle.net/h3az4/

var slideShow = {
config : {
    wrapper : 'body',
    container : 'div',
    anchor : 'a[rel="slideshow"]'
},

init : function(config) {
    $.extend(slideShow.config, config);
    $(slideShow.config.anchor).hide();
    $(slideShow.config.wrapper).find(slideShow.config.anchor)
        .eq(0)
        .show()
        .click(function(e){
            e.preventDefault();
            slideShow.getItem($(slideShow.config.anchor));
        });
},

getItem : function($image){
    console.log($image)
    console.log(jQuery.type($image))
    var setup ='<img src="' + $($image).attr('href') + '" title="' + $($image).attr('title') + '"/>';

    $.each($image, function(i){
        alert( setup);
    });


},

createTumbnail : function($image){

}

};


$(document).ready(function() {
slideShow.init();
 });

4 个答案:

答案 0 :(得分:2)

我认为$image是一个数组,因为你正在循环它。如果是这样的话,你想要类似的东西......

$.each($image, function(i){
    var setup ='<img src="' + i.attr('href') + '" title="' +  i.attr('title') + '"/>';
    alert( setup);
});

答案 1 :(得分:2)

你使用$ .each循环错误。

你的第一个问题是,如果$ image是一个列表,$ image.attr(“x”)将得到列表中第一个元素的attr。你想要的是$($ image [i])或使用.get

第二个问题是在循环外声明var setup。这意味着它声明和使用一次而不是3次(因为你有3个项目)。

$.each($image, function(i){
    var setup ='<img src="' + $(this).attr('href') + '" title="' +       
        $(this).attr('title') + '"/>';
    alert( setup);
});

当您在函数中使用$.each this对象时,将依次引用数组中的每个对象。在这种情况下,this是一个DOM对象,因此您希望使用$(this)来获取jQuery图像对象。

在此查看工作示例http://jsfiddle.net/Raynos/h3az4/3/

答案 2 :(得分:0)

http://jsfiddle.net/h3az4/5/

检查我的解决方案

允许无限循环播放幻灯片,因为@ Dutchie432指向

,你已经过度复杂化了一些概念错误

希望这也会有所帮助, 汤姆

答案 3 :(得分:0)

您可以使用map()(docs)完成您的目标。

getItem : function($image){
    $image.map( function(i,val){
        return $('<img src="' + this.href + '" title="' +this.title + '"/>')[0];
    }).appendTo(slideShow.config.wrapper);
},

这将创建一个包含新<img>元素的新jQuery对象,然后appendTo()(docs) slideShow.config.wrapper选择器。

无需中间setup变量。

或者使用属性对象参数可能会更好一些:

getItem : function($image){
    $image.map( function(i,val){
        return $('<img>', { src:this.href, title:this.title })[0];
    }).appendTo(slideShow.config.wrapper);
},