2009-07-30 17 views
5

En mi entender, al hacer referencia a cualquier elemento DOM en jQuery mediante el signo de dólar (como este: $("#mydiv")), se devuelve un objeto.¿Cómo puedo asignar una propiedad a un objeto jQuery?

Estoy buscando para añadir una propiedad más a un objeto como tal:

$("#mydiv").myprop = "some value"; 

pero esto no parece funcionar. Estoy intentando almacenar un valor en este objeto para poder consultarlo más tarde.

El siguiente código, sin embargo, me da un valor undefined incluso inmediatamente después de establecer la propiedad.

$("#mydiv").myprop = "some value"; 
alert($("#mydiv").myprop); 

este código no funciona bien:

$("#mydiv")["myprop"] = "some value"; 
alert($("#mydiv").myprop); 

¿Hay una manera de lograr esto? ¿O necesito almacenar todas mis propiedades como atributos en el objeto DOM a través del $("#mydiv").attr("myprop", "some value") (esto es mucho menos deseable).

Gracias!

+0

no creo que puedas hacer esto ... puede que tenga que ir con su última declaración ... – Jason

Respuesta

13

jQuery expone el concepto de una bolsa de propiedades con el método data.

// set some arbitrary data 
$('#selector').data('example-property', exampleValue); 

// get the value later 
var theValue = $('#selector').data('example-property') 

Esto evita las manipulaciones DOM que pueden ser costosas en términos de rendimiento.

+0

ooohhh .... agradable. – seth

+0

muchas gracias! eso es exactamente lo que estaba buscando! :) –

1

La función $ crea un objeto jquery que representa un elemento dom. Puede cambiar los atributos del objeto, pero esos cambios no se harán aparentes en el elemento que "representa" a menos que jquery sepa qué hacer con ellos (asignando un controlador de evento click quizás).

Así que cuando haces la primera selección, modifica el objeto que hiciste, pero no hace nada con el elemento html real. Cuando ejecuta $ nuevamente, crea un objeto SEPARADO, que no retiene el cambio de atributo que realizó en el primero.

es posible que pueda hacer un cambio directo a un objeto HTML:. (Sin jQuery)

GetElementByID ("theID") myprop = "Hello World";

que resulta en: <p id="theid" myprop="hello world"></p> pero establecer un atributo de un objeto jquery simplemente no lo hará. Para obtener el efecto equivalente en jquery, use el método .data que sugirió Ken Browning. (demasiado tarde de nuevo ...): D

+0

muchas gracias. esto es bueno saber pero no exactamente lo que estaba buscando. votos arriba, sin embargo. –

1

No estoy seguro de si esto se debe a un cambio en jQuery. Pero lo he hecho más o menos como se describe en la pregunta ...

var domElem = $('#selector'); 
domElem.myProp = "Hello world"; 

Ahora bien, en mi caso tengo que usar este objeto en una llamada al método más adelante:

<span onclick=\"SelectAll(domElem)\">Click me!</span> 

El método puede entonces hacer como esto:

function SelectAll(domElm){ 
    alert(domElm.myProp); 
} 

Como ya he dicho - podría ser una actualización en el motor jQuery, pero parece que la llamada .data() ya no es necesaria :-)

Cuestiones relacionadas