将所有图像的源放入数组中

时间:2012-03-06 09:51:50

标签: javascript jquery

将div中所有图像的源属性字符串放入数组的最简洁方法是什么?

我希望这会奏效 -

var imageSourceArray = $("#leDiv img").attr('src');
alert(imageSourceArray[3]);  //not alerting the source, boo hoo.

我是否需要遍历$(“#leDiv img”)并将每个src字符串分别添加到数组中?或者有更优雅的方式来做到这一点?

4 个答案:

答案 0 :(得分:3)

您可以使用jQuery's map函数,该函数描述为:

  

通过函数传递当前匹配集中的每个元素,生成一个包含返回值的新jQuery对象。

对于你的例子:

var mySources = $('#leDiv img').map(function() {
    return $(this).attr('src');
}).get();

答案 1 :(得分:1)

编辑:更优雅的解决方案,内部显然还有一些循环:

var img_sources = $('#leDiv img').map(function(){ return $(this).attr('src') });

实际上,您需要遍历集合并单独添加源。

var img_sources = [];
$('#leDiv img').each(function(i,e){
    img_sources.push($(e).attr('src'))
})

一些背景:jQuery.fn.attr()在内部映射到jQuery.access(),其关键部分如下所示:

function( elems, key, value, exec, fn, pass ) {
    var length = elems.length;
    // setter functions omitted here …    

    // Getting an attribute
    return length ? fn( elems[0], key ) : undefined;
}

注意elems[0]部分 - 只有集合中的第一项被提供给后续的回调函数(实际上是jQuery.attr()),负责提取信息。

答案 2 :(得分:0)


var imageSourceArray = [];
$('#leDiv img').each(function(){
   var src = $(this).attr("src");
   imageSourceArray.push(src);
});
alert(imageSourceArray[3]);

答案 3 :(得分:0)

在获取图像时,您已经在集合中拥有了src。不将src属性存储在另一个数组中可能更有效:

$('#leDiv img').each(function(i,e){
    var dosomethingwith = $(e).attr('src');
})

或者你可以这样做:

var ImageCol = $('#leDiv img');
alert(ImageCol[3].attr('src'));