2012-03-06 42 views
0

將div內所有圖像的源屬性字符串放入數組中的最簡潔方法是什麼?將所有圖像的源代碼放入數組

我希望這會工作 -

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

我需要遍歷$(「#leDiv IMG」),每個SRC字符串添加到單獨的陣列?還是有更好的方法來做到這一點?

回答

3

可以使用被描述爲jQuery's map功能:

通過一個函數傳遞當前匹配集合中的每個元素,產生一個包含返回值的新jQuery對象。

對於示例:

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

不錯 - 不確定我完全理解它。 *去看看jQuery文檔* – Finnnn 2012-03-06 10:12:00

0
 

var imageSourceArray = []; 
$('#leDiv img').each(function(){ 
    var src = $(this).attr("src"); 
    imageSourceArray.push(src); 
}); 
alert(imageSourceArray[3]); 
 
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()實際上)負責提取信息。

+0

謝謝您的回答,我希望有一種方法來避免每個語句。看起來這是不可能的。以防萬一,以防萬一。我現在正在使用你的答案。 – Finnnn 2012-03-06 10:00:17

0

當您獲取圖像時,您已在集合中擁有src。這可能是更有效的不是SRC屬性存儲在另一個數組:

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

,或者你可以這樣做:

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