将div中所有图像的源属性字符串放入数组的最简洁方法是什么?
我希望这会奏效 -
var imageSourceArray = $("#leDiv img").attr('src');
alert(imageSourceArray[3]); //not alerting the source, boo hoo.
我是否需要遍历$(“#leDiv img”)并将每个src字符串分别添加到数组中?或者有更优雅的方式来做到这一点?
答案 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'));