Sie versuchen, photos[a]["url"]
, photos[a]["caption"]
usw. etwas zuzuweisen, aber photos[a]
existiert noch nicht. photos
ist zunächst ein leeres Array, also müssen Sie zunächst photos[a]
auf etwas setzen. Da Sie String-Schlüssel verwenden möchten ("url"
, "caption"
, usw.), sollte dieses etwas ein einfaches Objekt sein (das Javascript entspricht php associave-Arrays) (oder ein Hash, wenn Ihre Code-Basis es erlaubt).Dann können Sie ein wörtliches Objekt Konstrukt verwenden, um Ihre Funktion zu vereinfachen und Array#push
zu den unnötigen a
loszuwerden:
var photos = [];
$("#photos img").each(function(img) {
photos.push({
url: img.src,
caption: img.alt,
background: img.style.backgroundColor
});
});
Stellen Sie außerdem sicher, dass this
ist eigentlich Ihr img
Element. Einige each
Implementierungen setzen in Ihrem Fall this
auf das globale Objekt.
edit: ok, es sieht aus wie jQuery.each
automatisch this
zum iterativen Element setzt, aber wickeln Sie es nicht in jQuery-Güte, so haben Sie entweder this
in $()
oder benutzen Sie unformatierten DOM wrap (verwendete ich die letztere in mein Beispiel).
edit2: egal, mit this
ist irgendwie komisch, seit die Callback-Funktion an each
ein Argument übergeben. Kann dieses Argument auch verwenden (umbenannt).
'this.css' wird nicht funktionieren, Sie müssen' this' in ein jQuery-Objekt einbinden: '$ (this) .css'. –
Während der Titel ein Duplikat angibt, wollte der Fragesteller wirklich ein Array von Objekten, kein Array von Arrays. –