Bạn đang cố gán một thứ gì đó cho photos[a]["url"]
, photos[a]["caption"]
, v.v. nhưng photos[a]
chưa tồn tại. photos
là một mảng trống lúc đầu, vì vậy bạn phải đặt photos[a]
thành thứ gì đó trước tiên. Vì bạn muốn sử dụng các khóa chuỗi ("url"
, "caption"
, v.v.), cái này phải là một đối tượng đơn giản (tương đương javascript với mảng associave php) (hoặc Hash nếu cơ sở mã của bạn cho phép nó).Sau đó, bạn có thể sử dụng một cấu trúc đối tượng theo nghĩa đen để đơn giản hóa chức năng của bạn, và Array#push
để thoát khỏi sự không cần thiết a
:
var photos = [];
$("#photos img").each(function(img) {
photos.push({
url: img.src,
caption: img.alt,
background: img.style.backgroundColor
});
});
Ngoài ra, hãy chắc chắn rằng this
thực sự là yếu tố img
của bạn. Một số triển khai each
sẽ đặt this
cho đối tượng chung trong trường hợp của bạn.
chỉnh sửa: ok, nó trông giống như jQuery.each
tự động cài đặt this
đến các yếu tố lặp, nhưng không quấn nó trong jQuery-tốt lành, vì vậy bạn phải hoặc là quấn this
trong $()
hoặc sử dụng DOM đồng bằng (tôi đã sử dụng sau này trong ví dụ của tôi).
edit2: anyway, sử dụng this
là loại lạ vì hàm gọi lại được chuyển đến each
nhận được đối số. Cũng có thể sử dụng đối số này (được đổi tên).
'this.css' sẽ không hoạt động, bạn phải bọc' this' bên trong đối tượng jQuery: '$ (this) .css'. –
Trong khi tiêu đề cho biết một bản sao, những gì người hỏi thực sự muốn là một mảng các đối tượng, không phải là một mảng các mảng. –