2015-11-19 58 views
0

我有以下的jQuery代碼:jQuery的變量不顯示值了每個循環的

var imgArr = {}; 
var imgAttrib = $(selector).map(function() { 
    imgArr.src = $(this).attr('src'); 
    imgArr.id = $(this).attr('id'); 
    imgArr.height = $(this).attr('height'); 
    imgArr.width = $(this).attr('width'); 
    //console.log(imgArr); 
    imgAttrib.push(imgArr); 
    console.log("imageAttrib is "); 
    console.log(imgAttrib); 
}); 
console.log("FINAL imageAttrib is "); 
console.log(imgAttrib); 

當我檢查我的控制檯,每次迭代控制檯打印:

imageAttrib is: 
[Object{src="some_url",id="123"...] 

但是在循環之後它打印:

FINAL imageAttrib is: 
Object[] 

正如你可以看到imageAttrib在循環後變爲空的,但其中有值。我究竟做錯了什麼?

+0

你不是從回調返回任何東西,所以沒有什麼映射。你把所有的值都放到imgArr中。 imgAttrib.push會導致錯誤,因爲它未定義 – Shanimal

+0

選擇器是什麼?我看到的直接問題是,您從不重新初始化imgArr,因此每次只覆蓋同一對象引用的屬性。 – AtheistP3ace

+0

@Shanimal是對的。您可能應該只爲我們提供'each'或'forEach'。你真的不是真的在使用'map' – nem035

回答

1

你永遠不return - 你正在使用.map有點不對勁 - 這裏有一個修改版本:

var imgAttrib = $(selector).map(function() { 
    return { 
     src: this.src, 
     id: this.id, 
     height: $(this).attr('height'), 
     width: $(this).attr('width') 
    } 
}).get(); 
+0

這很有效,謝謝。你能告訴我爲什麼我們最終需要使用.get()嗎? –

+0

@UndefinedVariable - jQuery的'.map'原始返回對象是一個包含該數組的對象。 '.get()'只是將結果轉換爲基本數組。 - http://api.jquery.com/map/ - 官方解釋正確。 – tymeJV