2012-03-11 22 views
5

¿Es posible usar un objeto elemento jQuery como una matriz/clave de objeto?¿Usar el elemento elemento jQuery como clave de matriz?

Ejemplo:

var el = jQuery(this); 
var test = {}; 
test[el] = "something strange"; 

Haciendo un:

jQuery.each(test, function(k,v){ 
    console.log(k); 
}); 

simplemente informa [object Object]

¿Hay que decir que yo podía volver a utilizar el k como jQuery originales elemento objeto?

+0

¿Qué esperas lograr en definitiva? Como 'el' es un objeto, si desea asociar' "algo extraño" 'con ese objeto, ¿por qué no simplemente agrega una propiedad al objeto? –

+0

@amnotiam Este fue un ejemplo simplificado. El uso real sería que necesitaba una matriz de els, por lo que no funcionaría agregarle una propiedad. –

+0

Si necesita una matriz de els no es solo 'var test = []; test.push (el); // etc'? – nnnnnn

Respuesta

7

No, eso no es posible.

ECMAscript solo permite strings como pares clave-valor para los objetos.


Lo que podría hacer en su lugar, es el uso de la id value de un solo nodo en su lugar. Por lo tanto, podría verse como

var el = jQuery(this); 
var test = {}; 
test[this.id] = "something strange"; 

Por supuesto, requiere que el nodo tenga un valor de identificación.

+0

Bien, está bien. Bueno, supongo que tendré que generar una identificación genérica para mis propósitos; Suficientemente simple. –

+0

El id es el atributo "id" en el elemento o es algo más? – hfossli

0

Cuando usa $.each([],function(i,v)){} i es el índice yv es el valor.

+0

El OP lo sabe. La pregunta es por qué el índice se informa como '" [object Object] "' ​​(señalando que en este caso el "índice" es una clave o nombre de propiedad, dado que OP está trabajando con un objeto simple y no una matriz), y es posible en JS para usar un objeto como nombre de propiedad. – nnnnnn

0

Está viendo el objeto convertido a una cadena ('[object Object]') tan pronto como intentó asignarlo como una tecla de matriz. Para los hashes simples, usted podría concebiblemente serializarlos en una clave:

var obj = { foo: 'bar' }, 
    key = JSON.stringify(obj), 
    obj2 = { key: 'something strange' }; 

En general, sin embargo, usted querrá evitar este tipo de cosas. Puede usar matrices paralelas que contengan los objetos y mensajes, en su lugar:

var keys = [ {foo: 'bar'}], 
    values = [ 'something strange' ]; 
-1

Creo que necesita definir un objeto y luego presionar en la matriz.

var obj = {}; 
obj[foo] = 'bar'; 
ary.push(obj); 
Cuestiones relacionadas