Usted está tratando de asignar algo a photos[a]["url"]
, photos[a]["caption"]
, etc., pero photos[a]
no existe. photos
es una matriz vacía al principio, por lo que primero tiene que establecer photos[a]
. Dado que desea utilizar claves de secuencia ("url"
, "caption"
, etc.), este algo debe ser un objeto simple (el javascript equivalente a las matrices php associave) (o un Hash si su base de código lo permite).A continuación, puede utilizar una construcción literal de objeto para simplificar su función, y Array#push
para deshacerse de lo innecesario a
:
var photos = [];
$("#photos img").each(function(img) {
photos.push({
url: img.src,
caption: img.alt,
background: img.style.backgroundColor
});
});
Además, asegúrese de que this
es en realidad el elemento img
. Algunas implementaciones de each
establecerán this
en el objeto global en su caso.
edición: ok, parece que jQuery.each
ajusta automáticamente this
al elemento iterado, pero no lo envuelve en jQuery-bondad, así que hay que envolver bien this
en $()
o utilizar DOM normal (he usado este último en mi ejemplo).
edit2: de todos modos, usar this
es un poco extraño ya que la función de devolución de llamada pasada a each
recibe un argumento. Bien podría usar este argumento (renombrado).
'this.css' no funcionará, tiene que ajustar' this' dentro de un objeto jQuery: '$ (this) .css'. –
Mientras que el título indica un duplicado, lo que el asker realmente quería era una matriz de objetos, no una matriz de matrices. –